Browse Source

Add remaining days

master
mid-kid 4 years ago
parent
commit
d64c2a654d
  1. 145
      d11.lua
  2. 53
      d12.lua
  3. 74
      d18.lua
  4. 81
      d18_input.txt
  5. 125
      d20_input.txt
  6. 1
      d21_input.txt
  7. 71
      d22.lua
  8. 1
      d22_assistance.txt
  9. 100
      d22_input.txt
  10. 82
      d24.lua
  11. 5
      d24_input.txt
  12. 5
      test.txt

145
d11.lua

@ -0,0 +1,145 @@
function get_param(state, arg)
local param_mode = state.mem[state.pos] // (10 ^ (arg + 1)) % 10
if #state.mem < state.pos + arg then
print(string.format("Error: Opcode too short at end of memory: %d", state.pos))
os.exit(false)
end
local arg = state.mem[state.pos + arg]
if param_mode == 0 then
arg = arg + 1
elseif param_mode == 2 then
arg = arg + state.relbase
end
return arg
end
function read_mem(state, arg)
local param_mode = state.mem[state.pos] // (10 ^ (arg + 1)) % 10
local arg = get_param(state, arg)
if param_mode == 1 then
return arg
end
arg = state.mem[arg]
if not arg then
return 0
end
return arg
end
function write_mem(state, arg, val)
local param_mode = state.mem[state.pos] // (10 ^ (arg + 1)) % 10
local arg = get_param(state, arg)
if param_mode == 1 then
print(string.format("Error: Invalid inmediate write: %d", arg))
end
state.mem[arg] = val
end
function interpret(state)
if not state.mem then
state.mem = state
end
if not state.pos then
state.pos = 1
state.relbase = 1
end
if not state.input then
state.input = input_stdin
end
if not state.output then
state.output = output_stdout
end
while true do
if #state.mem < state.pos then
print(string.format("Instruction pointer ran off of memory"))
os.exit(false)
end
local opcode = state.mem[state.pos] % 100
local instr_size = 1
if opcode == 1 then
write_mem(state, 3, read_mem(state, 1) + read_mem(state, 2))
instr_size = 4
elseif opcode == 2 then
write_mem(state, 3, read_mem(state, 1) * read_mem(state, 2))
instr_size = 4
elseif opcode == 3 then
local val = state.input()
if not val then return true end
write_mem(state, 1, val)
instr_size = 2
elseif opcode == 4 then
state.output(read_mem(state, 1))
instr_size = 2
elseif opcode == 5 then
instr_size = 3
if read_mem(state, 1) ~= 0 then
state.pos = read_mem(state, 2) + 1
instr_size = 0
end
elseif opcode == 6 then
instr_size = 3
if read_mem(state, 1) == 0 then
state.pos = read_mem(state, 2) + 1
instr_size = 0
end
elseif opcode == 7 then
write_mem(state, 3, read_mem(state, 1) < read_mem(state, 2) and 1 or 0)
instr_size = 4
elseif opcode == 8 then
write_mem(state, 3, read_mem(state, 1) == read_mem(state, 2) and 1 or 0)
instr_size = 4
elseif opcode == 9 then
state.relbase = state.relbase + read_mem(state, 1)
instr_size = 2
elseif opcode == 99 then
return false
else
print(string.format("Error: Invalid opcode %d at %d", opcode, state.pos - 1))
os.exit(false)
end
state.pos = state.pos + instr_size
end
end
function input_stdin()
io.stdout:write("> ")
return io.stdin:read("n")
end
function output_stdout(val)
io.stdout:write(val)
io.stdout:write("\n")
end
function input_array(array)
function inner()
return table.remove(array, 1)
end
return inner
end
function output_array(array)
function inner(val)
table.insert(array, val)
end
return inner
end
file = io.open(arg[1])
program = {}
for num in string.gmatch(file:read(), "(-?%d+),?") do
table.insert(program, tonumber(num))
end
file:close()
--interpret(program)
robot_input = {}
robot_output = {}
while interpret({mem=program, input=input_array(robot_input), output=output_array(robot_output)}) do
end

53
d12.lua

@ -0,0 +1,53 @@
moons = {}
for line in io.lines(arg[1]) do
x, y, z = line:match("<x=(-?%d+), +y=(-?%d+), +z=(-?%d+)>")
table.insert(moons, {pos={x=tonumber(x), y=tonumber(y), z=tonumber(z)}, vel={x=0, y=0, z=0}})
end
function update_vel(moon)
for _, omoon in ipairs(moons) do
for _, axis in ipairs({"x", "y", "z"}) do
if omoon.pos[axis] > moon.pos[axis] then
moon.vel[axis] = moon.vel[axis] + 1
end
if omoon.pos[axis] < moon.pos[axis] then
moon.vel[axis] = moon.vel[axis] - 1
end
end
end
end
function update_pos(moon)
moon.pos.x = moon.pos.x + moon.vel.x
moon.pos.y = moon.pos.y + moon.vel.y
moon.pos.z = moon.pos.z + moon.vel.z
end
print("After 0 steps:")
for _, moon in ipairs(moons) do
print(string.format("pos=<x=%d, y=%d, z=%d>, vel=<x=%d, y=%d, z=%d>", moon.pos.x, moon.pos.y, moon.pos.z, moon.vel.x, moon.vel.y, moon.vel.z))
end
print()
for i = 1, 10 do
for _, moon in ipairs(moons) do
update_vel(moon)
end
for _, moon in ipairs(moons) do
update_pos(moon)
end
print(string.format("After %d steps:", i))
for _, moon in ipairs(moons) do
print(string.format("pos=<x=%d, y=%d, z=%d>, vel=<x=%d, y=%d, z=%d>", moon.pos.x, moon.pos.y, moon.pos.z, moon.vel.x, moon.vel.y, moon.vel.z))
end
print()
end
energy = 0
for _, moon in ipairs(moons) do
pot = math.abs(moon.pos.x) + math.abs(moon.pos.y) + math.abs(moon.pos.z)
kin = math.abs(moon.vel.x) + math.abs(moon.pos.y) + math.abs(moon.pos.z)
energy = energy + pot * kin
end
print("Energy:", energy)

74
d18.lua

@ -0,0 +1,74 @@
width = nil
map = {}
for line in io.lines(arg[1]) do
if not width then
width = #line
end
for char in line:gmatch(".") do
table.insert(map, char)
end
end
function reachable_keys(map, pos_y, pos_x, keys, dist)
local cell = map[width * pos_y + pos_x]
if cell == "@" then
cell = "."
end
if cell == "." then
map[width * pos_y + pos_x] = "#"
reachable_keys(map, pos_y + 1, pos_x, keys, dist + 1)
reachable_keys(map, pos_y - 1, pos_x, keys, dist + 1)
reachable_keys(map, pos_y, pos_x + 1, keys, dist + 1)
reachable_keys(map, pos_y, pos_x - 1, keys, dist + 1)
elseif string.byte(cell) >= 97 and string.byte(cell) <= 122 then
table.insert(keys, {key=cell, y=pos_y, x=pos_x, dist=dist})
end
return keys
end
function find_paths(map, pos_y, pos_x)
local keys = reachable_keys({table.unpack(map)}, pos_y, pos_x, {}, 0)
local paths = {}
for _, key in ipairs(keys) do
--print(key.key, key.dist)
local open_map = {table.unpack(map)}
open_map[width * pos_y + pos_x] = "."
open_map[width * key.y + key.x] = "@"
for i, x in ipairs(open_map) do
if x:lower() == key.key then
open_map[i] = "."
break
end
end
local path = find_paths(open_map, key.y, key.x)
if #path == 0 then
table.insert(paths, {path={key.key}, dist=key.dist})
else
for _, p in ipairs(path) do
table.insert(p.path, key.key)
p.dist = p.dist + key.dist
table.insert(paths, p)
end
end
end
return paths
end
pos_y = nil
pos_x = nil
for i, x in ipairs(map) do
if x == "@" then
pos_y = i // width
pos_x = i % width
break
end
end
paths = find_paths(map, pos_y, pos_x)
smallest = nil
for _, path in ipairs(paths) do
if not smallest or smallest.dist > path.dist then
smallest = path
end
end
print(table.concat(smallest.path, ","), smallest.dist)

81
d18_input.txt

@ -0,0 +1,81 @@
#################################################################################
#...#.........P...................#.....#.........#.......#.........#...........#
#.###.#############.#.###########.#.#.###.#########.###.###.#######.#.###########
#.#...#.#...V.....#.#..t..#.......#.#..a#...........#.#..c..#...#.#.#...........#
#.#.###.#.#######.#####.#.#####.#######.#.###########.#######.#.#.#.###########.#
#...#...#...#.#...#.J.#.#.....#.........#.......#.......#.....#.#.#.......#...#.#
#Z###.#####.#.#.###.#.###.###.#################.#.###.#.#.#####.#.#######.#.#.#.#
#.....#...#.#.......#...#...#.#...#.....#...#.#.#.#...#.#...#.....#.......#.#.#.#
###.###.#.#.###########.###.#.#.#.#.###.#.#.#.#.#.#.###.###.#######.#######.#.#.#
#.#.#...#..y#.........#...#.#...#...#...#.#...#.#.#.#.......#.......#.......#...#
#.#.#.#######.#######.###.#######.###.###.###.#.###.#######.#.#######.#########.#
#.#.#..q........#.....#.#...#.E.#...#...#.#...#...#.....#.#.#.#...........#...#.#
#.#.#############.#####.###.#.#.#######.#.###.###.#.###.#.#.#.#####.#####.#.#.#.#
#.#...F.......#...#...#.......#.........#...#.#...#.#...#.#.#.....#.#.....#.#...#
#.#########.###.###.#S###################.#I###.#####.###.#.#####.#.#.#########.#
#...#...#...#...#...#....u......#.#.....#.#...#.#...#.#...#.....#.#.#.#.......#.#
#.###.#.#.###.###.#############.#.#.###.#####.#.#.#.#.#.#######.#.#.#.#.#####.#.#
#.#...#.#.#.#.#s..#...#hG.#...#.#.#...#.#.....#...#...#.#.......#.#.#...#...#.#.#
#.#.###.#.#.#O#.###.#.#.#.#.#.#.#.#.###.#.###.#########.#.#######.###.###.###.#.#
#m..#.#...#.#.#.#...#...#...#g#.#.#.#...#.#.#.#.........#.#.#...#...#.....#...#.#
#.###.#####.#.#.#H###########.#.#.#.#.###.#.#.###.#.#####.#.#.#.#.#.#.#####.###.#
#.#.........#...#.....#...#...#.#...#...#.#...#...#.#...#.#.#.#.#.#.#.#..w#.#.#.#
#.#.#####.#.#############.#.###U###.###.#.#.###.###.#.#.#.#.###.###.#.#.#.#.#.#.#
#.#.....#.#.#.....#.......#.#.....#.#...#.#.....#...#.#.#.#...#...#.#.#.#...#...#
#.#######.#.###.#.#####.###.#####.###.#.#.#######.###.#.#.#.#####.#.###.#####.###
#.#.......#.....#.....#...#.#...#b#...#.#.#.#.....#...#.....#.....#...#.#.....#.#
#.#.#################.#.#.#.#.#.#.#.###.#.#.#.#####.#########.#######.#.#.#####.#
#.#.#.......#.......#.#.#.#.B.#...#.#.#.#.#.....#...#.....#...#.......#.#...#...#
#.#.#.#######.###.###.#.#.#########.#.#.#.#######.###.#.###.#####.#.###N###.#.###
#.#.#...#.....#...#...#.#...........#.#.#.......#.#...#.#...#...#.#.#...#...#...#
#.#.#.#.#.#####.###.###.###########.#.#.#.#####.#.#.###.#.###.#.###.#.###.###.#.#
#...#.#.#.#...#.....#.#.#...#.......#...#.#..r#...#.#...#.....#.....#.#.#...#.#.#
#######.#.###.#######.#.###.#.#######.###.###.#######.#.#############.#.###.#.#.#
#.......#...#.......#.#...#.#.#.....#.#.#.....#.......#.......#.......#...#.#.#.#
###.###.###.#.#####.#.###.#.#.###.#.#.#.#####.#.#.###########.###.#####.#.#.###.#
#...#...#...#...#.#.#.......#...#.#.#.#.#.#...#.#...#...#...#...#.#.....#.#...#.#
#D###.###.###.#.#.#.###########.#.###.#.#.#.###.###.#.#.#.#.###.#.#.###.#####.#.#
#...#...#.#...#.#.#...........#.#.#...#.#...#...#...#.#...#...#...#.#.#.......#.#
#.#.#####.#####.#.###########.#.#.#.###.#.#######.###.#######.#####.#.#########.#
#.#.............#...............#.................#.........#.................M.#
#######################################.@.#######################################
#.#...#.......#...............................#.........#.........#..d#...#.....#
#.#.#.#.#####.#.#######################.###.#.#.#######.#.###.###.###.#.#.#.#.#K#
#...#...#...#.#.#...#.................#.#...#.#.#.#.....#...#.#.#.....#.#...#.#.#
#.#########.#.#.#.#.#.###############.#.#.###.#.#.#.#########.#.#####.#.#####.###
#.....#...#.#.#.#.#.#.#...#.........#...#.#...#.#.#.......#...#.#.....#.....#...#
#####.#.#.#.#.#.#.#.#.#.#.#.#####.#####.#.#.###.#.#######.#.###.#.#########.###.#
#...#.#.#...#.....#.#.#.#.#...#...#...#.#.#.#...#...........#.....#.......#.#...#
#.#.#.#.###.#########.#.#.###.#####.#.#.#.#.###.###.###########.###.###.###.#.#.#
#.#.#...#.W...#.......#.#...#.......#.#.#.#...#...#.#...#.#...#.#...#l#.#...#.#.#
#.###.#########.#######.###.#.#######.#.#.###.###.#.#.#.#.#.#.###.###.#.#.###.#.#
#.....#.........#...#...#...#.......#...#.#...#...#...#...#.#.#.......#.#...#.#.#
#.#####.#######.#.#.#.###.###.#####.#####.###.#.#####.#####.#.#.#######.###.#.###
#.#...#.#.....#.#.#...#...#...#...#.....#...#.R.#...#.#.....#.....#...#...#x#...#
#.#.#.#.###.###.#.#####.#######.#.#######.#.#####.#.###.###########.#.#.###.###.#
#...#.#...#...#.#.#...#...#...#.#.#.....#.#.#.....#.#...#.#.........#.#.......#.#
#####.###.###.#.#.###.###.#.#.#.#.#.###.#.#.#.#####.#.###.#.#########.#.#######.#
#...#...#...#...#...#.......#...#.#...#.#.#...#.#...#.....#.#.......#.#.#.......#
###.###.###.###.###.#############.###.#.#.#####.#.#######.#.#.#.#####Y###.#####.#
#...#.....#...#...#.......#.#...#.....#.#.#..i..#.......#.#.#.#.......#...#.#...#
#.###.#######.###.#######.#.#.#.#######.#.#.###.#####.###.#Q###.#######.###.#.###
#...#.#.......#..n#.#.....#...#...#.....#.#.#...#...#.#...#.#.#.#...#...#.#...#.#
#.#.#.#.###.#####.#.#######.#####.#.#####.#.#.###.###.#.###.#.#.#.#.#.###.#.###.#
#.#...#.#...#...#.....#...#.#...#...#...#...#...#.#...#...#..o#...#.#.#.......#.#
#.#####.#####.#.#######.#.#.#.#.#####.#.#######.#.#.###.###########.#.#######.#.#
#.....#...#...#.#.......#.#.#.#.....#.#.#.....#.#.#.....#.........#.#.#...#.....#
#####L###.#.###.#.#######.#.###.###.###.###.#.#.#.#######.#.#####.#.#.#.#.#######
#...#.#...#.#...#...#...#.#...#.#.......#...#.#...#.....#.#.....#.#.#.#.#.......#
#.#.#.#.###.#.#.###.#.#.#.###.#.#######.#.#######.#.#.###.#####.###.#.#.#######.#
#.#.#.#.....#.#.#...#.#.....#.#.......#.#.......#...#.#...#..j..#..v#.........#.#
#.#.#.#######.#.#.###.#.#####.###.###.###.#####.###.###.###.###.#.###.#########.#
#.#.#.#...#...#.#...#.#.#...#...#...#...#...#.#.#...#...#.#.#...#.#.#.#.........#
###.#.#.#.#.#######.#.###.#.###.#####.#.###.#.#.#.###.###.#.#####.#.#.#.#######.#
#...#...#.#.........#.....#...#.....#f#.#.....#.....#e..#.#.......#.#.#.#.#...#.#
#.#######.#################.#.#####.###.#.#############A#.#########.#.#.#.#.#.#.#
#...#.....#.....#...#.....#.#.....#.....#...#...#.....#...#...#.......#.#.#.#..z#
#.#.#.#####.###.###.#.###C#.###########.###.#.#T#.#.#####.#.###.#######.#.#.#####
#.#.#.X.#k..#.#...#...#...#.....#.....#.#...#.#...#.......#.....#....p..#...#...#
#.#.###.###.#.###.#####.#.#####.#.#.###.#.###.###################.#######.###.#.#
#.#.........#...........#.....#...#.....#...#.....................#...........#.#
#################################################################################

125
d20_input.txt

@ -0,0 +1,125 @@
Q I B S J P J
I P B L M Q H
###################################.###########.#####.###.#####.#####.###.#######################################
#.#...#.........#.#...#.#...#.....#...#.#.#.#.#...#.....#.......#.....#.........#...#.........#.#.....#...#.....#
#.#.###.###.###.#.###.#.###.#.#.#.#.###.#.#.#.#.#######.#.#.#.#.#.#.###.#.#####.#.#.#.#########.#.#####.###.###.#
#.........#.#.................#.#...#.....#.#.#.#...#...#.#.#.#.#.#...#.#...#.....#.#.............#.....#...#.#.#
###############.###.#.###.###.###.###.#####.#.#.#.#####.#####.#.#.#########.#########.###.#####.#####.#.#.#.#.###
#.............#.#...#.#.....#.#.........#.#...#.....#.......#.#.#.......#.......#...#.#...#...#.#.#...#...#.#.#.#
#########.###.#######.#.#.#######.#####.#.#.#.#.#######.###.###.#####.#.#.###.###.###.#####.#####.#.###.#####.#.#
#.........#.........#.#.#.#...#...#.....#...#.#.#...#.#...#.#.#.#...#.#.#.#.#.#...#.#...#...#.......#.#.#...#.#.#
###############.###.#######.#########.#.#.###.#.###.#.#.###.#.#.#.#.###.#.#.#####.#.#.###.###.#######.#####.#.#.#
#.#...#.#.#.....#.......#.....#.#...#.#.#.#.......#.#.....#.#...#.#.....#...#.#.#.#...#.#.....#.#.#.......#.#.#.#
#.#.###.#.#.#########.#######.#.#.###.###.###.#.#.#.###.###.###.#.###.###.#.#.#.#.#.###.#.#.#.#.#.#.#######.#.#.#
#...........#.........#.#.#...........#.....#.#.#.#.......#.#...#.#.#.#...#...............#.#.#.........#.......#
#######.#########.###.#.#.#######.#######.###.#.#.###.#.#######.#.#.###.#######.#######.#######.#########.#####.#
#.#...#.#...#.#.#.#.........#...#.......#...#.#.#.#.#.#...#.#...#.....#...#.....#...#.#.#...#.#.#.#.#.#.......#.#
#.#.#######.#.#.#####.###.#.###.#.#####.#.#####.#.#.#.#.###.#.#.#.###.#####.###.#.#.#.###.###.#.#.#.#.###.#.#####
#.#.......#.#.........#...#.........#.#.#.#.#...#...#.#...#...#.#.#...#.....#.#...#.#.#...#...#.......#.#.#.#.#.#
#.#.#.#.###.###.#.#.#.#####.#.#.#####.#.#.#.###########.#####.#.#.#######.###.#.#.###.###.#.###.#######.#.###.#.#
#.#.#.#...#.#.#.#.#.#.#.#...#.#.#.......#.#.#.#.#.#.#...#.....#.#...#...#.....#.#.#.#.....#.#...........#...#...#
#.#####.###.#.#########.#.###.#######.#.#.#.#.#.#.#.###.###.###.###.#.#####.#####.#.#####.#.###.###.###.#.###.#.#
#.#.........#.#.#.#.#...#.#.#.....#.#.#.#...#...#.......#...#.....#...#.#.......#.#.#.#.....#.....#...#.#.....#.#
#.#####.#####.#.#.#.#.#####.#######.###.#.#.#.#.###.###.###.###.###.###.#.#########.#.###.#####.#.#######.#######
#.#...#.#.#.#...#.....#.#.#.#.#.#.#.#.#.#.#...#.#.....#.#.#.#.....#.....#...#.........#.#.#.#.#.#.#.#.#...#...#.#
#.#.###.#.#.#.#######.#.#.#.#.#.#.#.#.#.###.###.#.#####.#.#####.#######.###.#.#.#.#####.#.#.#.#.###.#.###.#.#.#.#
#.#...........#...#.#.....#.#.#.........#...#...#.....#.#...#.#...#.....#.....#.#.#.#...#...#.....#...#.....#...#
#.#.###.#########.#.#.#####.#.###.#.###.###.#.#####.#####.###.#.#.#.#.###.#####.###.###.#.###.#####.#####.#######
#...#.#.....#.#...#.#.#.....#.#.#.#.#.....#.#...#.......#.......#.#.#...#.....#.#.........#.#.#.#.....#.#...#.#.#
###.#.#######.#.###.#.#####.#.#.#######.#.###.###.#.#####.#########.###.#.#########.###.###.#.#.#.#####.#.###.#.#
#.#.#.......#.....#.#...#.#.....#.#.....#.#...#.#.#.#.......#...#.#...#.#.#.#.....#.#.#...#.#.......#.......#.#.#
#.#.#.#######.###.#.#.###.#.#####.###.#.#####.#.###.#.#####.#.#.#.#.#.###.#.###.#####.###.#.#.###.###.#.#####.#.#
#...#.#.#...#...#.#...#...#.#.#.......#...#.....#...#...#.....#...#.#.#.............#.#.#.#...#.#.#.#.#.....#...#
###.#.#.###.#####.#.###.###.#.#########.#######.#.#######.#####.###.#########.#######.#.#.#.#.#.###.###.#######.#
#.......#.....#.#.#...#.#...#.# J Q E P W J M #.....#...#.#.#...#.....#.....#
###.#######.#.#.#.#.###.###.#.# M I A Q C K Q ###.###.#####.#.#.###.#####.###
#...#.#.#...#.#.#.............# #...#.........#.#.............#
###.#.#.###.###.###.#######.#.# #.#.#.#####.#####.###.###.#.###
SF........#.......#.#...#.#...#.# YL..#...#...#.#...#...#.#.#.#.#..WC
#.###.#########.#.###.#.#.##### #.###.#.#.#.#.#########.#.#.#.#
#.#.......#...#.....#...#.....# #.#...#.#...#.#.#.#.#.....#...#
#.#####.###.#.#.###.#.#######.# #.#.#.#.#####.#.#.#.#.#######.#
#.#...#.....#...#.......#......SL #.#.#.#.................#.#.#.#
#####.######################### #.#######################.#.###
#...................#...#...#.# #.#...................#.......#
###.#.###.#####.###.#.#.###.#.# #####.###.###.#######.#.#.#.#.#
YY..#.#.#.......#.#.....#...#....OB VN..#.#.#.#.#.......#.....#.#.#.#
#.#.#######.###.#.#####.#####.# #.#.#.#.#####.###.###.#.#####.#
#.#...#.#...#.#.#.#.....#.#...# #.......#.....#.#.#.#.#.....#..HV
#.#.#.#.###.#.###.#####.#.###.# #####.#######.#.###.###########
#...#...#.#...#.....#.........# #...#.#.#.......#.....#.#...#.#
#####.###.###############.##### #.#.###.#####.#.###.#.#.#.###.#
#.#.#.#.#...#...#.#.#...#.#...# SF..#.#.......#.#.#.#.#.#...#...#
#.#.###.#.###.###.#.#.#.#####.# #.#.###.#########.#.#.#.#.#.#.#
#.#...........#.#.#...#........HI #.#.....#...#...#...#.#.#.#.#..EA
#.#.#####.#####.#.###.#####.#.# #######.#.###.#####.#.#.#.#.###
YL..#...#...#...#.#.#.....#.#.#.# #.#...#.............#...#...#.#
#.#.###.###.###.#.###.###.#.### #.#.#########.###.#.###.#.###.#
#.....#.................#.....# #.#.....#...#...#.#.#...#.#...#
#####################.#####.### #.#.#.#.#.###########.#.###.#.#
ZZ............#.......#...#.#...# #...#.#...#.#.#.#...#.#.#...#.#
#.#######.#.#.#####.#####.##### #.#.###.###.#.#.#.#########.#.#
#...#.#...#.....#.....#.....#.# EJ..#.#.....#.#...#.#.....#...#.#
#.###.#############.#####.###.# #########.#.###.#.###.###.#.#.#
#.......#.....#.#.#...#.....#..PD #.........................#.#..PD
#.###.###.#.###.#.###.#.#.###.# #######################.#.#####
MQ..#.#...#.#.#.#...#.....#.....# #...#.#.#.......#.....#.#.....#
###.#######.#.#.############### #.###.#.#.#####.#.###.#########
#.......#...#.......#.........# #.#.#...#...#.....#...#...#...#
#.#.###.#.#.#.###.#.#.#.###.#.# #.#.###.###.###.#.#.#####.###.#
OB..#.#.....#...#...#...#.#...#.# PT....#...#.....#.#.#.#...#...#..LH
#########.#.###.###.#########.# #.#.#.#.#.#####.###.#.#.#.###.#
#.....#.#.#.#...#.......#.#.#..GJ #.#...#.......#...#...#.......#
###.###.#################.#.### #.#####.#.#.###################
#...#.......#.#...#.#.#.......# #.#...#.#.#.#.#.........#.....#
#.#.#.#####.#.#.###.#.###.##### #.###.#######.#####.#.#.#.###.#
#.#.#.#...#.......#.#.#.#...#.# #...#...#.....#.#...#.#.#...#.#
#.#.#.#.#.###.#####.#.#.###.#.# #####.###.###.#.#.###.#.###.#.#
DU..#.#...#.#.....#.........#...# #.......#.#...#.#...#.#.#...#..BC
###.#####.#.#######.#.#####.### ###.#.#.#####.#.###.###.#.#.#.#
#.#.......#.........#..........LH YY....#.#...............#...#.#.#
#.#####.#.#.###.#####.#####.#.# #.#####.###.#.#################
#...#.#.#.#.#.#.#.#.......#.#.# #...#.....#.#.#...#.........#.#
#.#.#.#######.###.#.###.####### ###.#############.###.#####.#.#
GJ..#...#.#.......#...#.#.#...#.# HV..#.#.#.#...#.....#...#...#.#.#
###.###.#####.#.#####.#####.#.# #.###.#.###.#####.###.#.#.#.#.#
#...#.#...#...#.#.#.#...#.#...# #.......#.....#.#...#...#.#.#..EJ
#.###.###.#####.#.#.###.#.#.#.# #.###.#####.###.#.#.#####.#.#.#
#...........................#..BB #...#.............#.......#...#
###.###.#.#.#.#.#.#.###.#.###.# #.###.#######.#####.###.#.#.#.#
#...#...#.#.#.#.#.#...#.#...#.# #.#.#.#.#.#.....#.#...#.#.#.#.#
#.#.###.###########.#.#.###.### J B I D P F #.#.#.#.#.###.###.#.#####.#.###
#.#...#.....#.#.#...#.#.#.#.#.# H C P U A K #.#.....#.#...#.........#.#...#
#.#####.#.###.#.#####.#.#.###.#########.#####.#########.###.#######.#######.#############.#.#.#.#.###.###.#.#####
#...#...#.....#.......#...#.#.#.........#.....#.#.....#.#...#.....#.#...#...........#.....#...#.#...#.#...#.....#
#.#######.###.#########.###.#.#.###.###.###.###.#.###.#.#.###.#####.#.#.###.###.###.#####.###.#.#.###.###########
#.....#...#.#.....#.#.....#...#...#...#...#.....#...#...#.....#.#...#.#.#...#...#.#...#.....#.#.#.#.........#...#
#.#.###.###.###.###.#########.#.###.###.#####.###.#.#.###.###.#.###.#.#.#####.###.#.#####.#.#########.#####.#.###
#.#.#.......#...#.......#.......#.#...#.#.#.#.#.#.#.#.#...#.#.....#...#.#.#...#.#.#.....#.#.....#.#.......#.....#
###.#.###.#.#######.###.#.###.###.###.###.#.#.#.#.#.#.#.###.###.###.###.#.###.#.#.#.#.#.#.#.#####.#.#.###.#.#.###
#...#...#.#...#.....#.......#.#.....#...#.....#...#.#.#.#.........#.#.....#...#.#.#.#.#.#.#.....#...#...#.#.#.#.#
#.#.###########.###########.#####.#.###.#.#######.###.#.###.#######.#.#######.#.#.#.#.#######.#.###.###.#.#.#.#.#
#.#.........#...#.#.........#...#.#.....#.#...#.#...#.#.#.#.....#.#.#...#.#.......#.#...#.....#...#.#...#.#.#...#
###.#.#.###.#####.#.###.###.###.#.#.#####.#.#.#.#.#######.#.#.#.#.#####.#.#####.#####.#.###.#.#.###.#########.#.#
#...#.#.#.#.#.#.....#...#.#.#.....#.#.#.....#...#.....#.....#.#.....#...#...........#.#...#.#.#.#.#...#.......#.#
#.#.#####.###.#####.#.#.#.#######.###.###.#####.#.#############.#####.###.#.#.#.#####.#########.#.###.#########.#
#.#...#.#...........#.#.#.#.#...#.....#.....#.#.#.#.....#.#...#.#.......#.#.#.#.#...#.#...#.........#.......#...#
#.#.#.#.###########.#####.#.#.###.#.#########.#.#.#.#####.###.#.#.###.###.#######.#######.#.#.###.###.#####.###.#
#.#.#...#...#.........#.#.........#.....#.#.....#.#.#...#.#.#...#...#.#...................#.#.#...#...#.....#...#
###.###.#.#####.#.#.###.#####.###.#######.###.#.#.###.#.#.#.#.###.###.#.#.###.###.###.#######.###.###.###.#####.#
#.....#.#.......#.#.#...#.#...#.......#...#...#.#.....#.#...#.#...#.#.#.#...#.#.....#.....#.#.#.#...#.#.......#.#
#.#####.#####.#.#######.#.#.#.###.#####.#######.#######.#.#.#.###.#.#####.#######.###.#####.###.#####.###.#.#.#.#
#.#.#.#.#.#...#.#.......#...#...#.........#.#.....#.....#.#.....#...#...#...#.#.....#.#.#...#.....#.#.#...#.#.#.#
#.#.#.#.#.#.###.###.#.###.#############.###.###.###.#.###.#######.#####.#.###.#########.#.#####.###.#####.###.#.#
#.....#.#...#...#...#.......#.............#...#.#...#...#.#.....#.#.....#...#.#.#.#.#...#...#.#.#.#.#.#.#...#.#.#
#.###.#.#######.###.###.###.#####.###########.#.###.#.###.###.#.#.#####.#.#.#.#.#.#.###.#.###.#.#.#.#.#.#.###.###
#...#.#...#.#...#...#.#.#.#...#...#.......#.#.....#.#.#.......#.#.......#.#.#.#.#.....#.#...#.#.......#.....#...#
#.#########.#########.###.#.###.#.#.#.#.###.#.#.###.###.###.###.###.#.#####.#.#.#.#####.#.###.#.#######.#####.###
#.....#.#.....................#.#.#.#.#.#.....#.#.....#.#...#.....#.#...#.#.....#.#...#...#.#.......#.#...#.....#
#.#.###.#.###.###.###.#.#########.###.#.###.###.###.#.#######.#######.###.#####.#.#.###.###.#.###.###.#.###.#####
#.#.....#.#.....#.#.#.#.#.............#.#...#.....#.#...#...#.......#.#.........................#.....#.#.......#
#.#.#####.#.###.#.#.#.#.#######.#.#####.###.#.#.###.#.#.#.#.###.#####.#####.###.#.#.###.#####.###.#.#.#######.#.#
#.#.....#.#.#...#.#...#.#.......#.....#...#.#.#.#...#.#.#.#.......#.....#.....#.#.#.#.......#...#.#.#.....#...#.#
#######################################.#######.#.#.#####.###########.#######.###################################
P V P A J F H
A N T A K K I

1
d21_input.txt

File diff suppressed because one or more lines are too long

71
d22.lua

@ -0,0 +1,71 @@
bignum = require "_openssl.bignum"
function find(card, deck, times)
local revert = false
local increment = bignum.new(0)
local multiply = bignum.new(1)
for line in io.lines(arg[1]) do
if line:find("^deal into new stack$") then
revert = not revert
elseif line:find("^cut %-?%d+$") then
local val = tonumber(line:match("^cut (%-?%d+)$"))
if not revert then
increment = (increment - val) % deck
else
increment = (increment + val) % deck
end
elseif line:find("^deal with increment %d+$") then
local val = tonumber(line:match("^deal with increment (%d+)$"))
multiply = (multiply * val) % deck
increment = (increment * val) % deck
if revert then
increment = (increment + (val - 1)) % deck
end
end
end
print(card, multiply, increment, deck)
card = (card * multiply * times + increment * times) % deck
if revert then
card = deck - (card + 1)
end
return card
end
function revfind(card, deck, times)
local revert = false
local increment = bignum.new(0)
local multiply = bignum.new(1)
for line in io.lines(arg[1]) do
if line:find("^deal into new stack$") then
revert = not revert
elseif line:find("^cut %-?%d+$") then
local val = tonumber(line:match("^cut (%-?%d+)$"))
if not revert then
increment = (increment - val) % deck
else
increment = (increment + val) % deck
end
elseif line:find("^deal with increment %d+$") then
local val = tonumber(line:match("^deal with increment (%d+)$"))
multiply = (multiply * val) % deck
increment = (increment * val) % deck
if revert then
increment = (increment + (val - 1)) % deck
end
end
end
print(card, multiply, increment, deck)
card = (card * multiply * times + increment * times) % deck
if revert then
card = deck - (card + 1)
end
return card
end
print("Part 1:", find(2019, 10007, 1))
print("Part 2:", find(2020, 119315717514047, 101741582076661))
print("Part 1:", revfind(7744, 10007, 1))
print("Part 2:", revfind(2020, 119315717514047, 101741582076661))

1
d22_assistance.txt

@ -0,0 +1 @@
https://boards.4channel.org/g/thread/74086545#p74095430

100
d22_input.txt

@ -0,0 +1,100 @@
deal with increment 24
cut -9655
deal with increment 20
cut -3052
deal with increment 14
deal into new stack
deal with increment 12
cut 2041
deal into new stack
deal with increment 13
cut -5574
deal into new stack
deal with increment 52
cut 2735
deal with increment 14
deal into new stack
deal with increment 72
deal into new stack
deal with increment 11
cut -7008
deal with increment 7
cut -3920
deal into new stack
deal with increment 68
cut -7497
deal with increment 7
cut 8878
deal with increment 39
cut -3407
deal with increment 74
cut -3728
deal into new stack
cut 483
deal with increment 55
cut 8147
deal with increment 48
cut 5734
deal with increment 35
deal into new stack
deal with increment 53
deal into new stack
cut 9833
deal with increment 21
cut -1328
deal with increment 29
cut 469
deal with increment 34
deal into new stack
deal with increment 50
cut 8218
deal with increment 8
cut 1546
deal with increment 27
cut 3699
deal with increment 44
cut 1167
deal into new stack
cut -9744
deal with increment 71
cut -6111
deal with increment 19
cut 2592
deal with increment 17
cut 3257
deal with increment 11
cut 4618
deal with increment 64
deal into new stack
cut -1513
deal into new stack
cut -2976
deal with increment 58
cut 2744
deal with increment 4
cut 6408
deal with increment 66
cut 5182
deal with increment 6
cut -1767
deal with increment 12
cut -7805
deal with increment 45
cut -4126
deal with increment 52
cut 2112
deal with increment 35
cut 863
deal with increment 55
cut 3159
deal with increment 67
deal into new stack
deal with increment 65
cut -3194
deal with increment 69
cut 5695
deal with increment 7
cut -5035
deal with increment 30
cut -2282
deal with increment 70

82
d24.lua

@ -0,0 +1,82 @@
field = {}
for line in io.lines(arg[1]) do
row = {}
for char in line:gmatch(".") do
table.insert(row, char)
end
table.insert(field, row)
end
function hash(field)
local res = 0
for y, row in ipairs(field) do
for x, cell in ipairs(row) do
local data = 0
if cell == "#" then
data = 2 ^ ((y - 1) * #row + (x - 1))
end
res = res + data
end
end
return res
end
function next_field(field)
local new = {}
for y, row in ipairs(field) do
local new_row = {}
for x, cell in ipairs(row) do
local adjacent = 0
if field[y - 1] and field[y - 1][x] == "#" then
adjacent = adjacent + 1
end
if field[y + 1] and field[y + 1][x] == "#" then
adjacent = adjacent + 1
end
if field[y][x - 1] == "#" then
adjacent = adjacent + 1
end
if field[y][x + 1] == "#" then
adjacent = adjacent + 1
end
if cell == "#" then
if adjacent ~= 1 then
cell = "."
end
else
if adjacent == 1 or adjacent == 2 then
cell = "#"
end
end
table.insert(new_row, cell)
end
table.insert(new, new_row)
end
return new
end
field_orig = {table.unpack(field)}
hashes = {}
while true do
cur_hash = hash(field)
if hashes[cur_hash] then
break
end
hashes[cur_hash] = true
field = next_field(field)
end
for _, row in ipairs(field) do
for _, cell in ipairs(row) do
io.stdout:write(cell)
end
io.stdout:write("\n")
end
print("Part 1:", hash(field))
field = field_orig

5
d24_input.txt

@ -0,0 +1,5 @@
#..##
##...
.#.#.
#####
####.

5
test.txt

@ -0,0 +1,5 @@
....#
#..#.
#..##
..#..
#....
Loading…
Cancel
Save