part 1 part 2 plasl (runner comes later)

This commit is contained in:
m
2025-12-01 14:32:29 -05:00
parent aecea3dde7
commit 69d5dabb05
2 changed files with 250 additions and 0 deletions

View File

@@ -0,0 +1,118 @@
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 putc(i8) {
array i8[1] `dstr` store
write(1, `lt`, u64(1))
}
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`
}
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
}
}
i32 main() {
println(" hello world")
open("input.txt", 0, 0) set file
print("filedescript:")
printnum(get file)
println(" ")
array i8[65535] set buffer
get buffer i8(48) store
read(get file, get buffer, u64(65535)) as i32 set size
print("size: ")
printnum(get size)
println(" ")
0 set out
50 set dial
0 set i
while (get i get size <) {
if (get buffer get i + load 'R' ==) {
1
} else {
-1
}
get i 1+ set i
atoi(get buffer get i+) *
if (dup 0 <) {
100+
}
get dial +
100 % set dial
if (get dial 0 ==) {
get out 1+ set out
}
while (get buffer get i+ load i8(10) !=) { `li1+si` }
`li1+si`
}
get out printnum
0
}

View File

@@ -0,0 +1,132 @@
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 putc(i8) {
array i8[1] `dstr` store
write(1, `lt`, u64(1))
}
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`
}
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
}
}
i32 abs(i32) {
if (dup 0 <) {`0r-`}
}
i32 main() {
println(" hello world")
open("input.txt", 0, 0) set file
print("filedescript:")
printnum(get file)
println(" ")
array i8[65535] set buffer
get buffer i8(48) store
read(get file, get buffer, u64(65535)) as i32 set size
print("size: ")
printnum(get size)
println(" ")
0 set out
50 set dial
0 set i
while (get i get size <) {
if (get buffer get i + load 'R' ==) {
1
} else {
-1
}
get i 1+ set i
atoi(get buffer get i+) *
100 divmod rev abs get out + set out
get dial +
if (dup 100 >=) {
get out 1+ set out
100-
} else if (dup 0 <) {
100+
if (get dial 0 !=) {
get out 1+ set out
}
} else if (dup 0 ==) {
get out 1+ set out
}
set dial
printnum(get dial)
print(", ")
printnum(get out)
println(" ")
while (get buffer get i+ load i8(10) !=) { `li1+si` }
`li1+si`
}
get out printnum
0
}