История изменений
Исправление demensdeum, (текущая версия) :
Похоже clang++ унижен и уничтожен с помощью g++ и pgo, далее старый вариант кода
#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;
void check_combine(string &res, size_t &len, const string &s1, const string &s2)
{
len = 0;
for(auto &ch: s1)
{
if(len == s2.size())
{
break;
}
if(ch == s2.at(len))
{
len += 1;
}
else
{
len = 0;
}
}
if(!len)
{
res = "";
}
else
{
string s3 {s2};
s3.erase(0, len);
res = s1;
res += s3;
}
}
void getlines(vector<string> &lines, fstream & f)
{
string str;
while(getline(f, str))
{
lines.push_back(str);
}
}
int main()
{
fstream inFile;
inFile.open ("russian_nouns.txt", std::fstream::in);
vector<string> lines;
getlines(lines, inFile);
inFile.close();
auto i = 0;
size_t maxLen {0};
size_t rusMaxLen {0};
string maxRes {""};
time_t startTime = time(nullptr);
size_t counter {0};
for(auto &s1: lines)
{
for(auto &s2: lines)
{
counter += 1;
if(s1 == s2)
{
continue;
}
if(s1.size() < maxLen)
{
continue;
}
if(s2.size() < maxLen)
{
continue;
}
size_t len {0};
string res;
// if (i % 1000000 == 0) {
// time_t delta = time(nullptr) - startTime;
// cout << "s1 " << s1 << endl << "s2 "<< s2 << "\t прошло: " << delta << " секунд" << endl;
// }
// i++;
check_combine(res, len, s1, s2);
if(res == s1)
{
continue;
}
if(res == s2)
{
continue;
}
if(len > maxLen)
{
maxLen = len;
rusMaxLen = maxLen / 2;
time_t delta = time(nullptr) - startTime;
string deltaStr {s2};
deltaStr.erase(len);
maxRes = deltaStr + " - " + s1 + '-' + s2;
cout << counter << "\t прошло: " << delta << " секунд, длина: ";
cout << rusMaxLen << ", " << maxRes << '\n';
}
}
}
cout << "\n\nРезультат: " << rusMaxLen << ", " << maxRes << '\n';
time_t delta = time(nullptr) - startTime;
cout << "Полное время переборов: " << delta;
return 0;
}
echo "---"
g++ test.cpp -Ofast -fprofile-generate="profile" -o pgo
echo "---"
./pgo
echo "---"
g++ test.cpp -Ofast -fprofile-use="profile" -o pgo
echo "---"
./pgo
echo "---"
clang++ test.cpp -Ofast -o OfastClang
echo "---"
./OfastClang
PGO G++ - полное время переборов: 67
Clang++ - полное время переборов: 84
Исправление demensdeum, :
Похоже clang++ унижен и уничтожен с помощью g++ и pgo, далее старый вариант кода
#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;
void check_combine(string &res, size_t &len, const string &s1, const string &s2)
{
len = 0;
for(auto &ch: s1)
{
if(len == s2.size())
{
break;
}
if(ch == s2.at(len))
{
len += 1;
}
else
{
len = 0;
}
}
if(!len)
{
res = "";
}
else
{
string s3 {s2};
s3.erase(0, len);
res = s1;
res += s3;
}
}
void getlines(vector<string> &lines, fstream & f)
{
string str;
while(getline(f, str))
{
lines.push_back(str);
}
}
int main()
{
fstream inFile;
inFile.open ("russian_nouns.txt", std::fstream::in);
vector<string> lines;
getlines(lines, inFile);
inFile.close();
auto i = 0;
size_t maxLen {0};
size_t rusMaxLen {0};
string maxRes {""};
time_t startTime = time(nullptr);
size_t counter {0};
for(auto &s1: lines)
{
for(auto &s2: lines)
{
counter += 1;
if(s1 == s2)
{
continue;
}
if(s1.size() < maxLen)
{
continue;
}
if(s2.size() < maxLen)
{
continue;
}
size_t len {0};
string res;
// if (i % 1000000 == 0) {
// time_t delta = time(nullptr) - startTime;
// cout << "s1 " << s1 << endl << "s2 "<< s2 << "\t прошло: " << delta << " секунд" << endl;
// }
// i++;
check_combine(res, len, s1, s2);
if(res == s1)
{
continue;
}
if(res == s2)
{
continue;
}
if(len > maxLen)
{
maxLen = len;
rusMaxLen = maxLen / 2;
time_t delta = time(nullptr) - startTime;
string deltaStr {s2};
deltaStr.erase(len);
maxRes = deltaStr + " - " + s1 + '-' + s2;
cout << counter << "\t прошло: " << delta << " секунд, длина: ";
cout << rusMaxLen << ", " << maxRes << '\n';
}
}
}
cout << "\n\nРезультат: " << rusMaxLen << ", " << maxRes << '\n';
time_t delta = time(nullptr) - startTime;
cout << "Полное время переборов: " << delta;
return 0;
}
echo "---"
g++ test.cpp -Ofast -fprofile-generate="profile" -o pgo
echo "---"
./pgo
echo "---"
g++ test.cpp -Ofast -fprofile-use="profile" -o pgo
echo "---"
./pgo
echo "---"
clang++ test.cpp -Ofast -o pgo
echo "---"
./pgo
PGO G++ - полное время переборов: 67
Clang++ - полное время переборов: 84
Исходная версия demensdeum, :
Похоже clang++ унижен и уничтожен с помощью g++ и pgo
#include <iostream>
#include <fstream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;
void check_combine(string &res, size_t &len, const string &s1, const string &s2)
{
len = 0;
for(auto &ch: s1)
{
if(len == s2.size())
{
break;
}
if(ch == s2.at(len))
{
len += 1;
}
else
{
len = 0;
}
}
if(!len)
{
res = "";
}
else
{
string s3 {s2};
s3.erase(0, len);
res = s1;
res += s3;
}
}
void getlines(vector<string> &lines, fstream & f)
{
string str;
while(getline(f, str))
{
lines.push_back(str);
}
}
int main()
{
fstream inFile;
inFile.open ("russian_nouns.txt", std::fstream::in);
vector<string> lines;
getlines(lines, inFile);
inFile.close();
auto i = 0;
size_t maxLen {0};
size_t rusMaxLen {0};
string maxRes {""};
time_t startTime = time(nullptr);
size_t counter {0};
for(auto &s1: lines)
{
for(auto &s2: lines)
{
counter += 1;
if(s1 == s2)
{
continue;
}
if(s1.size() < maxLen)
{
continue;
}
if(s2.size() < maxLen)
{
continue;
}
size_t len {0};
string res;
// if (i % 1000000 == 0) {
// time_t delta = time(nullptr) - startTime;
// cout << "s1 " << s1 << endl << "s2 "<< s2 << "\t прошло: " << delta << " секунд" << endl;
// }
// i++;
check_combine(res, len, s1, s2);
if(res == s1)
{
continue;
}
if(res == s2)
{
continue;
}
if(len > maxLen)
{
maxLen = len;
rusMaxLen = maxLen / 2;
time_t delta = time(nullptr) - startTime;
string deltaStr {s2};
deltaStr.erase(len);
maxRes = deltaStr + " - " + s1 + '-' + s2;
cout << counter << "\t прошло: " << delta << " секунд, длина: ";
cout << rusMaxLen << ", " << maxRes << '\n';
}
}
}
cout << "\n\nРезультат: " << rusMaxLen << ", " << maxRes << '\n';
time_t delta = time(nullptr) - startTime;
cout << "Полное время переборов: " << delta;
return 0;
}
echo "---"
g++ test.cpp -Ofast -fprofile-generate="profile" -o pgo
echo "---"
./pgo
echo "---"
g++ test.cpp -Ofast -fprofile-use="profile" -o pgo
echo "---"
./pgo
echo "---"
clang++ test.cpp -Ofast -o pgo
echo "---"
./pgo
PGO G++ - полное время переборов: 67
Clang++ - полное время переборов: 84