Files
f-task/main.cpp

92 lines
2.4 KiB
C++
Raw Permalink Normal View History

#include <cctype>
#include <cstdlib>
#include <iostream>
#include <string>
2024-03-08 09:35:26 +05:00
std::string decode(std::string& strIn, std::string::iterator& itr, bool firstCircle = false)
{
std::string out;
while (itr != strIn.end())
{
std::string strNum;
auto repeat = 1;
if (std::isdigit(static_cast<unsigned>(*itr)))
{
while (*itr != '[')
{
strNum += *itr++;
}
repeat = std::atoi(strNum.c_str());
2024-03-08 09:35:26 +05:00
auto rptOut = decode(strIn, ++itr);
for (int i = 0; i < repeat; ++i)
2024-03-08 09:35:26 +05:00
out += rptOut;
}
if (*itr == ']')
{
2024-03-08 09:35:26 +05:00
if (!firstCircle)
return out;
}
else
out += *itr;
++itr;
}
return out;
}
std::string kek(std::string strIn)
{
std::cout << strIn << std::endl;
auto itr = strIn.begin();
2024-03-08 09:35:26 +05:00
return decode(strIn, itr, true);
}
2024-03-08 13:59:20 +05:00
void compare(std::string expected, std::string out)
{
if (expected == out)
std::cout << "ok";
else
std::cout << "not ok. expected: " << expected << std::endl
<< " out: " << out;
std::cout << std::endl;
}
int main(int argc, char* argv[])
{
2024-03-08 13:59:20 +05:00
std::string strIn, strOut;
strIn = "3[a2[c]]";
2024-03-08 13:59:20 +05:00
strOut = "accaccacc";
// std::cout << kek(strIn) << std::endl;
compare(strOut, kek(strIn));
strIn = "c2[a]3[b]c";
2024-03-08 13:59:20 +05:00
strOut = "caabbbc";
// std::cout << kek(strIn) << std::endl;
compare(strOut, kek(strIn));
strIn = "c2[a3[b]]c";
2024-03-08 13:59:20 +05:00
strOut = "cabbbabbbc";
// std::cout << kek(strIn) << std::endl;
compare(strOut, kek(strIn));
strIn = "231[ab]";
2024-03-08 13:59:20 +05:00
strOut = "ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab";
// std::cout << kek(strIn) << std::endl;
compare(strOut, kek(strIn));
strIn = "3[b15[a]]";
2024-03-08 13:59:20 +05:00
strOut = "baaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaa";
// std::cout << kek(strIn) << std::endl;
compare(strOut, kek(strIn));
return 0;
}