~aleteoryx/up-for-it

a8dcf6b0be55d5a1a836c62a487d155720ad8f47 — Aleteoryx 3 days ago 6314273
split
4 files changed, 182 insertions(+), 78 deletions(-)

A aoc/2025/01.1.tal
R aoc/2025/{01 => 01.2}.tal
M aoc/2025/mkfile
M aoc/2025/xx.tal
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 )