Skip to content

Instantly share code, notes, and snippets.

@mkhoeini
Created September 10, 2015 13:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mkhoeini/b8a8ac8478741b24b9ad to your computer and use it in GitHub Desktop.
Save mkhoeini/b8a8ac8478741b24b9ad to your computer and use it in GitHub Desktop.
// RPN calculator
import std.algorithm, std.container.array,
std.conv, std.stdio, std.meta;
void main()
{
Array!int stack;
void binop(string op)()
{
stack[$ - 2] = mixin("stack[$ - 2] " ~
op ~ " stack[$ - 1]");
stack.removeBack();
writeln(stack[$ - 1]);
}
void process(in char[] token)
{
alias Ops = AliasSeq!("+", "-", "*", "/", "%");
Lswitch:
switch (token)
{
foreach (op; Ops)
{
case op:
binop!op();
break Lswitch;
}
case "=":
writeln(stack[$ - 1]);
stack.removeBack();
break;
default:
stack.insertBack(token.to!int);
break;
}
}
stdin.byLine.map!splitter.joiner.each!process;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment