( advent of code 2025, day 1 ) %dbg { #010e DEO } |00 |100 @on-reset ( -> ) banner first-star Dial/reset second-star BRK @banner ( -- ) ;/str !puts @banner/str "advent 20 "of 20 "code, 20 "day 20 "1 0a 00 ( first star ) @first-star ( -- ) ;/input Input/read [ LIT2 &pass $2 ] ;/str puts putdec2 endl JMP2r @first-star/str "first 20 "star: 09 00 @first-star/newline ( -- ) Number/get Dial/rotate Number/reset Dial/get ORA ?{ ,/pass LDR2 INC2 ,/pass STR2 } JMP2r @first-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 ( 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 -- ) #0a18 DEO JMP2r @puts ( str* -- ) LDAk #18 DEO INC2 LDAk ?puts POP2 JMP2r @putdec2 ( n* -- ) [ LITr 00 ] &loop #000a DIV2k STH2k MUL2 SUB2 [ LIT "0 ] ADD NIP STH2r ROT STH ORAk ?/loop POP2 &loop2 STHr #18 DEO STHrk ?/loop2 POPr JMP2r ( object lib ) @Input/filename "01.input 00 @Input/read ( callback* -- ) #01ab DEO ;/filename #a8 DEO2 &loop DUP2 ;/byte #ac DEO2 #a3 DEI #00 EQU ?/endloop ( EOF ) [ LIT &byte $1 ] ROT ROT JSR2 !/loop &endloop POP2 JMP2r @Number/one-byte ( b -- ) #00 SWP LIT "0 SUB [ LIT2 &val 0000 ] #000a MUL2 ADD2 ,/val STR2 JMP2r @Number/get ( -- n* ) ,/val LDR2 JMP2r @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 @ 25650 ) SWP2 /op #0064 DIV2k MUL2 SUB2 ( mod 100 ) #6400 ADD2 ( keep in range 25600-25699 ) ,/state STR2 @Dial/left ( -- ) [ LIT2 SUB2 _/opc ] STR JMP2r @Dial/right ( -- ) [ LIT2 ADD2 _/opc ] STR JMP2r @Dial/op ( a* b* -- a?b* ) &opc $1 JMP2r