diff --git a/src/plasl/2025/day3/part1.psl b/src/plasl/2025/day3/part1.psl new file mode 100644 index 0000000..9b2ef25 --- /dev/null +++ b/src/plasl/2025/day3/part1.psl @@ -0,0 +1,152 @@ + +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("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+ i8(10) store + + u64(0) `so` + 0 set i + + while (get i get size < ) { + buffer[`li`] load `sf` + inc(i) + buffer[`li`] load `ss` + inc(i) + + while (buffer[`li`] load `dsc` i8(10) != ) { + + # if second larger, first=second, second=cur + if (`lslf`>) { + `lssflcss` + + # set second as char if it's smaller + } else if (`lcls`>) { + `lcss` + } + + inc(i) + + } + + # past newline + inc(i) + + putc(`lf`) putc(`ls`) putc(i8(10)) + + `lf` as i32 `48-10*` + `ls` as i32 `48-` + `+` as u64 + `lo+so` + + } + + + println("answer:") + `lo` printnum64 i8(10) putc + exit(0) +} + +void main() { + _start +} diff --git a/src/plasl/2025/day3/part2.psl b/src/plasl/2025/day3/part2.psl new file mode 100644 index 0000000..c2bb055 --- /dev/null +++ b/src/plasl/2025/day3/part2.psl @@ -0,0 +1,198 @@ + +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("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+ i8(10) store + + u64(0) `so` + 0 set i + + while (get i get size < ) { + buffer[`li`] load `sb` + inc(i) + buffer[`li`] load `sa` + inc(i) + buffer[`li`] load `s0` + inc(i) + buffer[`li`] load `s9` + inc(i) + buffer[`li`] load `s8` + inc(i) + buffer[`li`] load `s7` + inc(i) + buffer[`li`] load `s6` + inc(i) + buffer[`li`] load `s5` + inc(i) + buffer[`li`] load `s4` + inc(i) + buffer[`li`] load `s3` + inc(i) + buffer[`li`] load `s2` + inc(i) + buffer[`li`] load `s1` + inc(i) + + while (buffer[`li`] load `dsc` i8(10) != ) { + + if (`lbla` <) { + `lasb l0sa l9s0 l8s9 l7s8 l6s7 l5s6 l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`lal0` <) { + `l0sa l9s0 l8s9 l7s8 l6s7 l5s6 l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`l0l9` <) { + `l9s0 l8s9 l7s8 l6s7 l5s6 l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`l9l8` <) { + `l8s9 l7s8 l6s7 l5s6 l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`l8l7` <) { + `l7s8 l6s7 l5s6 l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`l7l6` <) { + `l6s7 l5s6 l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`l6l5` <) { + `l5s6 l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`l5l4` <) { + `l4s5 l3s4 l2s3 l1s2 lcs1` + } else if (`l4l3` <) { + `l3s4 l2s3 l1s2 lcs1` + } else if (`l3l2` <) { + `l2s3 l1s2 lcs1` + } else if (`l2l1` <) { + `l1s2 lcs1` + } else if (`l1lc` <) { + `lcs1` + } + + inc(i) + + } + + # past newline + inc(i) + + putc(`lb`) putc(`la`) putc(`l0`) putc(`l9`) putc(`l8`) putc(`l7`) putc(`l6`) putc(`l5`) putc(`l4`) putc(`l3`) putc(`l2`) putc(`l1`) i8(10) putc + + `lb` as u64 u64(48)-u64(10)* + `la` as u64 u64(48)-+u64(10)* + `l0` as u64 u64(48)-+u64(10)* + `l9` as u64 u64(48)-+u64(10)* + `l8` as u64 u64(48)-+u64(10)* + `l7` as u64 u64(48)-+u64(10)* + `l6` as u64 u64(48)-+u64(10)* + `l5` as u64 u64(48)-+u64(10)* + `l4` as u64 u64(48)-+u64(10)* + `l3` as u64 u64(48)-+u64(10)* + `l2` as u64 u64(48)-+u64(10)* + `l1` as u64 u64(48)-+ + `lo+so` + + } + + + println("answer:") + `lo` printnum64 i8(10) putc + exit(0) +} + +void main() { + _start +}