( advent of code 2025, day 1, second star ) %dbg { #010e DEO } @on-reset ( -> ) banner second-star BRK @banner ( -- ) ;/str !puts @banner/str "advent 20 "of 20 "code 20 "2025, 20 "day 20 "1, 20 "second 20 "star 0a 00 ( second star ) @second-star ( -- ) ;/input Input/read [ LIT2 &pass $2 ] putdec2 endl JMP2r @second-star/newline ( -- ) Number/get Dial/rotate #0000 Dial/get #0000 EQU2 ?{ Dial/hitzero ORA } Dial/fixup 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/hitzero ( -- hitzero? ) ,/state LDR2 DUP2 #6401 LTH2 STH #6463 GTH2 STHr ORA ( c < 25601 || c > 25699 ) JMP2r @Dial/rotate ( n* -- ) #0064 DIV2k MUL2 SUB2 [ LIT2 &state 6432 ] ( start @ 25650 ) SWP2 /op ,/state STR2 JMP2r @Dial/fixup ( n* -- ) ,/state LDR2 #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