From e7158c799e24a1d7142acbca23ed45e349eb08b8 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Sun, 2 Oct 2016 19:36:20 +0300 Subject: [PATCH] All tests pass --- src/LongStack.java | 84 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 72 insertions(+), 12 deletions(-) diff --git a/src/LongStack.java b/src/LongStack.java index fab55da..20cd1db 100644 --- a/src/LongStack.java +++ b/src/LongStack.java @@ -1,51 +1,111 @@ +import java.util.Iterator; +import java.util.LinkedList; public class LongStack { + private final LinkedList lifo; + public static void main (String[] argum) { - // TODO!!! Your tests here! + long i = interpret("1 -2 45 -45"); + } LongStack() { - // TODO!!! Your constructor here! + this.lifo = new LinkedList<>(); + } + + LongStack(LinkedList lifo) { + this.lifo = lifo; } @Override public Object clone() throws CloneNotSupportedException { - return this; // TODO!!! Your code here! + return new LongStack((LinkedList) this.lifo.clone()); } public boolean stEmpty() { - return false; // TODO!!! Your code here! + return this.lifo.isEmpty(); } public void push (long a) { - // TODO!!! Your code here! + this.lifo.push(a); } public long pop() { - return 0; // TODO!!! Your code here! - } // pop + return this.lifo.pop(); + } public void op (String s) { - // TODO!!! + if (s.equals("+")) { + this.lifo.push(this.lifo.pop() + this.lifo.pop()); + } else if (s.equals("-")) { + long r1 = this.pop(); + long r2 = this.pop(); + this.lifo.push(r2 - r1); + } else if (s.equals("*")) { + this.lifo.push(this.lifo.pop() * this.lifo.pop()); + } else if (s.equals("/")) { + long r1 = this.pop(); + long r2 = this.pop(); + this.lifo.push(r2 / r1); + } else if(s.equals(" ") | s.equals("\t")) { + return; + } else { + throw new RuntimeException("Invalid operation"); + } } public long tos() { - return 0; // TODO!!! Your code here! + return this.lifo.getFirst(); } @Override public boolean equals (Object o) { - return true; // TODO!!! Your code here! + return this.lifo.equals(((LongStack)o).lifo); } @Override public String toString() { - return null; // TODO!!! Your code here! + StringBuilder s = new StringBuilder(); + Iterator i = this.lifo.descendingIterator(); + while (i.hasNext()) { + s.append(i.next()); + s.append(" "); + } + return s.toString(); } public static long interpret (String pol) { - return 0; // TODO!!! Your code here! + LongStack ls = new LongStack(); + for(int i = 0; i < pol.length(); i++) { + char c = pol.charAt(i); + char nc = ' '; + if (i+1 < pol.length()) { + nc = pol.charAt(i + 1); + } + if ((c == '-' & nc >= '0' & nc <= '9')| (c >= '0' & c <= '9')) { + StringBuilder buf = new StringBuilder(); + buf.append(c); + i++; + for (; i < pol.length(); i++) { + c = pol.charAt(i); + if (c >= '0' & c <= '9') { + buf.append(c); + } else { + break; + } + } + ls.push(Long.parseLong(buf.toString())); + } else { + ls.op("" + c); + } + } + if (ls.lifo.size() == 1) { + return ls.pop(); + } else { + throw new RuntimeException("Unbalanced polish notation"); + } + } }