A aoc/2025/01.1.tal => aoc/2025/01.1.tal +110 -0
@@ 0,0 1,110 @@
+( 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
R aoc/2025/01.tal => aoc/2025/01.2.tal +17 -49
@@ 1,47 1,16 @@
-( advent of code 2025, day 1 )
+( advent of code 2025, day 1, second star )
%dbg { #010e DEO }
-|00
-
-|100
@on-reset ( -> )
banner
- first-star
- Dial/reset
second-star
BRK
@banner ( -- )
;/str !puts
@banner/str
- "advent 20 "of 20 "code, 20 "day 20 "1 0a 00
-
-
-( first star )
-
-@first-star ( -- )
- ;/input Input/read
-
- [ LIT2 &pass $2 ]
- ;/str puts
- putdec2 endl
-
- JMP2r
-@first-star/str "first 20 "star: 09 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
+ "advent 20 "of 20 "code 20 "2025, 20 "day 20 "1, 20 "second 20 "star 0a 00
( second star )
@@ 50,26 19,19 @@
;/input Input/read
[ LIT2 &pass $2 ]
- ;/str puts
putdec2 endl
JMP2r
-@second-star/str "second 20 "star: 09 00
@second-star/newline ( -- )
+ Number/get Dial/rotate
+
#0000
Dial/get #0000 EQU2 ?{
- Dial/getraw
- Number/get
- #0064 DIV2k MUL2 SUB2
- Dial/op
-
- DUP2 #6401 LTH2 STH
- #6463 GTH2 STHr ORA ( c < 25601 || c > 25699 )
- ORA
+ Dial/hitzero ORA
}
-
- Number/get Dial/rotate
+
+ Dial/fixup
DUP2 putdec2 #2018 DEO Dial/get putdec2 endl
@@ 151,13 113,19 @@
@Dial/get ( -- n* )
,/state LDR2 #6400 SUB2 JMP2r
-@Dial/getraw ( -- n* )
- ,/state LDR2 JMP2r
-@Dial/reset ( -- )
- #6432 ,/state STR2 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
M aoc/2025/mkfile => aoc/2025/mkfile +2 -2
@@ 1,8 1,8 @@
-DAYS=01.rom
+DAYS=01.1.rom 01.2.rom
all:VQ: $DAYS
-%:V: %.rom
+%:VQ: %.rom
uxncli $stem.rom
%.rom: %.tal
M aoc/2025/xx.tal => aoc/2025/xx.tal +53 -27
@@ 1,60 1,86 @@
-( advent of code 2025, day xx )
+( advent of code 2025, day xx, first star )
-%dbg { #100e DEO }
+%dbg { #010e DEO }
-|00
-
-|100
@on-reset ( -> )
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 "xx 0a 00
+ "advent 20 "of 20 "code 20 "2025, 20 "day 20 "xx, 20 "first 20 "star 0a 00
+
+
+( first star )
+
+@first-star ( -- )
+ 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
+
+
+( object lib )
@Input/filename "xx.input 00
-@Input/read ( callback* -- )
+@Input/read ( -- )
+ #01ab DEO
;/filename #a8 DEO2
- #01ab DEO2
&loop
- DUP2
;/byte #ac DEO2
#a3 DEI #00 EQU ?/endloop ( EOF )
[ LIT &byte $1 ]
- ROT ROT JSR2
+ first-star/on-input
!/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 ]
+ [ LIT2 &val 0000 ]
#000a MUL2 ADD2
,/val STR2
JMP2r
-@Number/get2 ( -- n* )
+@Number/get ( -- n* )
,/val LDR2 JMP2r
-@Number/get1 ( -- n )
- ,/val2 LDR JMP2r
@Number/reset ( -- )
#0000 ,/val STR2 JMP2r
+
+( problem code )
+