plasl day 3

This commit is contained in:
m
2025-12-04 17:48:33 -05:00
parent ad0992ac2f
commit 6f0c677069
2 changed files with 350 additions and 0 deletions

View File

@@ -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
}

View File

@@ -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
}