Submission details
Task:Tulkki
Sender:OorigamiK
Submission time:2025-11-04 13:01:09 +0200
Language:C++ (C++20)
Status:COMPILE ERROR

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:63:31: warning: comparison of integer expressions of different signedness: 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   63 |             if (word.find("#")!=-1){
      |                 ~~~~~~~~~~~~~~^~~~
input/code.cpp:86:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |     for (int i=0;i<parsed.size();i++){
      |                  ~^~~~~~~~~~~~~~
input/code.cpp:132:23: error: no matching function for call to 'std::__cxx11::basic_string<char>::replace(int, int, const char8_t [3])'
  132 |     bottomText.replace(0, 1, u8"Σ");
      |     ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
In file included from /usr/include/c++/11/string:55,
                 from /usr/include/c++/11/bits/locale_classes.h:40,
                 from /usr/include/c++/11/b...

Code

#include <iostream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

void loop(vector<string>& parsed, vector<int>& variables, int start, int end, vector<vector<int>>& numOfOperations){
    for (int i=start;i<end;i++){
        if (parsed[i]=="INCREASE"){
            numOfOperations[0][int(parsed[i+1][0])-65]++;
            variables[int(parsed[i+1][0])-65]++;
            i++;
        }
        else if (parsed[i]=="PRINT"){
            numOfOperations[1][int(parsed[i+1][0])-65]++;
            cout<<parsed[i+1][0]<<" "<<variables[int(parsed[i+1][0])-65]<<"\n";
            i++;
        }
        else if (parsed[i]=="CLEAR"){
            numOfOperations[2][int(parsed[i+1][0])-65]++;
            variables[int(parsed[i+1][0])-65]=0;
            i++;
        }
        else if (parsed[i]=="REPEAT"){
            numOfOperations[3][int(parsed[i+1][0])-65]++;
            int num=1;
            int k=4;
            while (num>0){
                if (parsed[i+k]=="("){
                    num++;
                }
                if (parsed[i+k]==")"){
                    num--;
                }
                k++;
            }
            int loopSize = variables[int(parsed[i+1][0])-65];
            for (int j=0;j<loopSize;j++){ 
                loop(parsed, variables, i+4, i+k-2, numOfOperations);
            }
            i+=k-1;
        }
        else{
            cout<<"ERROR\n";
        }
    }
}

int main(){
    int x;
    cin>>x;
    string text((istreambuf_iterator<char>(cin)), istreambuf_iterator<char>());    
    vector<string> parsed;
    vector<int> variables(26, 0);
    variables[int('X')-65]=x;
    istringstream f(text);
    string line;
    vector<vector<int>> numOfOperations(4, vector<int>(26, 0));
    while(getline(f, line)){
        stringstream ss(line);
        string word;
        while (ss>>word){
            if (word.find("#")!=-1){
                string s = word.substr(0, word.find("#"));
                if (s.size()>0){
                    parsed.push_back(s);
                }
                break;
            }
            parsed.push_back(word);
        }
    }
    if (variables[int('X')-65]==0){
        for (int i=1;i<=1000;i++){
            variables[int('X')-65]=i;
            loop(parsed, variables, 0, parsed.size(), numOfOperations);
            for (int j=0;j<26;j++){
                variables[j]=0;
            }
        }
    }
    else{
        loop(parsed, variables, 0, parsed.size(), numOfOperations);
    }
    int numOfCommands=0;
    for (int i=0;i<parsed.size();i++){
        if (parsed[i]=="INCREASE"){
            numOfCommands++;
        }
        else if (parsed[i]=="PRINT"){
            numOfCommands++;
        }
        else if (parsed[i]=="CLEAR"){
            numOfCommands++;
        }
        else if (parsed[i]=="REPEAT"){
            numOfCommands++;
        }
    }
    int totalINCREASE, totalPRINT, totalCLEAR, totalREPEAT;
    totalINCREASE=0;
    totalPRINT=0;
    totalCLEAR=0;
    totalREPEAT=0;
    string topText;
    topText.resize(64, ' ');
    topText.replace(2, 8, "INCREASE");
    topText.replace(18, 5, "PRINT");
    topText.replace(34, 5, "CLEAR");
    topText.replace(50, 6, "REPEAT");
    cout<<topText<<"\n";
    for (int i=0;i<26;i++) {
        totalINCREASE+=numOfOperations[0][i];
        totalPRINT+=numOfOperations[1][i];
        totalCLEAR+=numOfOperations[2][i];
        totalREPEAT+=numOfOperations[3][i];
        string values;
        values.resize(64, ' ');
        values[0]=char(65+i);
        //cout<<values.size()<<"\n";
        //cout<<to_string(numOfOperations[0][i]).size()<<" "<<to_string(numOfOperations[1][i]).size()<<" "<<to_string(numOfOperations[2][i]).size()<<" "<<to_string(numOfOperations[3][i]).size()<<"\n";
        values.replace(2, to_string(numOfOperations[0][i]).size(), to_string(numOfOperations[0][i]));
        values.replace(18, to_string(numOfOperations[1][i]).size(), to_string(numOfOperations[1][i]));
        values.replace(34, to_string(numOfOperations[2][i]).size(), to_string(numOfOperations[2][i]));
        values.replace(50, to_string(numOfOperations[3][i]).size(), to_string(numOfOperations[3][i]));
        cout<<values<<"\n";
    }

    cout<<"\n";
    string bottomText;
    bottomText.resize(64, ' ');
    bottomText.replace(0, 1, u8"Σ");
    bottomText.replace(3, to_string(totalINCREASE).size(), to_string(totalINCREASE));
    bottomText.replace(19, to_string(totalPRINT).size(), to_string(totalPRINT));
    bottomText.replace(35, to_string(totalCLEAR).size(), to_string(totalCLEAR));
    bottomText.replace(51, to_string(totalREPEAT).size(), to_string(totalREPEAT));
    cout<<bottomText<<"\n";
    cout<<"num of coomands: "<<numOfCommands<<"\n";
    cout<<"total: "<<totalCLEAR+totalINCREASE+totalPRINT+totalREPEAT<<"\n";

    return 0;
}