Cześć,
robiąc AoC, dzień 5. napotkałem się na spory problem przy wykonywaniu programu.
Po 3 minutach nie dał rady podać wyniku, nie ukrywam niecierpliwy jestem i chciałem zobaczyć czy działa więc włączyłem release i podało wynik od razu.
Z ciekawości policzyłem wyszło mi 106 mln iteracji.
Moje pytania brzmią:
Jak release zmienia debug mode, czemu jest aż taka różnica? (I nie chodzi mi o przykład, gdy release ominie pętlę for(int i = 0, i<1000;i++); bo stwierdzi że nic nie robi)
Jak nauczyć się pisać optymalny kod? Jak go przyspieszać? Skąd czerpaliście wiedzę?
#include <iostream>
#include <fstream>
#include <string>
int main()
{
std::string polymer;
std::ifstream file("input.txt");
if (file.is_open()) {
while (file >> polymer);
file.close();
}
long long iterations = 0;
for (auto itr = polymer.begin(), buffor = polymer.begin() + 1; buffor != polymer.end(); ) {
if ((*buffor + 32 == *itr) || *buffor - 32 == *itr) {
polymer.erase(buffor);
polymer.erase(itr);
itr = polymer.begin();
buffor = polymer.begin() + 1;
}
else { itr++, buffor++; };
iterations++;
}
std::cout << iterations << std::endl;
std::cout << polymer.size();
std::cin.get();
}