~aleteoryx/up-for-it

6314273f43c01a3ac5c5bb8768c8c698328671e5 — Aleteoryx 3 days ago 639310f
2025.01.2, finally
1 files changed, 60 insertions(+), 7 deletions(-)

M aoc/2025/01.tal
M aoc/2025/01.tal => aoc/2025/01.tal +60 -7
@@ 8,6 8,8 @@
@on-reset ( -> )
	banner
	first-star
	Dial/reset
	second-star
	BRK

@banner ( -- )


@@ 26,7 28,7 @@
	putdec2 endl

	JMP2r
@first-star/str "first 20 "star: 20 00
@first-star/str "first 20 "star: 09 00

@first-star/newline ( -- )
	Number/get Dial/rotate


@@ 42,6 44,49 @@
	!Number/one-byte


( second star )

@second-star ( -- )
	;/input Input/read

	[ LIT2 &pass $2 ]
	;/str puts
	putdec2 endl

	JMP2r
@second-star/str "second 20 "star: 09 00

@second-star/newline ( -- )
	#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
	}

	Number/get Dial/rotate

	DUP2 putdec2 #2018 DEO Dial/get putdec2 endl
	
	Number/get #0064 DIV2	( extra-overflow* )
	ADD2
	
	,/pass LDR2 ADD2 ,/pass STR2

	!Number/reset

@second-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 -- )


@@ 74,8 119,8 @@

@Input/filename "01.input 00
@Input/read ( callback* -- )
	;/filename #a8 DEO2
	#01ab DEO
	;/filename #a8 DEO2
	
	&loop
		DUP2


@@ 87,6 132,7 @@

	&endloop
	POP2 JMP2r

	
@Number/one-byte ( b -- )
	#00 SWP


@@ 100,18 146,25 @@
@Number/reset ( -- )
	#0000 ,/val STR2 JMP2r


( problem code )

@Dial/get ( -- n* )
	,/state LDR2 #6400 SUB2 JMP2r
@Dial/getraw ( -- n* )
	,/state LDR2 JMP2r
@Dial/reset ( -- )
	#6432 ,/state STR2 JMP2r
@Dial/rotate ( n* -- )
	[ LIT2 &state 6432 ]	( start @ 1050 )
	SWP2 &op $1
	[ LIT2 &state 6432 ]	( start @ 25650 )
	SWP2 /op
	#0064 DIV2k MUL2 SUB2	( mod 100 )
	#6400 ADD2		( keep in range 100-199 )
	#6400 ADD2		( keep in range 25600-25699 )
	,/state STR2
@Dial/left ( -- )
	[ LIT2 SUB2 _/op ] STR JMP2r
	[ LIT2 SUB2 _/opc ] STR JMP2r
@Dial/right ( -- )
	[ LIT2 ADD2 _/op ] STR JMP2r
	[ LIT2 ADD2 _/opc ] STR JMP2r
@Dial/op ( a* b* -- a?b* )
	&opc $1 JMP2r