Submission details
Task:Forth
Sender:sharph2
Submission time:2025-10-18 09:28:35 +0300
Language:C++ (C++17)
Status:READY
Result:0
Feedback
groupverdictscore
#10
Test results
testverdicttime
#10.00 sdetails
#2ACCEPTED0.00 sdetails
#3ACCEPTED0.00 sdetails
#4ACCEPTED0.00 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.00 sdetails
#7ACCEPTED0.00 sdetails
#8ACCEPTED0.00 sdetails
#9ACCEPTED0.00 sdetails
#10ACCEPTED0.00 sdetails
#11ACCEPTED0.00 sdetails
#12ACCEPTED0.00 sdetails
#13ACCEPTED0.00 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:27:10: warning: variable 'prod' set but not used [-Wunused-but-set-variable]
   27 |     auto prod = [&]() {
      |          ^~~~
input/code.cpp:33:10: warning: variable 'swapp' set but not used [-Wunused-but-set-variable]
   33 |     auto swapp = [&]() {
      |          ^~~~~
input/code.cpp:43:10: warning: variable 'over' set but not used [-Wunused-but-set-variable]
   43 |     auto over = [&]() {
      |          ^~~~
input/code.cpp:48:10: warning: variable 'rot' set but not used [-Wunused-but-set-variable]
   48 |     auto rot = [&]() {
      |          ^~~
input/code.cpp:54:10: warning: variable 'drop' set but not used [-Wunused-but-set-variable]
   54 |     auto drop = [&]() {
      |          ^~~~

Code

#include <iostream>
#include <tuple>
#include <vector>

using namespace std;

using Z = long long int;

int main() {
    cin.sync_with_stdio(false);
    cin.tie(nullptr);

    Z x;
    cin >> x;

    vector<const char*> prog;

    vector<Z> sim;
    sim.push_back(1);

    auto plus = [&]() {
        prog.push_back("+");
        if(sim.size() < 2) throw 5;
        sim[sim.size() - 2] += sim.back();
        sim.pop_back();
    };
    auto prod = [&]() {
        prog.push_back("*");
        if(sim.size() < 2) throw 5;
        sim[sim.size() - 2] *= sim.back();
        sim.pop_back();
    };
    auto swapp = [&]() {
        prog.push_back("SWAP");
        if(sim.size() < 2) throw 5;
        swap(sim[sim.size() - 2], sim.back());
    };
    auto dup = [&]() {
        prog.push_back("DUP");
        if(sim.empty()) throw 5;
        sim.push_back(sim.back());
    };
    auto over = [&]() {
        prog.push_back("OVER");
        if(sim.size() < 2) throw 5;
        sim.push_back(sim[sim.size() - 2]);
    };
    auto rot = [&]() {
        prog.push_back("ROT");
        if(sim.size() < 3) throw 5;
        tie(sim[sim.size() - 3], sim[sim.size() - 2], sim[sim.size() - 1])
            = tuple(sim[sim.size() - 2], sim[sim.size() - 1], sim[sim.size() - 3]);
    };
    auto drop = [&]() {
        prog.push_back("DROP");
        if(sim.empty()) throw 5;
        sim.pop_back();
    };

    Z p = 1;
    while(2 * p <= x) {
        if(x & p) {
            dup();
        }
        dup();
        plus();
        p *= 2;
    }

    // for(Z y : sim) {
    //     cerr << y << " ";
    // }
    // cerr << "\n";

    while(sim.size() > 1) {
        plus();
    }

    if(sim.size() != 1 || sim.back() != x) {
        cerr << "INCORRECT " << sim.size() << " " << sim.back() << "\n";
        throw 5;
    }

    cout << prog.size() << "\n";
    for(const char* step : prog) {
        cout << step << " ";
    }
    cout << "\n";

    return 0;
}

Test details

Test 1

Verdict:

input
1

correct output
2
DUP
DROP

user output
0

Test 2

Verdict: ACCEPTED

input
2

correct output
2
DUP
+

user output
2
DUP + 

Test 3

Verdict: ACCEPTED

input
3

correct output
4
DUP
DUP
+
+

user output
4
DUP DUP + + 

Test 4

Verdict: ACCEPTED

input
4

correct output
6
DUP
DUP
DUP
+
...

user output
4
DUP + DUP + 

Test 5

Verdict: ACCEPTED

input
5

correct output
8
DUP
DUP
DUP
DUP
...

user output
6
DUP DUP + DUP + + 

Test 6

Verdict: ACCEPTED

input
10

correct output
18
DUP
DUP
DUP
DUP
...

user output
8
DUP + DUP DUP + DUP + + 

Test 7

Verdict: ACCEPTED

input
42

correct output
82
DUP
DUP
DUP
DUP
...

user output
14
DUP + DUP DUP + DUP + DUP DUP ...

Test 8

Verdict: ACCEPTED

input
64

correct output
126
DUP
DUP
DUP
DUP
...

user output
12
DUP + DUP + DUP + DUP + DUP + ...

Test 9

Verdict: ACCEPTED

input
90

correct output
178
DUP
DUP
DUP
DUP
...

user output
18
DUP + DUP DUP + DUP + DUP DUP ...

Test 10

Verdict: ACCEPTED

input
98

correct output
194
DUP
DUP
DUP
DUP
...

user output
16
DUP + DUP DUP + DUP + DUP + DU...

Test 11

Verdict: ACCEPTED

input
99

correct output
196
DUP
DUP
DUP
DUP
...

user output
18
DUP DUP + DUP DUP + DUP + DUP ...

Test 12

Verdict: ACCEPTED

input
100

correct output
198
DUP
DUP
DUP
DUP
...

user output
16
DUP + DUP + DUP DUP + DUP + DU...

Test 13

Verdict: ACCEPTED

input
95

correct output
188
DUP
DUP
DUP
DUP
...

user output
22
DUP DUP + DUP DUP + DUP DUP + ...