Factor disqualifications
[troll.git] / src / main / java / com / codingame / game / Model.java
index 4cd1280..405db66 100644 (file)
@@ -25,16 +25,37 @@ class Model {
 
         private int multiplier;
         public int getMultiplier() { return multiplier; }
 
         private int multiplier;
         public int getMultiplier() { return multiplier; }
-        public void setMultiplier(int m){ multiplier = m; }
+        public void setMultiplier(int m) { multiplier = m; }
+
+        class FailedToThrowStonesAndShouldHave extends Exception {}
+        class ThrewMoreStonesThanHad extends Exception {}
 
         private int stones;
         public int getStones() { return stones; }
 
         private int stones;
         public int getStones() { return stones; }
-        public void consumeStones(int n) throws InvalidAction {
+        public void consumeStones(int n)
+            throws ThrewMoreStonesThanHad,
+                   FailedToThrowStonesAndShouldHave
+        {
             if (n > stones) {
             if (n > stones) {
-                throw new InvalidAction("attempted to throw more stones than they had.");
+                throw new ThrewMoreStonesThanHad();
+            }
+            if (n == 0 && stones > 0) {
+                throw new FailedToThrowStonesAndShouldHave();
             }
             setStones(stones - n);
         }
             }
             setStones(stones - n);
         }
+        public int consumeMaxStones() {
+            int r = stones;
+            stones = 0;
+            return r;
+        }
+        public int consumeMinStones() {
+            if (stones < 1) {
+                throw new Error("Internal error: tried to consume min stones on an empty heap.");
+            }
+            stones--;
+            return 1;
+        }
         public void setStones(int n) {
             stones = n;
         }
         public void setStones(int n) {
             stones = n;
         }
@@ -104,6 +125,7 @@ class Model {
         }
     }
     int getWinner() { return winner; }
         }
     }
     int getWinner() { return winner; }
+    int getLoser() { return 1 - winner; }
 
     boolean exhausted() {
         return p0.getStones() <= 0 && p1.getStones() <= 0;
 
     boolean exhausted() {
         return p0.getStones() <= 0 && p1.getStones() <= 0;