From ad0992ac2fb68742846025d93a6940039b9bdce6 Mon Sep 17 00:00:00 2001 From: plasmaofthedawn Date: Thu, 4 Dec 2025 12:36:50 -0500 Subject: [PATCH] d2p2 plasl --- src/plasl/2025/day2/part2.psl | 196 ++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 src/plasl/2025/day2/part2.psl diff --git a/src/plasl/2025/day2/part2.psl b/src/plasl/2025/day2/part2.psl new file mode 100644 index 0000000..6006b57 --- /dev/null +++ b/src/plasl/2025/day2/part2.psl @@ -0,0 +1,196 @@ + +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-`} +} + +u64 pow10(i32) { + + if (dup 1 ==) {u64(10)} + else if (dup 2 ==) {u64(100)} + else if (dup 3 ==) {u64(1000)} + else if (dup 4 ==) {u64(10000)} + else if (dup 5 ==) {u64(100000)} + else if (dup 6 ==) {u64(1000000)} + else if (dup 7 ==) {u64(10000000)} + else if (dup 8 ==) {u64(100000000)} + else if (dup 9 ==) {u64(1000000000)} + else if (dup 10 ==) {u64(10000000000)} + else {u64(0)} + `rt` +} + + +u64 range(u64, u64, u64) { + set divisor set end set start + + get start get divisor + u64(1) - get divisor / set first + get end get divisor / set second + + u64(1) get second + get first - get second get first +* u64(2) / get divisor * + +} + +u64 range2(u64, u64, i32) { + `sl` set end set start + + if (`ll1` ==) {u64(0)} + else if (`ll2` ==) {range(get start, get end, u64(11))} + else if (`ll3` ==) {range(get start, get end, u64(111))} + else if (`ll4` ==) {range(get start, get end, u64(0101))} + else if (`ll5` ==) {range(get start, get end, u64(11111))} + else if (`ll6` ==) {range(get start, get end, u64(111111)) range(get start, get end, u64(010101)) range(get start, get end, u64(001001))+rev-} + else if (`ll7` ==) {range(get start, get end, u64(1111111))} + else if (`ll8` ==) {range(get start, get end, u64(00010001))} + else if (`ll9` ==) {range(get start, get end, u64(001001001))} + else if (`ll10` ==) {range(get start, get end, u64(1111111111)) + range(get start, get end, u64(0101010101)) + range(get start, get end, u64(0000100001))+rev-} + else if (`ll11` ==) {range(get start, get end, u64(11111111111))} + else { u64(0) print("aaa") } +} + +void _start() { + + open("example.txt", 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+ -1+ ',' store + + u64(0) set out + 0 set i + + while (get i get size <) { + 0 set startlen 0 set endlen + atol(get buffer get i+) set start + + while (get buffer get i+ load '-' !=) { + `li1+si` + get startlen 1+ set startlen + } + `li1+si` + + atol(get buffer get i+) set end + + while (get buffer get i+ load ',' !=) { + `li1+si` + get endlen 1+ set endlen + } + `li1+si` + + #printnum64(get start) '-' putc printnum64(get end) i8(10) putc + if (get endlen get startlen !=) { + range2(get start, pow10(get startlen) u64(1)-, get startlen) + range2(pow10(get startlen), get end, get endlen) + + + } else { + range2(get start, get end, get startlen) + } + #printnum64(dup) i8(10) putc + get out + set out + + } + + + println("answer:") + get out printnum64 i8(10) putc + exit(0) +} + +void main() { + _start +}