mirror of
https://github.com/plasmaofthedawn/adventofcode.git
synced 2025-08-22 01:22:02 -05:00
pladcl day8
This commit is contained in:
176
src/pladcl/2024/day8/part1.pdl
Normal file
176
src/pladcl/2024/day8/part1.pdl
Normal file
@@ -0,0 +1,176 @@
|
||||
# X: locations array
|
||||
# Y: locations list count
|
||||
# Z: antinodes
|
||||
|
||||
state start
|
||||
|
||||
letter_to_ind()
|
||||
`s.`
|
||||
|
||||
if `l.` != -1 then
|
||||
|
||||
`li` # store current position
|
||||
|
||||
`l.100*` # get offset into list
|
||||
`l.;Y` # read current list size
|
||||
`+` # get total offset
|
||||
|
||||
`:X` # store position into array
|
||||
|
||||
`l.;Y1+`
|
||||
`l.:Y` # increment list size
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
interrupt newline
|
||||
|
||||
# calc program width + height
|
||||
|
||||
if `lw` == 0 then
|
||||
`li1+sw`
|
||||
end
|
||||
`lh1+sh`
|
||||
end
|
||||
|
||||
interrupt program_end
|
||||
|
||||
`3600sc` # counter
|
||||
|
||||
`[starting]pst`
|
||||
|
||||
for '!' in 0 to 6200 step 100 do
|
||||
#`l!n10an`
|
||||
`l!s1`
|
||||
while `l1;X` != 0 do
|
||||
`l11+s2`
|
||||
while `l2;X` != 0 do
|
||||
`l1;X`
|
||||
`lw~`
|
||||
print_point()
|
||||
|
||||
`l1;Xlw~s<s>`
|
||||
|
||||
`l2;X`
|
||||
`lw~`
|
||||
print_point()
|
||||
|
||||
`l2;Xlw~s{s}`
|
||||
|
||||
`[: ]n`
|
||||
|
||||
add_antinodes()
|
||||
|
||||
`10an`
|
||||
`l21+s2`
|
||||
end
|
||||
# increment
|
||||
`l11+s1`
|
||||
end
|
||||
end
|
||||
|
||||
`0so`
|
||||
for '!' in 0 to `lwlh*` do
|
||||
if `l!;Z` == 1 then
|
||||
`lo1+so`
|
||||
`[#]n`
|
||||
end
|
||||
if `l!;Z` == 0 then
|
||||
`l!;Ian`
|
||||
end
|
||||
end
|
||||
|
||||
`lop`
|
||||
|
||||
end
|
||||
|
||||
# takes p1 in <, > and p2 in {, }
|
||||
function add_antinodes
|
||||
|
||||
|
||||
# dx and dy in (, )
|
||||
`l{l<-s(`
|
||||
`l}l>-s)`
|
||||
|
||||
|
||||
|
||||
# point one
|
||||
`l<l(-s3` # x
|
||||
`l>l)-s4` # y
|
||||
_add_antinode()
|
||||
|
||||
|
||||
`l{l(+s3` # x
|
||||
`l}l)+s4` # y
|
||||
_add_antinode()
|
||||
|
||||
end
|
||||
|
||||
function _add_antinode
|
||||
|
||||
# bounds check
|
||||
if `l3` < 0 then
|
||||
return -1
|
||||
end
|
||||
if `l4` < 0 then
|
||||
return -1
|
||||
end
|
||||
if `l3` >= `lw1-` then
|
||||
return -1
|
||||
end
|
||||
if `l4` >= `lh` then
|
||||
return -1
|
||||
end
|
||||
|
||||
`l4l3`
|
||||
print_point()
|
||||
|
||||
`1` # 1
|
||||
`l4lw*l3+` # index
|
||||
`:Z` # store
|
||||
|
||||
0
|
||||
|
||||
end
|
||||
|
||||
function print_point
|
||||
`[(]nn[, ]nn[)]n`
|
||||
end
|
||||
|
||||
|
||||
# '0' to '9' is 0-9
|
||||
# 48, offset -48
|
||||
# 'A' to 'Z' is 10-35
|
||||
# 65, offset -55
|
||||
# 'a' to 'z' is 36-61
|
||||
# 97, offset -61
|
||||
function letter_to_ind
|
||||
|
||||
# not valid
|
||||
if `ln` < '0' then
|
||||
return -1
|
||||
end
|
||||
|
||||
if `ln` <= '9' then
|
||||
return `ln48-`
|
||||
end
|
||||
|
||||
if `ln` < 'A' then
|
||||
return -1
|
||||
end
|
||||
|
||||
if `ln` <= 'Z' then
|
||||
return `ln55-`
|
||||
end
|
||||
|
||||
if `ln` < 'a' then
|
||||
return -1
|
||||
end
|
||||
|
||||
if `ln` <= 'z' then
|
||||
return `ln61-`
|
||||
end
|
||||
|
||||
-1
|
||||
|
||||
end
|
180
src/pladcl/2024/day8/part2.pdl
Normal file
180
src/pladcl/2024/day8/part2.pdl
Normal file
@@ -0,0 +1,180 @@
|
||||
# X: locations array
|
||||
# Y: locations list count
|
||||
# Z: antinodes
|
||||
|
||||
state start
|
||||
|
||||
letter_to_ind()
|
||||
`s.`
|
||||
|
||||
if `l.` != -1 then
|
||||
|
||||
`li` # store current position
|
||||
|
||||
`l.100*` # get offset into list
|
||||
`l.;Y` # read current list size
|
||||
`+` # get total offset
|
||||
|
||||
`:X` # store position into array
|
||||
|
||||
`l.;Y1+`
|
||||
`l.:Y` # increment list size
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
interrupt newline
|
||||
|
||||
# calc program width + height
|
||||
|
||||
if `lw` == 0 then
|
||||
`li1+sw`
|
||||
end
|
||||
`lh1+sh`
|
||||
end
|
||||
|
||||
interrupt program_end
|
||||
|
||||
`3600sc` # counter
|
||||
|
||||
`[starting]pst`
|
||||
|
||||
for '!' in 0 to 6200 step 100 do
|
||||
#`l!n10an`
|
||||
`l!s1`
|
||||
while `l1;X` != 0 do
|
||||
`l11+s2`
|
||||
while `l2;X` != 0 do
|
||||
`l1;X`
|
||||
`lw~`
|
||||
print_point()
|
||||
|
||||
`l1;Xlw~s<s>`
|
||||
|
||||
`l2;X`
|
||||
`lw~`
|
||||
print_point()
|
||||
|
||||
`l2;Xlw~s{s}`
|
||||
|
||||
`[: ]n`
|
||||
|
||||
add_antinodes()
|
||||
|
||||
`10an`
|
||||
`l21+s2`
|
||||
end
|
||||
# increment
|
||||
`l11+s1`
|
||||
end
|
||||
end
|
||||
|
||||
`0so`
|
||||
for '!' in 0 to `lwlh*` do
|
||||
if `l!;Z` == 1 then
|
||||
`lo1+so`
|
||||
`[#]n`
|
||||
end
|
||||
if `l!;Z` == 0 then
|
||||
`l!;Ian`
|
||||
end
|
||||
end
|
||||
|
||||
`lop`
|
||||
|
||||
end
|
||||
|
||||
# takes p1 in <, > and p2 in {, }
|
||||
function add_antinodes
|
||||
|
||||
|
||||
# dx and dy in (, )
|
||||
`l{l<-s(`
|
||||
`l}l>-s)`
|
||||
|
||||
|
||||
|
||||
# point one
|
||||
`l<s3` # x
|
||||
`l>s4` # y
|
||||
while _add_antinode() == 0 do
|
||||
`l3l(-s3`
|
||||
`l4l)-s4`
|
||||
end
|
||||
|
||||
`l{s3` # x
|
||||
`l}s4` # y
|
||||
while _add_antinode() == 0 do
|
||||
`l3l(+s3`
|
||||
`l4l)+s4`
|
||||
end
|
||||
end
|
||||
|
||||
function _add_antinode
|
||||
|
||||
# bounds check
|
||||
if `l3` < 0 then
|
||||
return -1
|
||||
end
|
||||
if `l4` < 0 then
|
||||
return -1
|
||||
end
|
||||
if `l3` >= `lw1-` then
|
||||
return -1
|
||||
end
|
||||
if `l4` >= `lh` then
|
||||
return -1
|
||||
end
|
||||
|
||||
`l4l3`
|
||||
print_point()
|
||||
|
||||
`1` # 1
|
||||
`l4lw*l3+` # index
|
||||
`:Z` # store
|
||||
|
||||
0
|
||||
|
||||
end
|
||||
|
||||
function print_point
|
||||
`[(]nn[, ]nn[)]n`
|
||||
end
|
||||
|
||||
|
||||
# '0' to '9' is 0-9
|
||||
# 48, offset -48
|
||||
# 'A' to 'Z' is 10-35
|
||||
# 65, offset -55
|
||||
# 'a' to 'z' is 36-61
|
||||
# 97, offset -61
|
||||
function letter_to_ind
|
||||
|
||||
# not valid
|
||||
if `ln` < '0' then
|
||||
return -1
|
||||
end
|
||||
|
||||
if `ln` <= '9' then
|
||||
return `ln48-`
|
||||
end
|
||||
|
||||
if `ln` < 'A' then
|
||||
return -1
|
||||
end
|
||||
|
||||
if `ln` <= 'Z' then
|
||||
return `ln55-`
|
||||
end
|
||||
|
||||
if `ln` < 'a' then
|
||||
return -1
|
||||
end
|
||||
|
||||
if `ln` <= 'z' then
|
||||
return `ln61-`
|
||||
end
|
||||
|
||||
-1
|
||||
|
||||
end
|
Reference in New Issue
Block a user