Submission details
Task:Tulkki
Sender:sandyy
Submission time:2025-10-27 20:45:45 +0200
Language:C++ (C++17)
Status:READY
Result:12
Feedback
groupverdictscore
#1ACCEPTED12
#20
#30
Test results
testverdicttimegroup
#1ACCEPTED0.00 s1, 2, 3details
#2ACCEPTED0.00 s1, 2, 3details
#3ACCEPTED0.00 s1, 2, 3details
#4ACCEPTED0.00 s1, 2, 3details
#5ACCEPTED0.00 s1, 2, 3details
#6ACCEPTED0.00 s1, 2, 3details
#70.00 s2, 3details
#80.00 s2, 3details
#90.00 s2, 3details
#100.01 s2, 3details
#11--2, 3details
#12--2, 3details
#130.00 s3details
#140.00 s3details
#150.10 s3details
#16--3details
#170.00 s3details
#18--3details

Compiler report

input/code.cpp: In function 'Node* parse(std::vector<std::__cxx11::basic_string<char> >&, int)':
input/code.cpp:18:16: 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]
   18 |         while(i<program.size()) {
      |               ~^~~~~~~~~~~~~~~
input/code.cpp: In function 'void run(Node*)':
input/code.cpp:38:37: warning: array subscript has type 'char' [-Wchar-subscripts]
   38 |         if(n->func == "CLEAR") c[n->var]=0;
      |                                  ~~~^~~
input/code.cpp:39:50: warning: array subscript has type 'char' [-Wchar-subscripts]
   39 |         else if(n->func == "PRINT") cout << c[n->var] << " ";
      |                                               ~~~^~~
input/code.cpp:40:45: warning: array subscript has type 'char' [-Wchar-subscripts]
   40 |         else if(n->func == "INCREASE") c[n->var]++;
      |...

Code

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
#define ar array

int c[128];

struct Node {
	string func;
	char var;
	vector<Node*> children;
};

Node* parse(vector<string>& program, int i) {
	vector<Node*> block;
	while(i<program.size()) {
		string t = program[i++];
		if(t==")") {
			break;
		}
		if(t=="PRINT" || t=="INCREASE" || t=="CLEAR") {
			char var=program[i++][0];
			block.pb(new Node{t, var});
		}
		else if(t=="REPEAT") {
			char var=program[i++][0];
			i+=2;
			Node* m = parse(program, i);
			block.pb(new Node{"REPEAT", var, {m}});
		}
	}
	return new Node{"B", 0, block};
}

void run(Node* n) {
	if(n->func == "CLEAR") c[n->var]=0;
	else if(n->func == "PRINT") cout << c[n->var] << " ";
	else if(n->func == "INCREASE") c[n->var]++;
	else if(n->func == "REPEAT") {
		for(int i=0; i<c[n->var]; i++) {
			for(auto child:n->children) run(child);
		}
	} else if(n->func == "B"){
		for(auto child:n->children) run(child);
	}
}

void solve() {
	// tokenize
	string s, opcode;
	vector<string> program;
	while(getline(cin, s)) {
		int pos=s.find('#');
		if(pos!=s.size()) {
			s = s.substr(0, pos);
		}
		stringstream ss(s);
		while(ss>>opcode) {
			program.pb(opcode);
		}
	}
	Node* AST = parse(program, 0);
	run(AST);
}


int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int T=1;
	//cin >> T;
	while(T--) {
		solve();
	}
}

Test details

Test 1 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
PRINT X
INCREASE X
PRINT X
INCREASE X
PRINT X
...

correct output
0 1 2 0 

user output
0 1 2 0 

Test 2 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
INCREASE
X
# aybabtu
   PRINT    X
INCREASE # test
...

correct output
1 3 

user output
1 3 

Test 3 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
# Create number 3
INCREASE X
INCREASE X
INCREASE X

...

correct output

user output

Test 4 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
INCREASE A
PRINT A
INCREASE B
PRINT B
INCREASE C
...

correct output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

user output
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ...

Test 5 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
INCREASE X
INCREASE X
INCREASE X
INCREASE X
INCREASE X
...

correct output
999 

user output
999 

Test 6 (public)

Group: 1, 2, 3

Verdict: ACCEPTED

input
PRINT X
PRINT X
PRINT X
PRINT X
PRINT X
...

correct output
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

user output
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

Test 7 (public)

Group: 2, 3

Verdict:

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
5 5 5 5 5 

user output
5 5 5 5 5 5 

Feedback: Output is longer than expected

Test 8 (public)

Group: 2, 3

Verdict:

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
0 0 0 0 0 

user output
0 0 

Feedback: Output is shorter than expected

Test 9 (public)

Group: 2, 3

Verdict:

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
6 7 8 9 10 

user output
(empty)

Test 10 (public)

Group: 2, 3

Verdict:

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
5 5 

user output
(empty)

Feedback: Output is shorter than expected

Test 11 (public)

Group: 2, 3

Verdict:

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
20 

user output
(empty)

Test 12 (public)

Group: 2, 3

Verdict:

input
INCREASE A
INCREASE A

INCREASE B
INCREASE B
...

correct output
42 

user output
(empty)

Test 13 (public)

Group: 3

Verdict:

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 

user output
1 1 2 2 2 3 3 3 3 4 4 4 4 4 5 ...

Feedback: Output is longer than expected

Test 14 (public)

Group: 3

Verdict:

input
# Create number 3
INCREASE A INCREASE A INCREASE...

correct output
12 

user output
(empty)

Feedback: Output is shorter than expected

Test 15 (public)

Group: 3

Verdict:

input
INCREASE X
INCREASE X
INCREASE X
INCREASE X
INCREASE X
...

correct output
531441 

user output
(empty)

Feedback: Output is shorter than expected

Test 16 (public)

Group: 3

Verdict:

input
INCREASE A
INCREASE A
INCREASE A
INCREASE A
INCREASE A
...

correct output
1337 

user output
(empty)

Test 17 (public)

Group: 3

Verdict:

input
INCREASE A
INCREASE A

REPEAT A TIMES (
    REPEAT A TIMES (
...

correct output
1 2 1 2 1 1 3 4 3 4 3 4 3 4 3 ...

user output
(empty)

Feedback: Output is shorter than expected

Test 18 (public)

Group: 3

Verdict:

input
# Efficient algorithm for find...

correct output
2 3 5 7 11 13 17 19 23 29 31 3...

user output
(empty)