mirror of
https://git.plasmaofthedawn.com/adventofcode.git
synced 2025-12-24 02:27:34 -06:00
171 lines
3.3 KiB
PSL
171 lines
3.3 KiB
PSL
|
|
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.q", 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
|
|
|
|
`0so`
|
|
|
|
`100000` set trx `100000` set try
|
|
`100000` set brx `0` set bry
|
|
`0` set blx `0` set bly
|
|
`0` set tlx `100000` set tly
|
|
|
|
`0si`
|
|
while (`li1+` get size < ) {
|
|
atoi(buffer[`li`]) `sx`
|
|
while (buffer[`li`] load ',' !=) {inc(i)} inc(i)
|
|
|
|
atoi(buffer[`li`]) `sy`
|
|
while (buffer[`li`] load i8(10) !=) {inc(i)} inc(i)
|
|
|
|
`lxlyr` printnum ',' putc printnum i8(10) putc
|
|
|
|
# if less than topright, then
|
|
if (`lxly+` get trx get try + <=) {
|
|
`lxly` set try set trx
|
|
}
|
|
# if y - x > br
|
|
if (`lylx-` get bry get brx - >=) {
|
|
`lxly` set bry set brx
|
|
}
|
|
# if more than bottom left
|
|
if (`lxly+` get blx get bly+ >=) {
|
|
`lxly` set bly set blx
|
|
}
|
|
# if x - y > tl
|
|
if (`lxly-` get tlx get tly - >=) {
|
|
`lxly` set tly set tlx
|
|
}
|
|
|
|
}
|
|
|
|
print("tr: ")
|
|
printnum(get trx) putc(',') printnum(get try) putc(i8(10))
|
|
print("br: ")
|
|
printnum(get brx) putc(',') printnum(get bry) putc(i8(10))
|
|
print("bl: ")
|
|
printnum(get blx) putc(',') printnum(get bly) putc(i8(10))
|
|
print("tl: ")
|
|
printnum(get tlx) putc(',') printnum(get tly) putc(i8(10))
|
|
|
|
get blx get trx - `1+` as u64 get bly get try - `1+` as u64 * `s1`
|
|
get tlx get brx - `1+` as u64 get bry get tly - `1+` as u64 * `s2`
|
|
|
|
if (`l1l2`>) {
|
|
`l1`
|
|
} else {
|
|
`l2`
|
|
}
|
|
|
|
println("answer:")
|
|
printnum64
|
|
|
|
exit(0)
|
|
}
|
|
|
|
void main() {
|
|
_start
|
|
}
|