summaryrefslogtreecommitdiff
path: root/10
diff options
context:
space:
mode:
authorAlex Pickering <alex@cogarr.net>2025-02-07 12:49:48 -0600
committerAlex Pickering <alex@cogarr.net>2025-02-07 12:49:48 -0600
commit3555be54c2abb8d5ece008a60dbdfbde0ffbddd7 (patch)
tree278876284d07118ecdea5c48cb6453f3122887f0 /10
downloadadvent_of_code_2022-master.tar.gz
advent_of_code_2022-master.tar.bz2
advent_of_code_2022-master.zip
inital commitHEADmaster
Diffstat (limited to '10')
-rw-r--r--10/1.lua41
-rw-r--r--10/2.lua46
-rwxr-xr-x10/ext.lua62
-rw-r--r--10/input.txt137
-rw-r--r--10/sample.txt146
5 files changed, 432 insertions, 0 deletions
diff --git a/10/1.lua b/10/1.lua
new file mode 100644
index 0000000..b20d193
--- /dev/null
+++ b/10/1.lua
@@ -0,0 +1,41 @@
+require "ext"
+
+local cpu = {
+ r = {x = 1},
+ isa = {
+ addx = {
+ nargs = 1,
+ cycles = 2,
+ f = function(self,v)
+ self.r.x = self.r.x + tonumber(v)
+ end
+ },
+ noop = {
+ nargs = 0,
+ cycles = 1,
+ f = function(self) end
+ }
+ }
+}
+
+local strength_sum = 0
+local cycle = 1
+for line in io.lines() do
+ local parts = {}
+ for part in line:gmatch("(%S+)") do
+ table.insert(parts,part)
+ end
+ local insn = table.remove(parts,1)
+ local ins = cpu.isa[insn]
+ assertf(ins, "No instruction %s in %s",insn,line)
+ for i = cycle,cycle + ins.cycles - 1 do
+ if (i - 20) % 40 == 0 then
+ local strength = i * cpu.r.x
+ strength_sum = strength_sum + strength
+ break
+ end
+ end
+ cycle = cycle + ins.cycles
+ ins.f(cpu,table.unpack(parts))
+end
+print(strength_sum)
diff --git a/10/2.lua b/10/2.lua
new file mode 100644
index 0000000..377870d
--- /dev/null
+++ b/10/2.lua
@@ -0,0 +1,46 @@
+require "ext"
+
+local w, h = 40, 6
+local cpu = {
+ r = {x = 1},
+ isa = {
+ addx = {
+ nargs = 1,
+ cycles = 2,
+ f = function(self,v)
+ self.r.x = self.r.x + tonumber(v)
+ end
+ },
+ noop = {
+ nargs = 0,
+ cycles = 1,
+ f = function(self) end
+ }
+ }
+}
+
+local strength_sum = 0
+local cycle = 1
+for line in io.lines() do
+ local parts = {}
+ for part in line:gmatch("(%S+)") do
+ table.insert(parts,part)
+ end
+ local insn = table.remove(parts,1)
+ local ins = cpu.isa[insn]
+ assertf(ins, "No instruction %s in %s",insn,line)
+ for i = cycle,cycle + ins.cycles - 1 do
+ local crtpos = (i-1) % w
+ if crtpos + 1 == cpu.r.x or crtpos == cpu.r.x or crtpos - 1 == cpu.r.x then
+ io.write("#")
+ else
+ io.write(" ")
+ end
+ if i % 40 == 0 then
+ io.write("\n")
+ end
+ end
+ cycle = cycle + ins.cycles
+ ins.f(cpu,table.unpack(parts))
+end
+print(strength_sum)
diff --git a/10/ext.lua b/10/ext.lua
new file mode 100755
index 0000000..c1eb1cc
--- /dev/null
+++ b/10/ext.lua
@@ -0,0 +1,62 @@
+-- Override tostring to display more info about the table
+local old_tostring = tostring
+local numtabs = 0
+local printed_tables = {}
+
+local function tostring_helper(el)
+ assert(type(el) == "table", "Tried to call helper with something that was not a table, it was a " .. type(el))
+ local mt = getmetatable(el)
+ if mt and mt.__tostring then
+ return mt.__tostring(el)
+ elseif printed_tables[el] == true then
+ return old_tostring(el)
+ else
+ printed_tables[el] = true
+ numtabs = numtabs + 1
+ local strbuilder = setmetatable({"{"},{__index = table})
+ for k,v in pairs(el) do
+ local key,value
+ if type(k) == "table" then
+ key = tostring_helper(k)
+ else
+ key = old_tostring(k)
+ end
+ if type(v) == "table" then
+ value = tostring_helper(v)
+ else
+ value = old_tostring(v)
+ end
+ strbuilder:insert(string.format("%s%s : %s", string.rep("\t",numtabs), key, value))
+ end
+ strbuilder:insert(string.rep("\t",numtabs - 1) .. "}")
+ numtabs = numtabs - 1
+ return strbuilder:concat("\n")
+ end
+
+end
+function tostring(el)
+ printed_tables = {}
+ if type(el) == "table" then
+ return tostring_helper(el)
+ end
+ return old_tostring(el)
+end
+
+-- Functions to save my hands
+function printf(fmt, ...)
+ print(string.format(fmt,...))
+end
+function errorf(fmt, ...)
+ --Our error isn't actually in this function, it's 1 above us (1) = 2
+ error(string.format(fmt,...),2)
+end
+function assertf(bool, fmt, ...)
+ assert(type(fmt) == "string", "Assertf arg #2 was \"" .. type(fmt) .. "\", expected string")
+ if not bool then
+ args = {fmt}
+ for k,v in ipairs({...}) do
+ table.insert(args,tostring(v))
+ end
+ error(string.format(unpack(args)),2)
+ end
+end
diff --git a/10/input.txt b/10/input.txt
new file mode 100644
index 0000000..0abc374
--- /dev/null
+++ b/10/input.txt
@@ -0,0 +1,137 @@
+noop
+addx 22
+addx -17
+addx 1
+addx 4
+addx 17
+addx -16
+addx 4
+addx 1
+addx 21
+addx -17
+addx -10
+noop
+addx 17
+addx -1
+addx 5
+addx -1
+noop
+addx 4
+addx 1
+noop
+addx -37
+addx 5
+addx 27
+addx -22
+addx -2
+addx 2
+addx 5
+addx 2
+addx 5
+noop
+noop
+addx -2
+addx 5
+addx 16
+addx -11
+addx -2
+addx 2
+addx 5
+addx 2
+addx -8
+addx 9
+addx -38
+addx 5
+addx 20
+addx -16
+addx 8
+addx -5
+addx 1
+addx 4
+noop
+noop
+addx 5
+addx -2
+noop
+noop
+addx 18
+noop
+addx -8
+addx 2
+addx 7
+addx -2
+noop
+noop
+noop
+noop
+noop
+addx -35
+noop
+addx 32
+addx -26
+addx 12
+addx -8
+addx 3
+noop
+addx 2
+addx 16
+addx -24
+addx 11
+addx 3
+addx -17
+addx 17
+addx 5
+addx 2
+addx -15
+addx 22
+addx 3
+noop
+addx -40
+noop
+addx 2
+noop
+addx 3
+addx 13
+addx -6
+addx 10
+addx -9
+addx 2
+addx 22
+addx -15
+addx 8
+addx -7
+addx 2
+addx 5
+addx 2
+addx -32
+addx 33
+addx 2
+addx 5
+addx -39
+addx -1
+addx 3
+addx 4
+addx 1
+addx 4
+addx 21
+addx -20
+addx 2
+addx 12
+addx -4
+noop
+noop
+noop
+noop
+noop
+addx 4
+noop
+noop
+noop
+addx 6
+addx -27
+addx 31
+noop
+noop
+noop
+noop
+noop
diff --git a/10/sample.txt b/10/sample.txt
new file mode 100644
index 0000000..37ee8ee
--- /dev/null
+++ b/10/sample.txt
@@ -0,0 +1,146 @@
+addx 15
+addx -11
+addx 6
+addx -3
+addx 5
+addx -1
+addx -8
+addx 13
+addx 4
+noop
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx 5
+addx -1
+addx -35
+addx 1
+addx 24
+addx -19
+addx 1
+addx 16
+addx -11
+noop
+noop
+addx 21
+addx -15
+noop
+noop
+addx -3
+addx 9
+addx 1
+addx -3
+addx 8
+addx 1
+addx 5
+noop
+noop
+noop
+noop
+noop
+addx -36
+noop
+addx 1
+addx 7
+noop
+noop
+noop
+addx 2
+addx 6
+noop
+noop
+noop
+noop
+noop
+addx 1
+noop
+noop
+addx 7
+addx 1
+noop
+addx -13
+addx 13
+addx 7
+noop
+addx 1
+addx -33
+noop
+noop
+noop
+addx 2
+noop
+noop
+noop
+addx 8
+noop
+addx -1
+addx 2
+addx 1
+noop
+addx 17
+addx -9
+addx 1
+addx 1
+addx -3
+addx 11
+noop
+noop
+addx 1
+noop
+addx 1
+noop
+noop
+addx -13
+addx -19
+addx 1
+addx 3
+addx 26
+addx -30
+addx 12
+addx -1
+addx 3
+addx 1
+noop
+noop
+noop
+addx -9
+addx 18
+addx 1
+addx 2
+noop
+noop
+addx 9
+noop
+noop
+noop
+addx -1
+addx 2
+addx -37
+addx 1
+addx 3
+noop
+addx 15
+addx -21
+addx 22
+addx -6
+addx 1
+noop
+addx 2
+addx 1
+noop
+addx -10
+noop
+noop
+addx 20
+addx 1
+addx 2
+addx 2
+addx -6
+addx -11
+noop
+noop
+noop