mirror of
https://git.plasmaofthedawn.com/adventofcode.git
synced 2026-01-26 15:38:33 -06:00
day 6 psl (i must have missed)
This commit is contained in:
210
src/plasl/2025/day6/part2.psl
Normal file
210
src/plasl/2025/day6/part2.psl
Normal file
@@ -0,0 +1,210 @@
|
||||
|
||||
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
|
||||
|
||||
u64(0) `so`
|
||||
|
||||
array ptr i8[10] set pointers
|
||||
|
||||
pointers[0] get buffer store
|
||||
1 set pointerlen
|
||||
|
||||
`0si`
|
||||
while (buffer[get i] load '*' != buffer[get i] load '+' != &) {
|
||||
if (buffer[`li`] load i8(10) ==) {
|
||||
pointers[get pointerlen] buffer[get i] 1+ store
|
||||
inc(pointerlen)
|
||||
}
|
||||
inc(i)
|
||||
}
|
||||
|
||||
dec(pointerlen)
|
||||
pointers[get pointerlen] load set ops
|
||||
|
||||
`0si`
|
||||
`0sj`
|
||||
|
||||
while (ops[`li`] load `dsc` i8(10) !=) {
|
||||
|
||||
if (`lc` '*' == ) {
|
||||
|
||||
println("*:")
|
||||
|
||||
u1(1) `sf`
|
||||
u64(1)
|
||||
while (`lf`) {
|
||||
`0sk`
|
||||
u64(0)
|
||||
while (`lk` get pointerlen < ) {
|
||||
|
||||
if (pointers[`lk`] load `lj`+ load `dsC` ' ' !=) {
|
||||
u64(10) * `lC` '0'- as u64 +
|
||||
}
|
||||
|
||||
`lC` putc ' ' putc
|
||||
|
||||
inc(k)
|
||||
}
|
||||
|
||||
inc(j)
|
||||
dup printnum64 i8(10) putc
|
||||
|
||||
if (dup u64(0) !=) {
|
||||
*
|
||||
} else {
|
||||
`t`u1(0)`sf`
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
`lo+so`
|
||||
|
||||
} else if (`lc` '+' == ) {
|
||||
|
||||
println("+:")
|
||||
|
||||
u1(1) `sf`
|
||||
u64(0)
|
||||
while (`lf`) {
|
||||
`0sk`
|
||||
u64(0)
|
||||
while (`lk` get pointerlen < ) {
|
||||
|
||||
if (pointers[`lk`] load `lj`+ load `dsC` '0' >) {
|
||||
u64(10) * `lC` '0'- as u64 +
|
||||
}
|
||||
|
||||
`lC` putc ' ' putc
|
||||
|
||||
inc(k)
|
||||
}
|
||||
|
||||
inc(j)
|
||||
dup printnum64 i8(10) putc
|
||||
|
||||
if (dup u64(0) !=) {
|
||||
+
|
||||
} else {
|
||||
`t`u1(0)`sf`
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
`lo+so`
|
||||
|
||||
}
|
||||
|
||||
inc(i)
|
||||
}
|
||||
|
||||
println("answer:")
|
||||
`lo` printnum64 i8(10) putc
|
||||
exit(0)
|
||||
}
|
||||
|
||||
void main() {
|
||||
_start
|
||||
}
|
||||
Reference in New Issue
Block a user