कठिन 0 हल किए गए 0% स्वीकृति

Mini Stack-Language Interpreter

Evaluate a small stack language.

समस्या

Evaluate a small stack language. The stack starts empty; integers push values onto its top. Return the final stack from bottom to top. Tokens are separated by spaces and command names are case-insensitive.

Arithmetic +, -, *, / pops the top value as right operand and the next as left operand, then pushes left operator right. Division truncates toward zero. DUP copies the top value; DROP removes it; SWAP exchanges the top two; OVER copies the second-from-top value onto the top.

Define a word with : name body ;. A name contains only letters. The nonempty body may contain integers, built-in commands, and previously defined words. Definitions do not execute their bodies. Redefining a name affects later uses, but older definitions keep the meanings captured when they were defined. A definition may use the previous version of its own name. Nested definitions, forward references, and recursive calls are not allowed.

Every test program is valid: no unknown word, stack underflow, division by zero, or overflow occurs. You do not need to report errors.

Implement mini_stack_language_interpreter(program).

Input

program: The complete valid program.

Output

Return the final stack in bottom-to-top order.

सीमाएँ

0…10,000 tokens. At most 100,000 primitive tokens across all expanded definitions and executed code. Values and intermediate arithmetic fit signed 64-bit. Integer literals use optional minus followed by digits. Tokens : and ; are separate. Built-in names cannot be redefined; user words can be redefined. Empty input returns an empty stack.

उदाहरण

उदाहरण 1
इनपुट:
program = ": square dup * ; 5 square 3 +"

अपेक्षित आउटपुट:
expected = [28]
इनपुट:
std::string program = ": square dup * ; 5 square 3 +";

अपेक्षित आउटपुट:
std::vector<long long> expected = {28};
इनपुट:
string program = ": square dup * ; 5 square 3 +";

अपेक्षित आउटपुट:
long[] expected = new long[] {28};

व्याख्या

Define square without executing it. Push 5, duplicate it, multiply to get 25, then push 3 and add to obtain 28.

उदाहरण 2
इनपुट:
program = "-7 2 / 9 over"

अपेक्षित आउटपुट:
expected = [-3, 9, -3]
इनपुट:
std::string program = "-7 2 / 9 over";

अपेक्षित आउटपुट:
std::vector<long long> expected = {-3, 9, -3};
इनपुट:
string program = "-7 2 / 9 over";

अपेक्षित आउटपुट:
long[] expected = new long[] {-3, 9, -3};

व्याख्या

−7 divided by 2 truncates toward zero to −3. Push 9, then OVER copies the second-from-top value, −3.

संदर्भ

यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।

दूसरों से सीखें

समुदाय समाधान

अभी तक कोई प्रकाशित समाधान नहीं। पहला साझा करने के लिए इस चुनौती को हल करें।