mirror of
https://git.plasmaofthedawn.com/adventofcode.git
synced 2025-12-25 02:57:34 -06:00
day9 done
This commit is contained in:
496
src/plasl/2025/day9/input
Normal file
496
src/plasl/2025/day9/input
Normal file
@@ -0,0 +1,496 @@
|
|||||||
|
98139,50134
|
||||||
|
98139,51344
|
||||||
|
97752,51344
|
||||||
|
97752,52552
|
||||||
|
97690,52552
|
||||||
|
97690,53768
|
||||||
|
97716,53768
|
||||||
|
97716,55028
|
||||||
|
98110,55028
|
||||||
|
98110,56140
|
||||||
|
97156,56140
|
||||||
|
97156,57477
|
||||||
|
97912,57477
|
||||||
|
97912,58631
|
||||||
|
97393,58631
|
||||||
|
97393,59810
|
||||||
|
97068,59810
|
||||||
|
97068,60999
|
||||||
|
96805,60999
|
||||||
|
96805,62191
|
||||||
|
96547,62191
|
||||||
|
96547,63241
|
||||||
|
95790,63241
|
||||||
|
95790,64439
|
||||||
|
95574,64439
|
||||||
|
95574,65656
|
||||||
|
95388,65656
|
||||||
|
95388,66774
|
||||||
|
94904,66774
|
||||||
|
94904,67836
|
||||||
|
94290,67836
|
||||||
|
94290,69244
|
||||||
|
94501,69244
|
||||||
|
94501,70268
|
||||||
|
93788,70268
|
||||||
|
93788,71148
|
||||||
|
92809,71148
|
||||||
|
92809,72346
|
||||||
|
92489,72346
|
||||||
|
92489,73328
|
||||||
|
91753,73328
|
||||||
|
91753,74320
|
||||||
|
91051,74320
|
||||||
|
91051,75306
|
||||||
|
90348,75306
|
||||||
|
90348,76613
|
||||||
|
90136,76613
|
||||||
|
90136,77644
|
||||||
|
89480,77644
|
||||||
|
89480,78337
|
||||||
|
88364,78337
|
||||||
|
88364,79295
|
||||||
|
87628,79295
|
||||||
|
87628,80165
|
||||||
|
86784,80165
|
||||||
|
86784,81228
|
||||||
|
86171,81228
|
||||||
|
86171,82441
|
||||||
|
85705,82441
|
||||||
|
85705,83098
|
||||||
|
84624,83098
|
||||||
|
84624,84064
|
||||||
|
83873,84064
|
||||||
|
83873,84825
|
||||||
|
82918,84825
|
||||||
|
82918,85335
|
||||||
|
81744,85335
|
||||||
|
81744,86744
|
||||||
|
81365,86744
|
||||||
|
81365,86949
|
||||||
|
79956,86949
|
||||||
|
79956,88350
|
||||||
|
79514,88350
|
||||||
|
79514,88946
|
||||||
|
78431,88946
|
||||||
|
78431,89218
|
||||||
|
77134,89218
|
||||||
|
77134,90171
|
||||||
|
76314,90171
|
||||||
|
76314,91035
|
||||||
|
75418,91035
|
||||||
|
75418,91538
|
||||||
|
74296,91538
|
||||||
|
74296,91669
|
||||||
|
72975,91669
|
||||||
|
72975,92779
|
||||||
|
72193,92779
|
||||||
|
72193,92918
|
||||||
|
70903,92918
|
||||||
|
70903,93286
|
||||||
|
69742,93286
|
||||||
|
69742,93717
|
||||||
|
68615,93717
|
||||||
|
68615,94951
|
||||||
|
67809,94951
|
||||||
|
67809,95446
|
||||||
|
66686,95446
|
||||||
|
66686,95710
|
||||||
|
65481,95710
|
||||||
|
65481,95839
|
||||||
|
64241,95839
|
||||||
|
64241,95966
|
||||||
|
63013,95966
|
||||||
|
63013,96113
|
||||||
|
61801,96113
|
||||||
|
61801,97201
|
||||||
|
60813,97201
|
||||||
|
60813,96716
|
||||||
|
59464,96716
|
||||||
|
59464,97458
|
||||||
|
58368,97458
|
||||||
|
58368,97772
|
||||||
|
57181,97772
|
||||||
|
57181,97368
|
||||||
|
55897,97368
|
||||||
|
55897,97883
|
||||||
|
54733,97883
|
||||||
|
54733,97638
|
||||||
|
53493,97638
|
||||||
|
53493,97722
|
||||||
|
52286,97722
|
||||||
|
52286,98001
|
||||||
|
51081,98001
|
||||||
|
51081,97675
|
||||||
|
49866,97675
|
||||||
|
49866,97707
|
||||||
|
48657,97707
|
||||||
|
48657,98136
|
||||||
|
47423,98136
|
||||||
|
47423,97634
|
||||||
|
46238,97634
|
||||||
|
46238,98098
|
||||||
|
44972,98098
|
||||||
|
44972,97622
|
||||||
|
43799,97622
|
||||||
|
43799,97855
|
||||||
|
42531,97855
|
||||||
|
42531,97299
|
||||||
|
41385,97299
|
||||||
|
41385,96972
|
||||||
|
40209,96972
|
||||||
|
40209,96335
|
||||||
|
39110,96335
|
||||||
|
39110,96563
|
||||||
|
37804,96563
|
||||||
|
37804,95651
|
||||||
|
36799,95651
|
||||||
|
36799,95762
|
||||||
|
35501,95762
|
||||||
|
35501,94989
|
||||||
|
34481,94989
|
||||||
|
34481,95417
|
||||||
|
33034,95417
|
||||||
|
33034,94438
|
||||||
|
32104,94438
|
||||||
|
32104,93632
|
||||||
|
31130,93632
|
||||||
|
31130,93574
|
||||||
|
29830,93574
|
||||||
|
29830,93411
|
||||||
|
28554,93411
|
||||||
|
28554,92731
|
||||||
|
27526,92731
|
||||||
|
27526,91888
|
||||||
|
26595,91888
|
||||||
|
26595,91570
|
||||||
|
25371,91570
|
||||||
|
25371,90514
|
||||||
|
24589,90514
|
||||||
|
24589,89701
|
||||||
|
23674,89701
|
||||||
|
23674,89384
|
||||||
|
22423,89384
|
||||||
|
22423,88761
|
||||||
|
21369,88761
|
||||||
|
21369,87707
|
||||||
|
20642,87707
|
||||||
|
20642,87225
|
||||||
|
19472,87225
|
||||||
|
19472,85980
|
||||||
|
18936,85980
|
||||||
|
18936,85790
|
||||||
|
17482,85790
|
||||||
|
17482,84618
|
||||||
|
16907,84618
|
||||||
|
16907,83563
|
||||||
|
16247,83563
|
||||||
|
16247,82768
|
||||||
|
15333,82768
|
||||||
|
15333,82271
|
||||||
|
14078,82271
|
||||||
|
14078,80864
|
||||||
|
13842,80864
|
||||||
|
13842,80408
|
||||||
|
12492,80408
|
||||||
|
12492,79557
|
||||||
|
11593,79557
|
||||||
|
11593,78479
|
||||||
|
10986,78479
|
||||||
|
10986,77474
|
||||||
|
10289,77474
|
||||||
|
10289,76312
|
||||||
|
9830,76312
|
||||||
|
9830,75465
|
||||||
|
8887,75465
|
||||||
|
8887,74377
|
||||||
|
8322,74377
|
||||||
|
8322,73361
|
||||||
|
7631,73361
|
||||||
|
7631,71962
|
||||||
|
7666,71962
|
||||||
|
7666,71126
|
||||||
|
6622,71126
|
||||||
|
6622,70096
|
||||||
|
5936,70096
|
||||||
|
5936,68996
|
||||||
|
5389,68996
|
||||||
|
5389,67683
|
||||||
|
5367,67683
|
||||||
|
5367,66513
|
||||||
|
5025,66513
|
||||||
|
5025,65515
|
||||||
|
4188,65515
|
||||||
|
4188,64224
|
||||||
|
4215,64224
|
||||||
|
4215,63167
|
||||||
|
3489,63167
|
||||||
|
3489,61910
|
||||||
|
3462,61910
|
||||||
|
3462,60708
|
||||||
|
3257,60708
|
||||||
|
3257,59625
|
||||||
|
2484,59625
|
||||||
|
2484,58265
|
||||||
|
3125,58265
|
||||||
|
3125,57194
|
||||||
|
2142,57194
|
||||||
|
2142,55886
|
||||||
|
2721,55886
|
||||||
|
2721,54690
|
||||||
|
2552,54690
|
||||||
|
2552,53529
|
||||||
|
1870,53529
|
||||||
|
1870,52300
|
||||||
|
1984,52300
|
||||||
|
1984,51075
|
||||||
|
2287,51075
|
||||||
|
2287,50126
|
||||||
|
94997,50126
|
||||||
|
94997,48641
|
||||||
|
1738,48641
|
||||||
|
1738,47438
|
||||||
|
2142,47438
|
||||||
|
2142,46228
|
||||||
|
2242,46228
|
||||||
|
2242,45035
|
||||||
|
2503,45035
|
||||||
|
2503,43802
|
||||||
|
2400,43802
|
||||||
|
2400,42582
|
||||||
|
2469,42582
|
||||||
|
2469,41477
|
||||||
|
3203,41477
|
||||||
|
3203,40123
|
||||||
|
2614,40123
|
||||||
|
2614,39130
|
||||||
|
3748,39130
|
||||||
|
3748,37771
|
||||||
|
3311,37771
|
||||||
|
3311,36688
|
||||||
|
3965,36688
|
||||||
|
3965,35618
|
||||||
|
4607,35618
|
||||||
|
4607,34321
|
||||||
|
4547,34321
|
||||||
|
4547,33197
|
||||||
|
5019,33197
|
||||||
|
5019,31962
|
||||||
|
5208,31962
|
||||||
|
5208,31031
|
||||||
|
6138,31031
|
||||||
|
6138,29690
|
||||||
|
6123,29690
|
||||||
|
6123,28824
|
||||||
|
7136,28824
|
||||||
|
7136,27785
|
||||||
|
7761,27785
|
||||||
|
7761,26487
|
||||||
|
7917,26487
|
||||||
|
7917,25366
|
||||||
|
8421,25366
|
||||||
|
8421,24655
|
||||||
|
9592,24655
|
||||||
|
9592,23544
|
||||||
|
10102,23544
|
||||||
|
10102,22385
|
||||||
|
10560,22385
|
||||||
|
10560,21358
|
||||||
|
11223,21358
|
||||||
|
11223,20681
|
||||||
|
12341,20681
|
||||||
|
12341,19804
|
||||||
|
13179,19804
|
||||||
|
13179,18387
|
||||||
|
13383,18387
|
||||||
|
13383,17846
|
||||||
|
14610,17846
|
||||||
|
14610,16742
|
||||||
|
15209,16742
|
||||||
|
15209,16240
|
||||||
|
16429,16240
|
||||||
|
16429,14832
|
||||||
|
16758,14832
|
||||||
|
16758,14652
|
||||||
|
18243,14652
|
||||||
|
18243,13592
|
||||||
|
18921,13592
|
||||||
|
18921,13025
|
||||||
|
20023,13025
|
||||||
|
20023,11804
|
||||||
|
20605,11804
|
||||||
|
20605,11323
|
||||||
|
21765,11323
|
||||||
|
21765,10506
|
||||||
|
22675,10506
|
||||||
|
22675,10187
|
||||||
|
23921,10187
|
||||||
|
23921,9541
|
||||||
|
24939,9541
|
||||||
|
24939,8539
|
||||||
|
25750,8539
|
||||||
|
25750,7925
|
||||||
|
26800,7925
|
||||||
|
26800,7268
|
||||||
|
27831,7268
|
||||||
|
27831,7118
|
||||||
|
29114,7118
|
||||||
|
29114,6182
|
||||||
|
30015,6182
|
||||||
|
30015,5471
|
||||||
|
31038,5471
|
||||||
|
31038,5830
|
||||||
|
32500,5830
|
||||||
|
32500,5118
|
||||||
|
33520,5118
|
||||||
|
33520,4516
|
||||||
|
34595,4516
|
||||||
|
34595,3842
|
||||||
|
35659,3842
|
||||||
|
35659,3852
|
||||||
|
36935,3852
|
||||||
|
36935,3660
|
||||||
|
38140,3660
|
||||||
|
38140,3437
|
||||||
|
39332,3437
|
||||||
|
39332,2972
|
||||||
|
40472,2972
|
||||||
|
40472,2852
|
||||||
|
41686,2852
|
||||||
|
41686,2524
|
||||||
|
42863,2524
|
||||||
|
42863,2771
|
||||||
|
44119,2771
|
||||||
|
44119,2721
|
||||||
|
45326,2721
|
||||||
|
45326,2485
|
||||||
|
46515,2485
|
||||||
|
46515,2257
|
||||||
|
47712,2257
|
||||||
|
47712,2068
|
||||||
|
48919,2068
|
||||||
|
48919,2423
|
||||||
|
50133,2423
|
||||||
|
50133,2070
|
||||||
|
51349,2070
|
||||||
|
51349,2501
|
||||||
|
52542,2501
|
||||||
|
52542,1823
|
||||||
|
53804,1823
|
||||||
|
53804,2662
|
||||||
|
54947,2662
|
||||||
|
54947,2141
|
||||||
|
56231,2141
|
||||||
|
56231,2160
|
||||||
|
57466,2160
|
||||||
|
57466,2742
|
||||||
|
58606,2742
|
||||||
|
58606,3176
|
||||||
|
59759,3176
|
||||||
|
59759,3160
|
||||||
|
61007,3160
|
||||||
|
61007,3713
|
||||||
|
62122,3713
|
||||||
|
62122,3596
|
||||||
|
63418,3596
|
||||||
|
63418,4576
|
||||||
|
64391,4576
|
||||||
|
64391,4917
|
||||||
|
65550,4917
|
||||||
|
65550,5332
|
||||||
|
66685,5332
|
||||||
|
66685,5802
|
||||||
|
67798,5802
|
||||||
|
67798,5698
|
||||||
|
69158,5698
|
||||||
|
69158,5988
|
||||||
|
70371,5988
|
||||||
|
70371,7040
|
||||||
|
71222,7040
|
||||||
|
71222,7085
|
||||||
|
72570,7085
|
||||||
|
72570,8251
|
||||||
|
73325,8251
|
||||||
|
73325,8772
|
||||||
|
74424,8772
|
||||||
|
74424,9591
|
||||||
|
75344,9591
|
||||||
|
75344,10037
|
||||||
|
76498,10037
|
||||||
|
76498,10972
|
||||||
|
77326,10972
|
||||||
|
77326,11171
|
||||||
|
78680,11171
|
||||||
|
78680,12095
|
||||||
|
79510,12095
|
||||||
|
79510,12791
|
||||||
|
80513,12791
|
||||||
|
80513,13793
|
||||||
|
81258,13793
|
||||||
|
81258,14467
|
||||||
|
82284,14467
|
||||||
|
82284,15132
|
||||||
|
83330,15132
|
||||||
|
83330,16459
|
||||||
|
83729,16459
|
||||||
|
83729,17146
|
||||||
|
84756,17146
|
||||||
|
84756,17950
|
||||||
|
85674,17950
|
||||||
|
85674,18854
|
||||||
|
86486,18854
|
||||||
|
86486,19790
|
||||||
|
87261,19790
|
||||||
|
87261,20559
|
||||||
|
88254,20559
|
||||||
|
88254,21754
|
||||||
|
88691,21754
|
||||||
|
88691,22539
|
||||||
|
89690,22539
|
||||||
|
89690,23885
|
||||||
|
89867,23885
|
||||||
|
89867,24583
|
||||||
|
91032,24583
|
||||||
|
91032,25801
|
||||||
|
91371,25801
|
||||||
|
91371,27020
|
||||||
|
91675,27020
|
||||||
|
91675,27977
|
||||||
|
92449,27977
|
||||||
|
92449,29020
|
||||||
|
93074,29020
|
||||||
|
93074,30116
|
||||||
|
93597,30116
|
||||||
|
93597,31248
|
||||||
|
94036,31248
|
||||||
|
94036,32343
|
||||||
|
94564,32343
|
||||||
|
94564,33526
|
||||||
|
94865,33526
|
||||||
|
94865,34739
|
||||||
|
95057,34739
|
||||||
|
95057,35811
|
||||||
|
95668,35811
|
||||||
|
95668,37049
|
||||||
|
95744,37049
|
||||||
|
95744,38096
|
||||||
|
96509,38096
|
||||||
|
96509,39350
|
||||||
|
96482,39350
|
||||||
|
96482,40433
|
||||||
|
97222,40433
|
||||||
|
97222,41595
|
||||||
|
97659,41595
|
||||||
|
97659,42878
|
||||||
|
97375,42878
|
||||||
|
97375,44100
|
||||||
|
97379,44100
|
||||||
|
97379,45229
|
||||||
|
98259,45229
|
||||||
|
98259,46460
|
||||||
|
98267,46460
|
||||||
|
98267,47709
|
||||||
|
97813,47709
|
||||||
|
97813,48914
|
||||||
|
98189,48914
|
||||||
|
98189,50134
|
||||||
13
src/plasl/2025/day9/input.c
Normal file
13
src/plasl/2025/day9/input.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
4,1
|
||||||
|
6,1
|
||||||
|
6,3
|
||||||
|
8,3
|
||||||
|
8,5
|
||||||
|
6,5
|
||||||
|
6,7
|
||||||
|
4,7
|
||||||
|
4,5
|
||||||
|
2,5
|
||||||
|
2,3
|
||||||
|
4,3
|
||||||
|
|
||||||
9
src/plasl/2025/day9/input.t
Normal file
9
src/plasl/2025/day9/input.t
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
7,1
|
||||||
|
11,1
|
||||||
|
11,7
|
||||||
|
9,7
|
||||||
|
9,5
|
||||||
|
2,5
|
||||||
|
2,3
|
||||||
|
7,3
|
||||||
|
|
||||||
151
src/plasl/2025/day9/part1.psl
Normal file
151
src/plasl/2025/day9/part1.psl
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
|
||||||
|
i64 write(i32, ptr i8, u64) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(1), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 read(i32, ptr i8, u64) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(0), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 open(ptr i8, i32, i32) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(2), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
as i32
|
||||||
|
}
|
||||||
|
|
||||||
|
void exit(i32) {
|
||||||
|
as i64 i64(231) rev
|
||||||
|
syscall1 trash
|
||||||
|
}
|
||||||
|
|
||||||
|
void putc(i8) {
|
||||||
|
array i8[1] `dstr` store
|
||||||
|
write(1, `lt`, u64(1)) trash
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 strlen(ptr i8) {
|
||||||
|
dup while(dup load i8(0) !=) { 1+ } `r-`
|
||||||
|
}
|
||||||
|
|
||||||
|
void print(ptr i8) {
|
||||||
|
1 rev dup strlen write trash
|
||||||
|
}
|
||||||
|
|
||||||
|
void println(ptr i8) {
|
||||||
|
print i8(10) putc
|
||||||
|
}
|
||||||
|
|
||||||
|
void printnum(i32) {
|
||||||
|
|
||||||
|
if (dup 0 ==) {
|
||||||
|
putc('0')
|
||||||
|
} else if (dup 0 <) {
|
||||||
|
`0r-` '-' putc
|
||||||
|
}
|
||||||
|
|
||||||
|
array i8[11] 10+ dup i8(0) store -1+ `sb`
|
||||||
|
|
||||||
|
while (dup 0 !=) {
|
||||||
|
10 divmod 48+ as i8
|
||||||
|
`lb` rev store
|
||||||
|
`lb` -1+ `sb`
|
||||||
|
} trash
|
||||||
|
print(`lb`1+)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void printnum64(u64) {
|
||||||
|
|
||||||
|
if (dup u64(0) ==) {
|
||||||
|
putc('0')
|
||||||
|
}
|
||||||
|
|
||||||
|
array i8[22] 22+ dup i8(0) store -1+ `sb`
|
||||||
|
|
||||||
|
while (dup u64(0) !=) {
|
||||||
|
u64(10) divmod u64(48)+ as i8
|
||||||
|
`lb` rev store
|
||||||
|
`lb` -1+ `sb`
|
||||||
|
} trash
|
||||||
|
|
||||||
|
print(`lb`1+)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 atoi(ptr i8) {
|
||||||
|
set string
|
||||||
|
0
|
||||||
|
while (get string load '0' >= get string load '9' <= &) {
|
||||||
|
10* get string load '0'- as i32 +
|
||||||
|
get string 1+ set string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 atol(ptr i8) {
|
||||||
|
set string
|
||||||
|
u64(0)
|
||||||
|
while (get string load '0' >= get string load '9' <= &) {
|
||||||
|
u64(10)* get string load '0'- as u64 +
|
||||||
|
get string 1+ set string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
i32 abs(i32) {
|
||||||
|
if (dup 0 <) {`0r-`}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _start() {
|
||||||
|
|
||||||
|
open("input", 0, 0) set file
|
||||||
|
array i8[65535] set buffer
|
||||||
|
get buffer i8(48) store
|
||||||
|
read(get file, get buffer, u64(65535)) as i32 set size
|
||||||
|
#get buffer get size+ i8(10) store
|
||||||
|
|
||||||
|
array i32[512] set px
|
||||||
|
array i32[512] set py
|
||||||
|
|
||||||
|
u64(0) `so`
|
||||||
|
|
||||||
|
`0sc`
|
||||||
|
`0si`
|
||||||
|
while (`li1+` get size < ) {
|
||||||
|
atoi(buffer[`li`]) px[`lc`] `r` store
|
||||||
|
while (buffer[`li`] load ',' !=) {inc(i)} inc(i)
|
||||||
|
|
||||||
|
atoi(buffer[`li`]) py[`lc`] `r` store
|
||||||
|
while (buffer[`li`] load i8(10) !=) {inc(i)} inc(i)
|
||||||
|
|
||||||
|
inc(c)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
`0si`
|
||||||
|
while (`lilc` < ) {
|
||||||
|
`li1+sj`
|
||||||
|
|
||||||
|
while(`ljlc` <){
|
||||||
|
px[`li`] load set x1 py[`li`] load set y1
|
||||||
|
px[`lj`] load set x2 py[`lj`] load set y2
|
||||||
|
|
||||||
|
if (abs(get x1 get x2 -) `1+` as u64 abs(get y1 get y2 -) `1+` as u64 * `lo` > ) {
|
||||||
|
abs(get x1 get x2 -) `1+` as u64 abs(get y1 get y2 -) `1+` as u64 * `so`
|
||||||
|
}
|
||||||
|
inc(j)
|
||||||
|
}
|
||||||
|
inc(i)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
println("answer:")
|
||||||
|
printnum64(get o)
|
||||||
|
|
||||||
|
exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
_start
|
||||||
|
}
|
||||||
170
src/plasl/2025/day9/part1old.psl
Normal file
170
src/plasl/2025/day9/part1old.psl
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
|
||||||
|
i64 write(i32, ptr i8, u64) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(1), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 read(i32, ptr i8, u64) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(0), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 open(ptr i8, i32, i32) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(2), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
as i32
|
||||||
|
}
|
||||||
|
|
||||||
|
void exit(i32) {
|
||||||
|
as i64 i64(231) rev
|
||||||
|
syscall1 trash
|
||||||
|
}
|
||||||
|
|
||||||
|
void putc(i8) {
|
||||||
|
array i8[1] `dstr` store
|
||||||
|
write(1, `lt`, u64(1)) trash
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 strlen(ptr i8) {
|
||||||
|
dup while(dup load i8(0) !=) { 1+ } `r-`
|
||||||
|
}
|
||||||
|
|
||||||
|
void print(ptr i8) {
|
||||||
|
1 rev dup strlen write trash
|
||||||
|
}
|
||||||
|
|
||||||
|
void println(ptr i8) {
|
||||||
|
print i8(10) putc
|
||||||
|
}
|
||||||
|
|
||||||
|
void printnum(i32) {
|
||||||
|
|
||||||
|
if (dup 0 ==) {
|
||||||
|
putc('0')
|
||||||
|
} else if (dup 0 <) {
|
||||||
|
`0r-` '-' putc
|
||||||
|
}
|
||||||
|
|
||||||
|
array i8[11] 10+ dup i8(0) store -1+ `sb`
|
||||||
|
|
||||||
|
while (dup 0 !=) {
|
||||||
|
10 divmod 48+ as i8
|
||||||
|
`lb` rev store
|
||||||
|
`lb` -1+ `sb`
|
||||||
|
} trash
|
||||||
|
print(`lb`1+)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void printnum64(u64) {
|
||||||
|
|
||||||
|
if (dup u64(0) ==) {
|
||||||
|
putc('0')
|
||||||
|
}
|
||||||
|
|
||||||
|
array i8[22] 22+ dup i8(0) store -1+ `sb`
|
||||||
|
|
||||||
|
while (dup u64(0) !=) {
|
||||||
|
u64(10) divmod u64(48)+ as i8
|
||||||
|
`lb` rev store
|
||||||
|
`lb` -1+ `sb`
|
||||||
|
} trash
|
||||||
|
|
||||||
|
print(`lb`1+)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 atoi(ptr i8) {
|
||||||
|
set string
|
||||||
|
0
|
||||||
|
while (get string load '0' >= get string load '9' <= &) {
|
||||||
|
10* get string load '0'- as i32 +
|
||||||
|
get string 1+ set string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 atol(ptr i8) {
|
||||||
|
set string
|
||||||
|
u64(0)
|
||||||
|
while (get string load '0' >= get string load '9' <= &) {
|
||||||
|
u64(10)* get string load '0'- as u64 +
|
||||||
|
get string 1+ set string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
i32 abs(i32) {
|
||||||
|
if (dup 0 <) {`0r-`}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _start() {
|
||||||
|
|
||||||
|
open("input.q", 0, 0) set file
|
||||||
|
array i8[65535] set buffer
|
||||||
|
get buffer i8(48) store
|
||||||
|
read(get file, get buffer, u64(65535)) as i32 set size
|
||||||
|
#get buffer get size+ i8(10) store
|
||||||
|
|
||||||
|
`0so`
|
||||||
|
|
||||||
|
`100000` set trx `100000` set try
|
||||||
|
`100000` set brx `0` set bry
|
||||||
|
`0` set blx `0` set bly
|
||||||
|
`0` set tlx `100000` set tly
|
||||||
|
|
||||||
|
`0si`
|
||||||
|
while (`li1+` get size < ) {
|
||||||
|
atoi(buffer[`li`]) `sx`
|
||||||
|
while (buffer[`li`] load ',' !=) {inc(i)} inc(i)
|
||||||
|
|
||||||
|
atoi(buffer[`li`]) `sy`
|
||||||
|
while (buffer[`li`] load i8(10) !=) {inc(i)} inc(i)
|
||||||
|
|
||||||
|
`lxlyr` printnum ',' putc printnum i8(10) putc
|
||||||
|
|
||||||
|
# if less than topright, then
|
||||||
|
if (`lxly+` get trx get try + <=) {
|
||||||
|
`lxly` set try set trx
|
||||||
|
}
|
||||||
|
# if y - x > br
|
||||||
|
if (`lylx-` get bry get brx - >=) {
|
||||||
|
`lxly` set bry set brx
|
||||||
|
}
|
||||||
|
# if more than bottom left
|
||||||
|
if (`lxly+` get blx get bly+ >=) {
|
||||||
|
`lxly` set bly set blx
|
||||||
|
}
|
||||||
|
# if x - y > tl
|
||||||
|
if (`lxly-` get tlx get tly - >=) {
|
||||||
|
`lxly` set tly set tlx
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
print("tr: ")
|
||||||
|
printnum(get trx) putc(',') printnum(get try) putc(i8(10))
|
||||||
|
print("br: ")
|
||||||
|
printnum(get brx) putc(',') printnum(get bry) putc(i8(10))
|
||||||
|
print("bl: ")
|
||||||
|
printnum(get blx) putc(',') printnum(get bly) putc(i8(10))
|
||||||
|
print("tl: ")
|
||||||
|
printnum(get tlx) putc(',') printnum(get tly) putc(i8(10))
|
||||||
|
|
||||||
|
get blx get trx - `1+` as u64 get bly get try - `1+` as u64 * `s1`
|
||||||
|
get tlx get brx - `1+` as u64 get bry get tly - `1+` as u64 * `s2`
|
||||||
|
|
||||||
|
if (`l1l2`>) {
|
||||||
|
`l1`
|
||||||
|
} else {
|
||||||
|
`l2`
|
||||||
|
}
|
||||||
|
|
||||||
|
println("answer:")
|
||||||
|
printnum64
|
||||||
|
|
||||||
|
exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
_start
|
||||||
|
}
|
||||||
344
src/plasl/2025/day9/part2.psl
Normal file
344
src/plasl/2025/day9/part2.psl
Normal file
@@ -0,0 +1,344 @@
|
|||||||
|
|
||||||
|
i64 write(i32, ptr i8, u64) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(1), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
}
|
||||||
|
|
||||||
|
i64 read(i32, ptr i8, u64) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(0), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 open(ptr i8, i32, i32) {
|
||||||
|
`scsbsa`
|
||||||
|
syscall3(i64(2), `la` as i64, `lb` as i64, `lc` as i64)
|
||||||
|
as i32
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr i8 mmap(ptr i8, u64, i32, i32, i32, i64) {
|
||||||
|
`sfsesdscsbsa`
|
||||||
|
syscall6(i64(9), `la` as i64, `lb` as i64, `lc` as i64, `ld` as i64, `le` as i64, `lf`)
|
||||||
|
as ptr i8
|
||||||
|
}
|
||||||
|
|
||||||
|
void exit(i32) {
|
||||||
|
as i64 i64(231) rev
|
||||||
|
syscall1 trash
|
||||||
|
}
|
||||||
|
|
||||||
|
void putc(i8) {
|
||||||
|
array i8[1] `dstr` store
|
||||||
|
write(1, `lt`, u64(1)) trash
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 strlen(ptr i8) {
|
||||||
|
dup while(dup load i8(0) !=) { 1+ } `r-`
|
||||||
|
}
|
||||||
|
|
||||||
|
void print(ptr i8) {
|
||||||
|
1 rev dup strlen write trash
|
||||||
|
}
|
||||||
|
|
||||||
|
void println(ptr i8) {
|
||||||
|
print i8(10) putc
|
||||||
|
}
|
||||||
|
|
||||||
|
void printnum(i32) {
|
||||||
|
|
||||||
|
if (dup 0 ==) {
|
||||||
|
putc('0')
|
||||||
|
} else if (dup 0 <) {
|
||||||
|
`0r-` '-' putc
|
||||||
|
}
|
||||||
|
|
||||||
|
array i8[11] 10+ dup i8(0) store -1+ `sb`
|
||||||
|
|
||||||
|
while (dup 0 !=) {
|
||||||
|
10 divmod 48+ as i8
|
||||||
|
`lb` rev store
|
||||||
|
`lb` -1+ `sb`
|
||||||
|
} trash
|
||||||
|
print(`lb`1+)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void printnum64(u64) {
|
||||||
|
|
||||||
|
if (dup u64(0) ==) {
|
||||||
|
putc('0')
|
||||||
|
}
|
||||||
|
|
||||||
|
array i8[22] 21+ dup i8(0) store -1+ `sb`
|
||||||
|
|
||||||
|
while (dup u64(0) !=) {
|
||||||
|
u64(10) divmod u64(48)+ as i8
|
||||||
|
`lb` rev store
|
||||||
|
`lb` -1+ `sb`
|
||||||
|
} trash
|
||||||
|
|
||||||
|
print(`lb`1+)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
i32 atoi(ptr i8) {
|
||||||
|
set string
|
||||||
|
0
|
||||||
|
while (get string load '0' >= get string load '9' <= &) {
|
||||||
|
10* get string load '0'- as i32 +
|
||||||
|
get string 1+ set string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u64 atol(ptr i8) {
|
||||||
|
set string
|
||||||
|
u64(0)
|
||||||
|
while (get string load '0' >= get string load '9' <= &) {
|
||||||
|
u64(10)* get string load '0'- as u64 +
|
||||||
|
get string 1+ set string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
i32 abs(i32) {
|
||||||
|
if (dup 0 <) {`0r-`}
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr i8 memset(ptr i8, i32, u64) {
|
||||||
|
`sn` as i8 `sc`
|
||||||
|
|
||||||
|
u64(0) `si`
|
||||||
|
while (`liln` < ) {
|
||||||
|
`1+dlc` store
|
||||||
|
inc(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
u1 check_line(i32, i32, i32, ptr i32, ptr i32, ptr i32, i32) {
|
||||||
|
set linecount set linep set lineh set linel
|
||||||
|
set pos set top set bottom
|
||||||
|
|
||||||
|
# swap if needed
|
||||||
|
if (get top get bottom <) {get top get bottom set top set bottom}
|
||||||
|
|
||||||
|
printnum(get pos) ']' putc
|
||||||
|
printnum(get top) ',' putc
|
||||||
|
printnum(get bottom) i8(10) putc
|
||||||
|
|
||||||
|
`0si`
|
||||||
|
while (`li` get linecount <) {
|
||||||
|
|
||||||
|
#printnum(linep[`li`] load) ':' putc
|
||||||
|
#printnum(lineh[`li`] load) ',' putc
|
||||||
|
#printnum(linel[`li`] load)
|
||||||
|
|
||||||
|
#if (get top linep[`li`] load >= get bottom linep[`li`] load <= &) { '!' putc }
|
||||||
|
#if (lineh[`li`] load get pos >= linel[`li`] load get bottom <= &) { '@' putc }
|
||||||
|
|
||||||
|
#i8(10) putc
|
||||||
|
|
||||||
|
if (get top linep[`li`] load >= get bottom linep[`li`] load <= & # this line is positioned between
|
||||||
|
lineh[`li`] load get pos >= linel[`li`] load get pos <= & # it intersects
|
||||||
|
&) {
|
||||||
|
println("intersect")
|
||||||
|
return u1(0)
|
||||||
|
}
|
||||||
|
inc(i)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
u1(1)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void floodfill(ptr i8, i32) {
|
||||||
|
set w set map
|
||||||
|
|
||||||
|
`0sy`
|
||||||
|
while (`lylw` <) {
|
||||||
|
u1(0) set flag
|
||||||
|
|
||||||
|
#'.' putc
|
||||||
|
|
||||||
|
`0sx`
|
||||||
|
while (`lxlw` <) {
|
||||||
|
#printnum(`lx`) ',' putc printnum(`ly`) if (get flag) {'T'} else {'F'} putc
|
||||||
|
#i8(10) putc
|
||||||
|
if (map[`lylw*lx+`] `dsp` load '#' == ) {
|
||||||
|
get flag u1(1) ^ set flag
|
||||||
|
}
|
||||||
|
|
||||||
|
if (get flag) {
|
||||||
|
`lp` '#' store
|
||||||
|
}
|
||||||
|
inc(x)
|
||||||
|
}
|
||||||
|
inc(y)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _start() {
|
||||||
|
|
||||||
|
open("input", 0, 0) set file
|
||||||
|
array i8[65535] set buffer
|
||||||
|
get buffer i8(48) store
|
||||||
|
read(get file, get buffer, u64(65535)) as i32 set size
|
||||||
|
#get buffer get size+ i8(10) store
|
||||||
|
|
||||||
|
array i32[512] set px
|
||||||
|
array i32[512] set py
|
||||||
|
|
||||||
|
u64(0) `so`
|
||||||
|
|
||||||
|
100000 `sw`
|
||||||
|
|
||||||
|
# println("mmap")
|
||||||
|
# yeah whatever go my constants
|
||||||
|
# mmap(u64(0) as ptr i8, u64(419304) u64(4096) *, 1 2 |, 32 2 |, 0, i64(0)) set map
|
||||||
|
|
||||||
|
# if (get map as i64 i64(-1) == ){
|
||||||
|
# println("mmap failed")
|
||||||
|
# exit(1)
|
||||||
|
#}
|
||||||
|
|
||||||
|
# memset(get map, 0, u64(10000000000)) trash
|
||||||
|
|
||||||
|
# println("wmpwmef")
|
||||||
|
# stride
|
||||||
|
|
||||||
|
|
||||||
|
# load points
|
||||||
|
`0sc`
|
||||||
|
`0si`
|
||||||
|
while (`li1+` get size < ) {
|
||||||
|
atoi(buffer[`li`]) px[`lc`] `r` store
|
||||||
|
while (buffer[`li`] load ',' !=) {inc(i)} inc(i)
|
||||||
|
|
||||||
|
atoi(buffer[`li`]) py[`lc`] `r` store
|
||||||
|
while (buffer[`li`] load i8(10) !=) {inc(i)} inc(i)
|
||||||
|
|
||||||
|
inc(c)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
println("mapping")
|
||||||
|
|
||||||
|
array i32[512] set hlineh
|
||||||
|
array i32[512] set hlinel
|
||||||
|
array i32[512] set hlinep
|
||||||
|
0 set hlinec
|
||||||
|
|
||||||
|
array i32[512] set vlineh
|
||||||
|
array i32[512] set vlinel
|
||||||
|
array i32[512] set vlinep
|
||||||
|
0 set vlinec
|
||||||
|
|
||||||
|
# map out lines
|
||||||
|
# i'm just assuming clockwise. i think that's valid
|
||||||
|
`1si`
|
||||||
|
|
||||||
|
# TODO: set lastturn properly
|
||||||
|
|
||||||
|
'Q' set lastturn
|
||||||
|
while (`lilc` <=) {
|
||||||
|
|
||||||
|
px[`li1-`] load set x1 py[`li1-`] load set y1
|
||||||
|
if (`lilc` != ) {
|
||||||
|
px[`li`] load set x2 py[`li`] load set y2
|
||||||
|
} else {
|
||||||
|
# last iter
|
||||||
|
px[0] load set x2 py[0] load set y2
|
||||||
|
}
|
||||||
|
|
||||||
|
if (get x1 get x2 == ) {
|
||||||
|
# store vline
|
||||||
|
if (get y1 get y2 < ) {
|
||||||
|
# down
|
||||||
|
|
||||||
|
# corner
|
||||||
|
if (get lastturn 'l' ==) {inc(y1) hlinel[get hlinec 1-] dup load `1+` store}
|
||||||
|
|
||||||
|
'd' set lastturn
|
||||||
|
get x1 1+ get y1 get y2
|
||||||
|
} else {
|
||||||
|
# up
|
||||||
|
if (get lastturn 'r' ==) {dec(y1) hlineh[get hlinec 1-] dup load `1-` store}
|
||||||
|
|
||||||
|
'u' set lastturn
|
||||||
|
get x1 1- get y2 get y1
|
||||||
|
}
|
||||||
|
|
||||||
|
vlineh[get vlinec] rev store vlinel[get vlinec] rev store
|
||||||
|
vlinep[get vlinec] rev store
|
||||||
|
|
||||||
|
inc(vlinec)
|
||||||
|
|
||||||
|
} else if (get y1 get y2 == ) {
|
||||||
|
# store hline
|
||||||
|
if (get x1 get x2 < ) {
|
||||||
|
# right
|
||||||
|
if (get lastturn 'd' ==) {inc(x1) vlineh[get vlinec 1-] dup load `1-` store}
|
||||||
|
|
||||||
|
'r' set lastturn
|
||||||
|
get y1 1- get x1 get x2
|
||||||
|
} else {
|
||||||
|
# left
|
||||||
|
if (get lastturn 'u' ==) {dec(x1) vlinel[get vlinec 1-] dup load `1+` store}
|
||||||
|
|
||||||
|
'l' set lastturn
|
||||||
|
get y1 1+ get x2 get x1
|
||||||
|
}
|
||||||
|
|
||||||
|
hlineh[get hlinec] rev store hlinel[get hlinec] rev store
|
||||||
|
|
||||||
|
hlinep[get hlinec] rev store
|
||||||
|
inc(hlinec)
|
||||||
|
}
|
||||||
|
|
||||||
|
inc(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
println("checking")
|
||||||
|
|
||||||
|
`0si`
|
||||||
|
while (`lilc` < ) {
|
||||||
|
`li1+sj`
|
||||||
|
|
||||||
|
while(`ljlc` <){
|
||||||
|
px[`li`] load set x1 py[`li`] load set y1
|
||||||
|
px[`lj`] load set x2 py[`lj`] load set y2
|
||||||
|
|
||||||
|
|
||||||
|
i8(10) putc
|
||||||
|
printnum(get x1) ',' putc printnum(get y1) i8(10) putc
|
||||||
|
printnum(get x2) ',' putc printnum(get y2) i8(10) putc
|
||||||
|
|
||||||
|
if (check_line(get x1, get x2, get y1, get vlinel, get vlineh, get vlinep, get vlinec)
|
||||||
|
check_line(get x1, get x2, get y2, get vlinel, get vlineh, get vlinep, get vlinec) &
|
||||||
|
check_line(get y1, get y2, get x1, get hlinel, get hlineh, get hlinep, get hlinec) &
|
||||||
|
check_line(get y1, get y2, get x2, get hlinel, get hlineh, get hlinep, get hlinec) & ) {
|
||||||
|
|
||||||
|
|
||||||
|
println("okay")
|
||||||
|
|
||||||
|
if (abs(get x1 get x2 -) `1+` as u64 abs(get y1 get y2 -) `1+` as u64 * `lo` > ) {
|
||||||
|
println("max")
|
||||||
|
abs(get x1 get x2 -) `1+` as u64 abs(get y1 get y2 -) `1+` as u64 * `so`
|
||||||
|
|
||||||
|
#if (`lo` u64(25) == ) {exit(2)}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
inc(j)
|
||||||
|
}
|
||||||
|
inc(i)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
println("answer:")
|
||||||
|
printnum64(get o)
|
||||||
|
|
||||||
|
exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
_start
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user