@@ 8,6 8,8 @@
@on-reset ( -> )
banner
first-star
+ Dial/reset
+ second-star
BRK
@banner ( -- )
@@ 26,7 28,7 @@
putdec2 endl
JMP2r
-@first-star/str "first 20 "star: 20 00
+@first-star/str "first 20 "star: 09 00
@first-star/newline ( -- )
Number/get Dial/rotate
@@ 42,6 44,49 @@
!Number/one-byte
+( second star )
+
+@second-star ( -- )
+ ;/input Input/read
+
+ [ LIT2 &pass $2 ]
+ ;/str puts
+ putdec2 endl
+
+ JMP2r
+@second-star/str "second 20 "star: 09 00
+
+@second-star/newline ( -- )
+ #0000
+ Dial/get #0000 EQU2 ?{
+ Dial/getraw
+ Number/get
+ #0064 DIV2k MUL2 SUB2
+ Dial/op
+
+ DUP2 #6401 LTH2 STH
+ #6463 GTH2 STHr ORA ( c < 25601 || c > 25699 )
+ ORA
+ }
+
+ Number/get Dial/rotate
+
+ DUP2 putdec2 #2018 DEO Dial/get putdec2 endl
+
+ Number/get #0064 DIV2 ( extra-overflow* )
+ ADD2
+
+ ,/pass LDR2 ADD2 ,/pass STR2
+
+ !Number/reset
+
+@second-star/input ( b -- )
+ DUP #0a NEQ ?{ POP !/newline }
+ DUP LIT "R NEQ ?{ POP !Dial/right }
+ DUP LIT "L NEQ ?{ POP !Dial/left }
+ !Number/one-byte
+
+
( stdlib )
@endl ( n -- )
@@ 74,8 119,8 @@
@Input/filename "01.input 00
@Input/read ( callback* -- )
- ;/filename #a8 DEO2
#01ab DEO
+ ;/filename #a8 DEO2
&loop
DUP2
@@ 87,6 132,7 @@
&endloop
POP2 JMP2r
+
@Number/one-byte ( b -- )
#00 SWP
@@ 100,18 146,25 @@
@Number/reset ( -- )
#0000 ,/val STR2 JMP2r
+
( problem code )
@Dial/get ( -- n* )
,/state LDR2 #6400 SUB2 JMP2r
+@Dial/getraw ( -- n* )
+ ,/state LDR2 JMP2r
+@Dial/reset ( -- )
+ #6432 ,/state STR2 JMP2r
@Dial/rotate ( n* -- )
- [ LIT2 &state 6432 ] ( start @ 1050 )
- SWP2 &op $1
+ [ LIT2 &state 6432 ] ( start @ 25650 )
+ SWP2 /op
#0064 DIV2k MUL2 SUB2 ( mod 100 )
- #6400 ADD2 ( keep in range 100-199 )
+ #6400 ADD2 ( keep in range 25600-25699 )
,/state STR2
@Dial/left ( -- )
- [ LIT2 SUB2 _/op ] STR JMP2r
+ [ LIT2 SUB2 _/opc ] STR JMP2r
@Dial/right ( -- )
- [ LIT2 ADD2 _/op ] STR JMP2r
+ [ LIT2 ADD2 _/opc ] STR JMP2r
+@Dial/op ( a* b* -- a?b* )
+ &opc $1 JMP2r