A aoc/2025/01.input.test => aoc/2025/01.input.test +10 -0
@@ 0,0 1,10 @@
+L68
+L30
+R48
+L5
+R60
+L55
+L1
+L99
+R14
+L82
M aoc/2025/01.tal => aoc/2025/01.tal +104 -9
@@ 1,22 1,117 @@
( advent of code 2025, day 1 )
+%dbg { #010e DEO }
+
+|00
+
+|100
@on-reset ( -> )
- ;on-input #10 DEO2
banner
+ first-star
BRK
@banner ( -- )
- ;/str
- &loop
- LDAk #18 DEO
- INC2 LDAk ?/loop
- POP2 JMP2r
+ ;/str !puts
@banner/str
"advent 20 "of 20 "code, 20 "day 20 "1 0a 00
-@on-input ( -> )
- #12 DEI
+
+( first star )
+
+@first-star ( -- )
+ ;/input Input/read
+
+ [ LIT2 &pass $2 ]
+ ;/str puts
+ putdec2 endl
+
+ JMP2r
+@first-star/str "first 20 "star: 20 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
+
+
+( 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* -- )
+ ;/filename #a8 DEO2
+ #01ab DEO
- BRK
+ &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/rotate ( n* -- )
+ [ LIT2 &state 6432 ] ( start @ 1050 )
+ SWP2 &op $1
+ #0064 DIV2k MUL2 SUB2 ( mod 100 )
+ #6400 ADD2 ( keep in range 100-199 )
+ ,/state STR2
+@Dial/left ( -- )
+ [ LIT2 SUB2 _/op ] STR JMP2r
+@Dial/right ( -- )
+ [ LIT2 ADD2 _/op ] STR JMP2r
M aoc/2025/mkfile => aoc/2025/mkfile +2 -1
@@ 3,8 3,9 @@ DAYS=01.rom
all:VQ: $DAYS
%:V: %.rom
- uxncli $stem.rom <$stem.input
+ uxncli $stem.rom
%.rom: %.tal
drifblim $stem.tal $stem.rom
+
M aoc/2025/xx.tal => aoc/2025/xx.tal +41 -3
@@ 1,7 1,11 @@
-( advent of code 2025, day 1 )
+( advent of code 2025, day xx )
+%dbg { #100e DEO }
+
+|00
+
+|100
@on-reset ( -> )
- ;on-input #10 DEO2
banner
BRK
@@ 12,11 16,45 @@
INC2 LDAk ?/loop
POP2 JMP2r
@banner/str
- "advent 20 "of 20 "code, 20 "day 20 "1 0a 00
+ "advent 20 "of 20 "code, 20 "day 20 "xx 0a 00
+
+
+@Input/filename "xx.input 00
+@Input/read ( callback* -- )
+ ;/filename #a8 DEO2
+ #01ab DEO2
+
+ &loop
+ DUP2
+ ;/byte #ac DEO2
+ #a3 DEI #00 EQU ?/endloop ( EOF )
+ [ LIT &byte $1 ]
+ ROT ROT JSR2
+ !/loop
+ &endloop
+ POP2 JMP2r
+
+
+@first-star ( -- )
@on-input ( -> )
#12 DEI
BRK
+
+@Number/one-byte ( b -- )
+ #00 SWP
+ LIT "0 SUB
+ [ LIT2 &val 00 &val2 00 ]
+ #000a MUL2 ADD2
+ ,/val STR2
+ JMP2r
+@Number/get2 ( -- n* )
+ ,/val LDR2 JMP2r
+@Number/get1 ( -- n )
+ ,/val2 LDR JMP2r
+@Number/reset ( -- )
+ #0000 ,/val STR2 JMP2r
+