( advent of code 2025, day 2, first star ) %dbg { #010e DEO } |00 @Buffers/num $f &endnum $1 @Buffers/end $f &endend $1 $1 @Buffers/read $f &endread $1 @Buffers/sum $1f &endsum $1 |100 @on-reset ( -> ) banner first-star BRK @banner ( -- ) ;/str !puts @banner/str "advent 20 "of 20 "code 20 "2025, 20 "day 20 "2, 20 "first 20 "star 0a 00 ( first star ) @astr $1 "89 &end "5 $1 @bstr $1 "10 &end "9 $1 @first-star ( -- ) ;astr/end ;bstr/end sumstrs ;astr puts endl ( Input/read ) JMP2r @first-star/on-input ( b -- ) JMP2r ( 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 @incs ( n* -- ) LDAk ?{ [ LIT "1 ] ROT ROT STA JMP2r } LDAk [ LIT "9 ] NEQ ?{ DUP2 [ LIT "0 ] ROT ROT STA &subone #0001 SUB2 !incs } LDAk INC ROT ROT STA JMP2r @findend ( p* -- p* ) INC2 LDAk ?findend JMP2r @sumstrs ( a* b* -- ) ( takes pointers to the last digits of each number ) LDAk STH SWP2 LDAk STHr ( b* a* ac bc ) dbg DUP ?{ POP2 POP2 POP2 JMP2r } ( we've reached the end of b ) OVR ?{ NIP [ LIT "0 ] } ( if we're at the end of a, pad with 0s ) [ LIT2 "00 ] SUB2 ADD ( b* a* a+b ) DUP #0a LTH ?{ ( overflow ) #0a SUB STH DUP2 incs/subone ( carry ) STHr } [ LIT "0 ] ADD ( convert back to ascii ) ROTk ROT STA POP ( save digit ) #0001 SUB2 SWP2 #0001 SUB2 !sumstrs ( loop! ) ( object lib ) @Input/filename "02.input.test 00 @Input/read ( -- ) #01ab DEO ;/filename #a8 DEO2 &loop ;/byte #ac DEO2 #a3 DEI #00 EQU ?/endloop ( EOF ) [ LIT &byte $1 ] first-star/on-input !/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 )