( 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 )