~aleteoryx/up-for-it

ref: 195fe6fd03b1c485c2b8a862d775398e79a1abf7 up-for-it/aoc/2025/01.1.tal -rw-r--r-- 1.6 KiB
195fe6fdAleteoryx notes 2 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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