Guest User

Untitled

a guest
Mar 21st, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. /** Copyright (c) 2018 Tsotne Zarandia */
  2.  
  3. #include <fstream>
  4. #include <iostream>
  5. #include <list>
  6. #include <string>
  7. #include <vector>
  8. using namespace std;
  9.  
  10. class Sagani {
  11. private:
  12. inline static int dgeID(const string &dge) {
  13. constexpr static const char * dgeebi[] { "ორშაბათი", "სამშაბათი",
  14. "ოთხშაბათი", "ხუთშაბათი", "პარასკევი", "შაბათი" };
  15. for (int i = 0; i <= 5; i++)
  16. if (dge == dgeebi[i])
  17. return i;
  18. return -1;
  19. }
  20.  
  21. inline static const char * disciplina(int i) {
  22. constexpr static const char * disciplinebi[] { "ლექცია",
  23. "სამუშაო ჯგუფი", "პრაქტიკული", "ლაბორატორიული" };
  24. return disciplinebi[i];
  25. }
  26.  
  27. struct Dro {
  28. string dge, auditoria, dawyeba, dasruleba;
  29.  
  30. Dro(ifstream &fin) {
  31. string s;
  32. for (int i = 0; i < 4; i++) {
  33. getline(fin, s, ':');
  34. fin.ignore(2);
  35. getline(fin,
  36. s == "აუდიტორი" ? auditoria :
  37. s == "დაწყების დრო" ? dawyeba :
  38. s == "დასრულების დრო" ? dasruleba : dge);
  39. }
  40. if (!dge.empty() && (dge[0] == '-' || dge[0] == ' '))
  41. dge.clear();
  42. }
  43.  
  44. inline const bool operator <(const Dro &d) {
  45. return dge == d.dge ?
  46. dawyeba < d.dawyeba : dgeID(dge) < dgeID(d.dge);
  47. }
  48. };
  49.  
  50. public:
  51. string name;
  52. /* Index: 0 - lekcia, 1 - samushao jgufi, 2 - praktikuli, 3 - lab */
  53. Dro dronni[4];
  54.  
  55. Sagani(string saxeli, ifstream &fin) :
  56. name(saxeli), dronni { Dro(fin), Dro(fin), Dro(fin), Dro(fin) } { }
  57.  
  58. static list<pair<Sagani*, int>> sort(const vector<Sagani*> &sagnebi) {
  59. list<pair<Sagani*, int>> lst;
  60. for (auto sagani : sagnebi)
  61. for (int i = 0; i < 4; i++)
  62. if (!sagani->dronni[i].dge.empty()) {
  63. auto it = lst.begin();
  64. while (it != lst.end()
  65. && !(sagani->dronni[i]
  66. < it->first->dronni[it->second]))
  67. ++it; // დახარისხება ჩასმით
  68. lst.insert(it, make_pair(sagani, i));
  69. }
  70. return lst;
  71. }
  72.  
  73. static void printSagnebi(list<pair<Sagani*, int>> lst, ostream &out) {
  74. string dge, dasruleba; // buffer
  75. for (auto l : lst) {
  76. if (dge != l.first->dronni[l.second].dge) {
  77. dge = l.first->dronni[l.second].dge;
  78. out << dge << ":" << endl << endl;
  79. dasruleba.clear();
  80. }
  81. out << "\t" << disciplina(l.second) << ":";
  82.  
  83. if (dasruleba > l.first->dronni[l.second].dawyeba)
  84. out << " <----------"; // წინა საგანს ემთხვევა
  85. if (dasruleba < l.first->dronni[l.second].dasruleba)
  86. dasruleba = l.first->dronni[l.second].dasruleba;
  87.  
  88. out << endl << "\t\t" << l.first->name << endl << "\t\t"
  89. << l.first->dronni[l.second].dawyeba << " - "
  90. << l.first->dronni[l.second].dasruleba << endl << "\t\t"
  91. << l.first->dronni[l.second].auditoria << endl << endl;
  92. }
  93. }
  94.  
  95. void write(ostream &out) {
  96. out << endl << name << endl;
  97. for (int i = 0; i < 4; i++)
  98. if (!dronni[i].dge.empty()) {
  99. out << endl << "\t" << disciplina(i) << endl;
  100. out << "\t\tდღე: " << dronni[i].dge << endl;
  101. out << "\t\tაუდ: " << dronni[i].auditoria << endl;
  102. out << "\t\tდრო: " << dronni[i].dawyeba << " - "
  103. << dronni[i].dasruleba << endl;
  104. }
  105. }
  106. };
  107.  
  108. int main() {
  109. ifstream fin("cxrili.txt");
  110. ofstream fout("cxril.txt");
  111. vector<Sagani*> sagnebi;
  112. {
  113. string str;
  114. while (getline(fin, str))
  115. sagnebi.push_back(new Sagani(str, fin));
  116. }
  117. Sagani::printSagnebi(Sagani::sort(sagnebi), fout);
  118. cout << "Sagnebis raodenoba: " << sagnebi.size() << endl;
  119. fout << "საგნების რაოდენობა: " << sagnebi.size() << endl;
  120.  
  121. for (auto sagani : sagnebi) {
  122. sagani->write(fout);
  123. delete sagani;
  124. }
  125.  
  126. fin.close();
  127. fout.close();
  128. return 0;
  129. }
Add Comment
Please, Sign In to add comment