( advent of code 2025, day 1, first star )
%dbg { #010e DEO }
@on-reset ( -> )
banner
first-star
BRK
@banner ( -- )
;/str !puts
@banner/str
"advent 20 "of 20 "code 20 "2025, 20 "day 20 "1, 20 "first 20 "star 0a 00
( first star )
@first-star ( -- )
Input/read
[ LIT2 &pass $2 ]
putdec2 !endl
@first-star/newline ( -- )
Number/get Dial/rotate
Number/reset
Dial/get ORA ?{ ,/pass LDR2 INC2 ,/pass STR2 }
JMP2r
@first-star/on-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 ( -- )
#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 )
@Dial/get ( -- n* )
,/state LDR2 #6400 SUB2 JMP2r
@Dial/rotate ( n* -- )
[ LIT2 &state 6432 ] ( start @ 25650 )
SWP2 [ &op $1 ]
#0064 DIV2k MUL2 SUB2 ( mod 100 )
#6400 ADD2 ( keep in range 25600-25699 )
,/state STR2
@Dial/left ( -- )
[ LIT2 SUB2 _/op ] STR JMP2r
@Dial/right ( -- )
[ LIT2 ADD2 _/op ] STR JMP2r