Submission details
Task:Tulkki
Sender:MattiDragon
Submission time:2025-10-27 16:45:00 +0200
Language:Java
Status:READY
Result:44
Feedback
groupverdictscore
#1ACCEPTED12
#2ACCEPTED32
#30
Test results
testverdicttimegroup
#1ACCEPTED0.13 s1, 2, 3details
#2ACCEPTED0.13 s1, 2, 3details
#3ACCEPTED0.14 s1, 2, 3details
#4ACCEPTED0.14 s1, 2, 3details
#5ACCEPTED0.19 s1, 2, 3details
#6ACCEPTED0.19 s1, 2, 3details
#7ACCEPTED0.13 s2, 3details
#8ACCEPTED0.13 s2, 3details
#9ACCEPTED0.13 s2, 3details
#10ACCEPTED0.13 s2, 3details
#11ACCEPTED0.13 s2, 3details
#12ACCEPTED0.13 s2, 3details
#13ACCEPTED0.13 s3details
#14ACCEPTED0.13 s3details
#15ACCEPTED0.17 s3details
#16ACCEPTED0.13 s3details
#17ACCEPTED0.29 s3details
#18--3details

Code

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class C {
    static final boolean DEBUG = Boolean.getBoolean("debug");

    static final byte CLEAR = 1;
    static final byte INCREASE = 2;
    static final byte PRINT = 3;
    static final byte REPEAT = 4;
    static final byte END_REPEAT = 5;

    public static void main(String[] args) throws IOException {
        var scanner = new Scanner(System.in);
        var tokens = new ArrayList<Byte>();

        while (scanner.hasNext()) {
            var tok = scanner.next();
            var hashIndex = tok.indexOf('#');
            if (hashIndex != -1) {
                scanner.nextLine();
                tok = tok.substring(0, hashIndex);
            }
            if (tok.isEmpty())
                continue;
            switch (tok) {
                case "CLEAR":
                    tokens.add(CLEAR);
                    break;
                case "INCREASE":
                    tokens.add(INCREASE);
                    break;
                case "PRINT":
                    tokens.add(PRINT);
                    break;
                case "REPEAT":
                    tokens.add(REPEAT);
                    break;
                case "TIMES":
                case "(":
                    break;
                case ")":
                    tokens.add(END_REPEAT);
                    break;
                default:
                    if (tok.length() == 1) {
                        var c = tok.charAt(0);
                        if (c >= 'A' && c <= 'Z') {
                            tokens.add((byte) (c - 'A'));
                            break;
                        }
                    }
                    throw new IllegalStateException("Unexpected token '" + tok + "'");
            }
        }

        var bytecode = new byte[tokens.size()];
        for (var i = 0; i < bytecode.length; i++) {
            bytecode[i] = tokens.get(i);
        }
        if (DEBUG) {
            System.out.println(Arrays.toString(bytecode));
            System.out.println();
        }

        var out = new StringBuilder();

        var registers = new int[26];
        var callstack = new int[1000];
        var loopCounters = new int[1000];
        var sp = 0;
        var ip = 0;

        while (ip < bytecode.length) {
            if (DEBUG) {
                System.out.printf("ip: %s; b[ip]: %s; sp: %s%n", ip, bytecode[ip], sp);
                System.out.println("r: " + Arrays.toString(registers));
                System.out.print("s: ");
                for (int i = 0; i <= sp; i++) {
                    System.out.print(callstack[i] + "|" + loopCounters[i] + " ");
                }
                System.out.println();
                System.out.println();
            }

            switch (bytecode[ip++]) {
                case CLEAR:
                    registers[bytecode[ip++]] = 0;
                    break;
                case INCREASE:
                    registers[bytecode[ip++]] += 1;
                    break;
                case PRINT:
                    out.append(registers[bytecode[ip++]]);
                    out.append(' ');
                    break;
                case REPEAT:
                    loopCounters[sp] = registers[bytecode[ip++]];
                    callstack[sp++] = ip;
                    break;
                case END_REPEAT:
                    if (--loopCounters[--sp] == 0) {
                        break;
                    } else {
                        ip = callstack[sp++];
                    }
                    break;
                default:
                    break;
            }
        }

        System.out.print(out);
    }
}

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:

input
# Efficient algorithm for find...

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

user output
(empty)