Login
7 branches 0 tags
Benjamin Vincent Schulenburg Added reduce/filter/remove for trees f81f10a 3 years ago 481 Commits
nujel / tests / fast / day2.nuj
#!/usr/bin/env nujel

[defun do-commands-1 [name val state]
       [cond [[== name 'forward] [tree/set! state :horiz [+ [tree/get state :horiz] val]]]
             [[== name 'up     ] [tree/set! state :depth [- [tree/get state :depth] val]]]
             [[== name 'down   ] [tree/set! state :depth [+ [tree/get state :depth] val]]]
             [#t [println "Unknown Command, continuing."]]]]

[defun do-commands-2 [name val state]
       [cond [[== name 'forward] [tree/set! state :horiz [+ [tree/get state :horiz] val]]
                                 [tree/set! state :depth [+ [tree/get state :depth] [* [tree/get state :aim] val]]]]
             [[== name 'up     ] [tree/set! state :aim   [- [tree/get state   :aim] val]]]
             [[== name 'down   ] [tree/set! state :aim   [+ [tree/get state   :aim] val]]]
             [#t [println "Unknown Command, continuing."]]]]

[defun step [l state fun]
       [if-not [and l [cdr l]] state
               [step [cddr l] [fun [car l] [cadr l] state] fun]]]

[defun calc-result [state]
       [* [tree/get state :depth] [tree/get state :horiz]]]


[def result [calc-result [step '[forward 5 down 5 forward 8 up 3 down 8 forward 2] @[:depth 0 :horiz 0] do-commands-1]]]
[when [!= 150 result] [throw [list :wrong-result "Wrong result" result]]]

[def result [calc-result [step [read [file/read "tests/fast/day2.input"]] @[:depth 0 :horiz 0] do-commands-1]]]
[when [!= 1561344 result] [throw [list :wrong-result "Wrong result" result]]]

[def result [calc-result [step [read [file/read "tests/fast/day2.input"]] @[:depth 0 :horiz 0 :aim 0] do-commands-2]]]
[when [!= 1848454425 result] [throw [list :wrong-result "Wrong result" result]]]