summaryrefslogtreecommitdiff
path: root/projects/11/K/Board.vm
diff options
context:
space:
mode:
Diffstat (limited to 'projects/11/K/Board.vm')
-rw-r--r--projects/11/K/Board.vm1183
1 files changed, 1183 insertions, 0 deletions
diff --git a/projects/11/K/Board.vm b/projects/11/K/Board.vm
new file mode 100644
index 0000000..272b52d
--- /dev/null
+++ b/projects/11/K/Board.vm
@@ -0,0 +1,1183 @@
+function Board.new 3
+push constant 3
+call Memory.alloc 1
+pop pointer 0
+push constant 4
+call Array.new 1
+pop this 0
+push constant 0
+pop local 0
+label new.While0
+push local 0
+push constant 4
+lt
+not
+if-goto new.EndWhile0
+push constant 0
+pop local 1
+push constant 4
+call Array.new 1
+push this 0
+push local 0
+add
+pop pointer 1
+pop that 0
+push this 0
+push local 0
+add
+pop pointer 1
+push that 0
+pop local 2
+label new.While0.While0
+push local 1
+push constant 4
+lt
+not
+if-goto new.While0.EndWhile0
+push constant 32
+push local 2
+push local 1
+add
+pop pointer 1
+pop that 0
+push local 1
+push constant 1
+add
+pop local 1
+goto new.While0.While0
+label new.While0.EndWhile0
+push local 0
+push constant 1
+add
+pop local 0
+goto new.While0
+label new.EndWhile0
+push this 0
+push constant 0
+add
+pop pointer 1
+push that 0
+pop local 2
+push constant 65
+push local 2
+push constant 0
+add
+pop pointer 1
+pop that 0
+push constant 0
+pop this 1
+push constant 0
+pop this 2
+push pointer 0
+return
+function Board.arrange 0
+push argument 0
+pop pointer 0
+push argument 2
+not
+if-goto arrange.Else0
+push pointer 0
+push argument 1
+push this 0
+call Board.deepcopy 3
+pop temp 0
+goto arrange.Endif0
+label arrange.Else0
+push pointer 0
+push argument 1
+push this 0
+call Board.transpose 3
+pop temp 0
+label arrange.Endif0
+push pointer 0
+push argument 1
+call Board.dispose4 2
+pop temp 0
+push constant 0
+return
+function Board.copy 1
+push argument 0
+pop pointer 0
+push constant 0
+pop local 0
+label copy.While0
+push local 0
+push constant 4
+lt
+not
+if-goto copy.EndWhile0
+push argument 1
+push local 0
+add
+pop pointer 1
+push that 0
+push argument 2
+push local 0
+add
+pop pointer 1
+pop that 0
+push local 0
+push constant 1
+add
+pop local 0
+goto copy.While0
+label copy.EndWhile0
+push constant 0
+return
+function Board.deepcopy 1
+push argument 0
+pop pointer 0
+push constant 0
+pop local 0
+label deepcopy.While0
+push local 0
+push constant 4
+lt
+not
+if-goto deepcopy.EndWhile0
+push pointer 0
+push argument 1
+push local 0
+add
+pop pointer 1
+push that 0
+push argument 2
+push local 0
+add
+pop pointer 1
+push that 0
+call Board.copy 3
+pop temp 0
+push local 0
+push constant 1
+add
+pop local 0
+goto deepcopy.While0
+label deepcopy.EndWhile0
+push constant 0
+return
+function Board.transpose 4
+push argument 0
+pop pointer 0
+push constant 0
+pop local 0
+label transpose.While0
+push local 0
+push constant 4
+lt
+not
+if-goto transpose.EndWhile0
+push constant 0
+pop local 1
+push argument 2
+push local 0
+add
+pop pointer 1
+push that 0
+pop local 2
+label transpose.While0.While0
+push local 1
+push constant 4
+lt
+not
+if-goto transpose.While0.EndWhile0
+push argument 1
+push local 1
+add
+pop pointer 1
+push that 0
+pop local 3
+push local 3
+push local 0
+add
+pop pointer 1
+push that 0
+push local 2
+push local 1
+add
+pop pointer 1
+pop that 0
+push local 1
+push constant 1
+add
+pop local 1
+goto transpose.While0.While0
+label transpose.While0.EndWhile0
+push local 0
+push constant 1
+add
+pop local 0
+goto transpose.While0
+label transpose.EndWhile0
+push constant 0
+return
+function Board.dispose4 2
+push argument 0
+pop pointer 0
+push constant 0
+pop local 0
+label dispose4.While0
+push local 0
+push constant 4
+lt
+not
+if-goto dispose4.EndWhile0
+push argument 1
+push local 0
+add
+pop pointer 1
+push that 0
+pop local 1
+push local 1
+call Array.dispose 1
+pop temp 0
+push local 0
+push constant 1
+add
+pop local 0
+goto dispose4.While0
+label dispose4.EndWhile0
+push argument 1
+call Array.dispose 1
+pop temp 0
+push constant 0
+return
+function Board.new4 2
+push argument 0
+pop pointer 0
+push constant 4
+call Array.new 1
+pop local 0
+push constant 0
+pop local 1
+label new4.While0
+push local 1
+push constant 4
+lt
+not
+if-goto new4.EndWhile0
+push constant 4
+call Array.new 1
+push local 0
+push local 1
+add
+pop pointer 1
+pop that 0
+push local 1
+push constant 1
+add
+pop local 1
+goto new4.While0
+label new4.EndWhile0
+push local 0
+return
+function Board.getStrips 1
+push argument 0
+pop pointer 0
+push pointer 0
+call Board.new4 1
+pop local 0
+push argument 1
+not
+if-goto getStrips.Else0
+push pointer 0
+push this 0
+push local 0
+call Board.deepcopy 3
+pop temp 0
+goto getStrips.Endif0
+label getStrips.Else0
+push pointer 0
+push this 0
+push local 0
+call Board.transpose 3
+pop temp 0
+label getStrips.Endif0
+push local 0
+return
+function Board.align 2
+push argument 0
+pop pointer 0
+push constant 0
+pop local 0
+push constant 0
+pop local 1
+push argument 2
+not
+if-goto align.Else0
+label align.Else0.While0
+push local 0
+push constant 4
+lt
+not
+if-goto align.Else0.EndWhile0
+push argument 1
+push local 0
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+not
+if-goto align.Else0.While0.Else0
+push argument 1
+push local 0
+add
+pop pointer 1
+push that 0
+push argument 1
+push local 1
+add
+pop pointer 1
+pop that 0
+push local 1
+push constant 1
+add
+pop local 1
+label align.Else0.While0.Else0
+push local 0
+push constant 1
+add
+pop local 0
+goto align.Else0.While0
+label align.Else0.EndWhile0
+label align.Else0.While1
+push local 1
+push constant 4
+lt
+not
+if-goto align.Else0.EndWhile1
+push constant 32
+push argument 1
+push local 1
+add
+pop pointer 1
+pop that 0
+push local 1
+push constant 1
+add
+pop local 1
+goto align.Else0.While1
+label align.Else0.EndWhile1
+goto align.Endif0
+label align.Else0
+label align.If0.While0
+push local 0
+push constant 4
+lt
+not
+if-goto align.If0.EndWhile0
+push argument 1
+push constant 3
+push local 0
+sub
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+not
+if-goto align.If0.While0.Else0
+push argument 1
+push constant 3
+push local 0
+sub
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 3
+push local 1
+sub
+add
+pop pointer 1
+pop that 0
+push local 1
+push constant 1
+add
+pop local 1
+label align.If0.While0.Else0
+push local 0
+push constant 1
+add
+pop local 0
+goto align.If0.While0
+label align.If0.EndWhile0
+label align.If0.While1
+push local 1
+push constant 4
+lt
+not
+if-goto align.If0.EndWhile1
+push constant 32
+push argument 1
+push constant 3
+push local 1
+sub
+add
+pop pointer 1
+pop that 0
+push local 1
+push constant 1
+add
+pop local 1
+goto align.If0.While1
+label align.If0.EndWhile1
+label align.Endif0
+push argument 1
+return
+function Board.reduce 0
+push argument 0
+pop pointer 0
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+eq
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 3
+add
+pop pointer 1
+push that 0
+eq
+and
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+and
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+and
+not
+if-goto reduce.Else0
+push argument 2
+not
+if-goto reduce.Else0.Else0
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 0
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 1
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 2
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 3
+add
+pop pointer 1
+pop that 0
+goto reduce.Else0.Endif0
+label reduce.Else0.Else0
+push argument 1
+push constant 3
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 3
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 2
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 1
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 0
+add
+pop pointer 1
+pop that 0
+label reduce.Else0.Endif0
+push argument 1
+return
+label reduce.Else0
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+eq
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+and
+not
+if-goto reduce.Else1
+push argument 2
+not
+if-goto reduce.Else1.Else0
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 0
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 1
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 3
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 2
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 3
+add
+pop pointer 1
+pop that 0
+goto reduce.Else1.Endif0
+label reduce.Else1.Else0
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 1
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 0
+add
+pop pointer 1
+pop that 0
+label reduce.Else1.Endif0
+push argument 1
+return
+label reduce.Else1
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 3
+add
+pop pointer 1
+push that 0
+eq
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+and
+not
+if-goto reduce.Else2
+push argument 2
+not
+if-goto reduce.Else2.Else0
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 2
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 3
+add
+pop pointer 1
+pop that 0
+goto reduce.Else2.Endif0
+label reduce.Else2.Else0
+push argument 1
+push constant 3
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 3
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 2
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 1
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 0
+add
+pop pointer 1
+pop that 0
+label reduce.Else2.Endif0
+push argument 1
+return
+label reduce.Else2
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+eq
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+and
+not
+if-goto reduce.Else3
+push argument 2
+not
+if-goto reduce.Else3.Else0
+push argument 1
+push constant 1
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 1
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 3
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 2
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 3
+add
+pop pointer 1
+pop that 0
+goto reduce.Else3.Endif0
+label reduce.Else3.Else0
+push argument 1
+push constant 2
+add
+pop pointer 1
+push that 0
+push constant 1
+add
+push argument 1
+push constant 2
+add
+pop pointer 1
+pop that 0
+push argument 1
+push constant 0
+add
+pop pointer 1
+push that 0
+push argument 1
+push constant 1
+add
+pop pointer 1
+pop that 0
+push constant 32
+push argument 1
+push constant 0
+add
+pop pointer 1
+pop that 0
+label reduce.Else3.Endif0
+push argument 1
+return
+label reduce.Else3
+push argument 1
+return
+function Board.addTile 5
+push argument 0
+pop pointer 0
+push this 2
+push constant 25173
+call Math.multiply 2
+push constant 13849
+add
+pop this 2
+push this 2
+push constant 0
+lt
+not
+if-goto addTile.Else0
+push this 2
+neg
+pop this 2
+label addTile.Else0
+push this 2
+push this 2
+push constant 2
+call Math.divide 2
+push constant 2
+call Math.multiply 2
+sub
+push constant 0
+eq
+not
+if-goto addTile.Else1
+push constant 1
+pop local 3
+goto addTile.Endif1
+label addTile.Else1
+push constant 1
+neg
+pop local 3
+label addTile.Endif1
+push this 2
+push this 2
+push constant 16
+call Math.divide 2
+push constant 16
+call Math.multiply 2
+sub
+pop this 2
+push this 2
+push constant 4
+call Math.divide 2
+pop local 1
+push this 2
+push constant 4
+push local 1
+call Math.multiply 2
+sub
+pop local 2
+push this 0
+push local 1
+add
+pop pointer 1
+push that 0
+pop local 0
+push constant 65
+pop local 4
+label addTile.While2
+push local 0
+push local 2
+add
+pop pointer 1
+push that 0
+push constant 64
+gt
+not
+if-goto addTile.EndWhile2
+push this 2
+push local 3
+add
+pop this 2
+push this 2
+push constant 0
+lt
+not
+if-goto addTile.While2.Else0
+push constant 15
+pop this 2
+label addTile.While2.Else0
+push this 2
+push this 2
+push constant 16
+call Math.divide 2
+push constant 16
+call Math.multiply 2
+sub
+pop this 2
+push this 2
+push constant 4
+call Math.divide 2
+pop local 1
+push this 2
+push constant 4
+push local 1
+call Math.multiply 2
+sub
+pop local 2
+push this 0
+push local 1
+add
+pop pointer 1
+push that 0
+pop local 0
+push constant 131
+push local 4
+sub
+pop local 4
+goto addTile.While2
+label addTile.EndWhile2
+push local 4
+push local 0
+push local 2
+add
+pop pointer 1
+pop that 0
+push constant 0
+return
+function Board.transform 4
+push argument 0
+pop pointer 0
+push argument 1
+push constant 0
+eq
+push argument 1
+push constant 1
+eq
+or
+not
+if-goto transform.Else0
+push constant 1
+neg
+pop local 1
+goto transform.Endif0
+label transform.Else0
+push constant 0
+pop local 1
+label transform.Endif0
+push argument 1
+push constant 0
+eq
+push argument 1
+push constant 2
+eq
+or
+not
+if-goto transform.Else1
+push constant 1
+neg
+pop local 0
+goto transform.Endif1
+label transform.Else1
+push constant 0
+pop local 0
+label transform.Endif1
+push pointer 0
+push local 0
+call Board.getStrips 2
+pop local 2
+push constant 0
+pop local 3
+label transform.While2
+push local 3
+push constant 4
+lt
+not
+if-goto transform.EndWhile2
+push pointer 0
+push pointer 0
+push local 2
+push local 3
+add
+pop pointer 1
+push that 0
+push local 1
+call Board.align 3
+push local 1
+call Board.reduce 3
+push local 2
+push local 3
+add
+pop pointer 1
+pop that 0
+push local 3
+push constant 1
+add
+pop local 3
+goto transform.While2
+label transform.EndWhile2
+push pointer 0
+push local 2
+push local 0
+call Board.arrange 3
+pop temp 0
+push constant 0
+return
+function Board.next 0
+push argument 0
+pop pointer 0
+push this 1
+push constant 1
+add
+pop this 1
+push pointer 0
+push argument 1
+call Board.transform 2
+pop temp 0
+push pointer 0
+call Board.addTile 1
+pop temp 0
+push constant 0
+return
+function Board.draw 5
+push argument 0
+pop pointer 0
+push constant 9
+pop local 0
+push constant 30
+pop local 1
+push local 0
+push constant 1
+sub
+push local 1
+push constant 1
+sub
+call Output.moveCursor 2
+pop temp 0
+push constant 6
+call String.new 1
+push constant 43
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 43
+call String.appendChar 2
+call Output.printString 1
+pop temp 0
+push local 0
+push constant 4
+add
+push local 1
+push constant 1
+sub
+call Output.moveCursor 2
+pop temp 0
+push constant 6
+call String.new 1
+push constant 43
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 45
+call String.appendChar 2
+push constant 43
+call String.appendChar 2
+call Output.printString 1
+pop temp 0
+push constant 0
+pop local 2
+label draw.While0
+push local 2
+push constant 4
+lt
+not
+if-goto draw.EndWhile0
+push constant 0
+pop local 3
+push local 0
+push local 2
+add
+push local 1
+push constant 1
+sub
+call Output.moveCursor 2
+pop temp 0
+push constant 1
+call String.new 1
+push constant 124
+call String.appendChar 2
+call Output.printString 1
+pop temp 0
+push this 0
+push local 2
+add
+pop pointer 1
+push that 0
+pop local 4
+label draw.While0.While0
+push local 3
+push constant 4
+lt
+not
+if-goto draw.While0.EndWhile0
+push local 4
+push local 3
+add
+pop pointer 1
+push that 0
+call Output.printChar 1
+pop temp 0
+push local 3
+push constant 1
+add
+pop local 3
+goto draw.While0.While0
+label draw.While0.EndWhile0
+push constant 1
+call String.new 1
+push constant 124
+call String.appendChar 2
+call Output.printString 1
+pop temp 0
+push local 2
+push constant 1
+add
+pop local 2
+goto draw.While0
+label draw.EndWhile0
+push local 0
+push constant 6
+add
+push local 1
+push constant 2
+sub
+call Output.moveCursor 2
+pop temp 0
+push constant 6
+call String.new 1
+push constant 84
+call String.appendChar 2
+push constant 117
+call String.appendChar 2
+push constant 114
+call String.appendChar 2
+push constant 110
+call String.appendChar 2
+push constant 58
+call String.appendChar 2
+push constant 32
+call String.appendChar 2
+call Output.printString 1
+pop temp 0
+push this 1
+call Output.printInt 1
+pop temp 0
+push constant 0
+return
+function Board.dispose 0
+push argument 0
+pop pointer 0
+push pointer 0
+call Memory.deAlloc 1
+pop temp 0
+push constant 0
+return