Submission details
Task:Tulkki
Sender:Lelleri
Submission time:2025-10-29 13:28:34 +0200
Language:Python3 (PyPy3)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED12
#2ACCEPTED32
#3ACCEPTED56
Test results
testverdicttimegroup
#1ACCEPTED0.06 s1, 2, 3details
#2ACCEPTED0.07 s1, 2, 3details
#3ACCEPTED0.06 s1, 2, 3details
#4ACCEPTED0.06 s1, 2, 3details
#5ACCEPTED0.08 s1, 2, 3details
#6ACCEPTED0.09 s1, 2, 3details
#7ACCEPTED0.06 s2, 3details
#8ACCEPTED0.06 s2, 3details
#9ACCEPTED0.06 s2, 3details
#10ACCEPTED0.06 s2, 3details
#11ACCEPTED0.06 s2, 3details
#12ACCEPTED0.06 s2, 3details
#13ACCEPTED0.06 s3details
#14ACCEPTED0.06 s3details
#15ACCEPTED0.16 s3details
#16ACCEPTED0.07 s3details
#17ACCEPTED0.24 s3details
#18ACCEPTED0.13 s3details

Code

import sys
from pprint import pprint

execution_lines = []
for line in sys.stdin:
    execution_lines.append(line.replace("\n", " "))

execution_line = ""
for line in execution_lines:
    new_line = ""
    for item in line:
        if(item == "#"):
            break
        new_line += item
    execution_line += " " + new_line + " "

arguments = {
    "CLEAR": [None, None],
    "INCREASE": [None, None],
    "PRINT": [None, None],
    "REPEAT": [None, None, None, None],
}

def find_block(line, index):
    c = 0
    for i, item in enumerate(line[index:]):
        if(item.strip() == "("):
            c+=1
        elif(item.strip() == ")"):
            c-=1
        if(c == 0):
            return index, i + index

def parse1(execution_line):
    items = []

    skip_to_index = -1
    for i, arg in enumerate(execution_line):
        if(i <= skip_to_index):
            continue

        if(arg == "("):
            start_index, end_index = find_block(execution_line, i)
            skip_to_index = end_index
            items.append(parse1(execution_line[start_index+1:end_index]))
        else:
            items.append(arg)
    
    return items

def parse2(execution_line):
    execution_index = 0
    execution_tree = {}
    active_arg = None

    for arg in execution_line:
        if active_arg == None:
            active_arg = arguments[arg][:]

        if None in active_arg:
            if(type(arg) == list):
                active_arg[active_arg.index(None)] = parse2(arg)
            else:
                active_arg[active_arg.index(None)] = arg

        if None not in active_arg:
            execution_tree[execution_index] = active_arg
            active_arg = None
            execution_index += 1

    return execution_tree

variables = {"A": 0, "B": 0, "C": 0, "D": 0, "E": 0, "F": 0, "G": 0, "H": 0, "I": 0, "J": 0, "K": 0, "L": 0, "M": 0, "N": 0, "O": 0, "P": 0, "Q": 0, "R": 0, "S": 0, "T": 0, "U": 0, "V": 0, "W": 0, "X": 0, "Y": 0, "Z": 0}

def execute(commands: dict):
    for index in range(len(commands.keys())):
        if(commands[index][0] == "INCREASE"):
            variables[commands[index][1]] += 1
        elif(commands[index][0] == "CLEAR"):
            variables[commands[index][1]] = 0
        elif(commands[index][0] == "PRINT"):
            print(variables[commands[index][1]], end=" ")
        elif(commands[index][0] == "REPEAT"):
            new_commands = {}
            commands_count = len(commands[index][3].keys())
            new_commands_count = variables[commands[index][1]] * commands_count

            for i in range(new_commands_count):
                new_commands[i] = commands[index][3][i%commands_count]

            execute(new_commands)


parsed1 = parse1(execution_line.split())
parsed2 = parse2(parsed1)
execute(parsed2)




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: ACCEPTED

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 

Test 8 (public)

Group: 2, 3

Verdict: ACCEPTED

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

correct output
0 0 0 0 0 

user output
0 0 0 0 0 

Test 9 (public)

Group: 2, 3

Verdict: ACCEPTED

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

correct output
6 7 8 9 10 

user output
6 7 8 9 10 

Test 10 (public)

Group: 2, 3

Verdict: ACCEPTED

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

correct output
5 5 

user output
5 5 

Test 11 (public)

Group: 2, 3

Verdict: ACCEPTED

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

correct output
20 

user output
20 

Test 12 (public)

Group: 2, 3

Verdict: ACCEPTED

input
INCREASE A
INCREASE A

INCREASE B
INCREASE B
...

correct output
42 

user output
42 

Test 13 (public)

Group: 3

Verdict: ACCEPTED

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 2 2 3 3 3 4 4 4 4 5 5 5 5 5 

Test 14 (public)

Group: 3

Verdict: ACCEPTED

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

correct output
12 

user output
12 

Test 15 (public)

Group: 3

Verdict: ACCEPTED

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

correct output
531441 

user output
531441 

Test 16 (public)

Group: 3

Verdict: ACCEPTED

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

correct output
1337 

user output
1337 

Test 17 (public)

Group: 3

Verdict: ACCEPTED

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
1 2 1 2 1 1 3 4 3 4 3 4 3 4 3 ...

Test 18 (public)

Group: 3

Verdict: ACCEPTED

input
# Efficient algorithm for find...

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

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