From 2ce473c58d190fc115475db0649a4e10f201d40a Mon Sep 17 00:00:00 2001 From: tommy Date: Mon, 2 Dec 2024 08:34:55 -0500 Subject: [PATCH] Day 1: Part 2 --- day1/day1_part2.lua | 49 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 day1/day1_part2.lua diff --git a/day1/day1_part2.lua b/day1/day1_part2.lua new file mode 100644 index 0000000..ab3dea6 --- /dev/null +++ b/day1/day1_part2.lua @@ -0,0 +1,49 @@ +--Lua 5.4.2 +local File = io.open("input.txt", "r") + +if not File then + print("File not found") + return +end + +local LeftList = {} +local RightList = {} + +for Line in File:lines() do + local LeftId, RightId = Line:match("(%d+)%s+(%d+)") + table.insert(LeftList, tonumber(LeftId)) + table.insert(RightList, tonumber(RightId)) +end + +File:close() + +if #LeftList ~= #RightList then + print("Lists are not the same size") + return +end + +--[[ + Format: + Appearances[Id] = AppearanceCount +--]] +local Appearances = {} + +for ListIndex = 1, #RightList do + local Id = RightList[ListIndex] + if not Appearances[Id] then + Appearances[Id] = 0 + end + Appearances[Id] = Appearances[Id] + 1 +end + +local SimilarityScore = 0 + +for ListIndex = 1, #LeftList do + local Id = LeftList[ListIndex] + local AppearanceCount = Appearances[Id] + if AppearanceCount then + SimilarityScore = SimilarityScore + Id * AppearanceCount + end +end + +print("Similarity score:", SimilarityScore)