Skip to content

Instantly share code, notes, and snippets.

@Nimblz
Created December 9, 2018 07:11
Show Gist options
  • Save Nimblz/99a9d2bee9d3bea76b159a2586f55d25 to your computer and use it in GitHub Desktop.
Save Nimblz/99a9d2bee9d3bea76b159a2586f55d25 to your computer and use it in GitHub Desktop.
local function ProcessInput(input)
local ProcessedInputs = {}
for match, _ in input:gmatch("(%a+)\n") do
table.insert(ProcessedInputs,match)
end
return ProcessedInputs
end
local function GetLetters(id)
local Letters = {}
for letter in id:gmatch("%a") do
table.insert(Letters,letter)
end
return Letters
end
local function CountLetters(id)
local CountMap = {}
for idx,letter in ipairs(GetLetters(id)) do
CountMap[letter] = (CountMap[letter] or 0) + 1
end
return CountMap
end
local function HasLetterCount(id,countToCheck)
for letter,count in pairs(CountLetters(id)) do
if count == countToCheck then
return true
end
end
return false
end
local function HasOneDifferentInSameSpot(id1,id2)
local Id1Letters = GetLetters(id1)
local Id2Letters = GetLetters(id2)
local Diffs = 0
local IdxOfDifference = nil
for idx,letter in ipairs(Id1Letters) do
if Id2Letters[idx] ~= letter then
Diffs = Diffs + 1
IdxOfDifference = idx
end
if Diffs > 1 then
return false
end
end
return (Diffs == 1), IdxOfDifference
end
local function CheckSum(input,countsToCheck)
local ProcessedInput = ProcessInput(input)
local CountsIndex = {}
local CheckSum = 1
for _,id in pairs(ProcessedInput) do
for _,countToCheck in pairs(countsToCheck) do
if HasLetterCount(id,countToCheck) then
--print("id:",id,"has letters that appear at least",countToCheck,"times.")
CountsIndex[countToCheck] = (CountsIndex[countToCheck] or 0) + 1
end
end
end
for count,howManyContained in pairs(CountsIndex) do
CheckSum = CheckSum * howManyContained
end
return CheckSum
end
local function FindCorrectBox(input)
local ProcessedInput = ProcessInput(input)
for idx1,id1 in ipairs(ProcessedInput) do
for idx2,id2 in ipairs(ProcessedInput) do
if idx1 ~= idx2 then
local IsDiff, DiffIdx = HasOneDifferentInSameSpot(id1,id2)
if IsDiff then
local TrimmedString = id1:sub(1,DiffIdx-1)..id1:sub(DiffIdx+1,-1)
return TrimmedString
end
end
end
end
end
local Input = require(script.Input)
print("Day 2 | Part 1")
print("Checksum:",CheckSum(Input, {2,3}))
print("Day 2 | Part 2")
print("Correct box:",FindCorrectBox(Input))
local Input = [[
oeambtcgjqnzhgkdylfapoiusr
oewmbtcxjqnzhgvdyltapvqusr
oewmbtchjqnzigkdylfapviuse
oeimbucxjqnzhgkdyyfapviusr
fewmbtcxjqndhgcdylfapviusr
oevgbtccjqnzhgkdylfapviusr
oewmbtcxjqnzhnkdylmapvpusr
oewmbtcxjqnzhxkdyldapvirsr
oewmutccjqnzngkdylfapviusr
oewmbtcxbqnzhgkdsliapviusr
ozwmbtfxjqnzcgkdylfapviusr
oewmbtdxjqnzhgkdypfapsiusr
oeylbtcxjqnzhgyyylfapviusr
oewmbtcxjqnzhgkdrlfakuiusr
oewmbtcujqnxhgkdylfadviusr
oewmbtcxlqpzhgkdylfaaviusr
oewmztcxjqnzhgkdylfqpliusr
oeembtcxjqnzhgkdtlmapviusr
onwmbtcxjqnqhgkdylfapdiusr
oewmbtcxnqnzhgkdylfapsbusr
oeoibtjxjqnzhgkdylfapviusr
oxwmbtcxjqnzhgkdylfapcipsr
oewmbtoxbqnzhgzdylfapviusr
okwubtcxjqnzhgkdylfapiiusr
oewmbtcxjqnzhgodylfapnicsr
oewmitcxjqnzhgkdylfaphlusr
oewmbtaxjqnzhgkhylfapveusr
oewmftcbjqnzhgkdylfapviurr
oewmbtcujqnzbgkdylfapliusr
oeevbtcxjqnzhgkdylfapniusr
oewmbtcxjqnvhgkdylfapnpusr
oewabtcxjqnzhgddylfapviust
oewmbtyxjqnzhgkdvlfapvinsr
jewmbtcxjonzhzkdylfapviusr
oewmbrcxjqnzxgkdylfapoiusr
dewmbtmxjqnzhgkdyvfapviusr
oewmbtctjqnzhgkdmlfapvihsr
oewmbjcxjqnzhgvdylfapviurr
oewmbtcxjqnzhgcdxlfapvfusr
oewmbucxjqnzhgkdyltapvifsr
gewmbtcejqezhgkdylfapviusr
oewebtcxjznzhgkdylfapvhusr
oewmjtcxjqnzhgkdycfakviusr
oewmbtcxjtnvhgkdylfabviusr
oewmbtcxjqnthgkgclfapviusr
hewmbtcxjqnzhgkdwlfapziusr
oewmbtcxjqnzhgkdylfqpviysf
oewmbtcxjvnzhgmdylfapviuse
oewmbtcxjqnphgkdymzapviusr
oewmbtcxjqnzwmkdylfapvbusr
oewmbthxjqnzhgkdylfatvilsr
oewmbtcxaznzhgkhylfapviusr
zewmbscxjqnzhgkdylfatviusr
oewmbecyaqnzhgkdylfapviusr
oewmbtnxjqnzhekxylfapviusr
oewmbtcxjqczhgkdyltnpviusr
yewmbecxjnnzhgkdylfapviusr
oewmbocxjqnzhgkyylfapviusv
oewmxtcxjqnzhgkkylfspviusr
oiwmbtcxjqnzhgkdydfapvgusr
oewmbtcxjqnzngydylfwpviusr
oewmctcxjqnzhgkdelfapviasr
oewmbtcxjqnzhgxdwmfapviusr
oewmntcxjqnzhgkdylfamviusw
oewmatcxjqbzhgkdylfapvhusr
oewmbtcxjqnqhmkdyluapviusr
opwmbtcxjqnzhgkdywfapvilsr
omwmbtcxjqnlhgkdylyapviusr
oewmltcxoqnzhgkdylfapvfusr
oewmbtcxjqtzhgkdyyoapviusr
oewmbtcxjqnzhrkdzlffpviusr
oewmbtqxyqnzhgkdylfalviusr
oeuzbtcxlqnzhgkdylfapviusr
oewmbtcxjqnzhtxdylflpviusr
oewmdtfxjqnzhgkdylfapviufr
ojwmbtcxjqnzhgkdylfypviqsr
oewmbtcxjqnzhgkdylfapvivuf
oewmjtcsjqnzxgkdylfapviusr
ohembtcxjqnzhnkdylfapviusr
oewmptcajqnzhgkdylfapviusd
oewmbtcxjcnwhgkbylfapviusr
oewmbtcxjqnzhgddnlfapvqusr
oewmbtcfjqnzhgkdypfapvzusr
oewdbtccjqnzhgfdylfapviusr
oewmbtcxjpnzhgkdplfaqviusr
oepmbhcxjqnzhgkdylfaaviusr
oewmbtcwjqxzhgkwylfapviusr
oewmatcxjqnchgkdylfapvifsr
omwmbncxjqnzhgkdylfapviuyr
sewmbsckjqnzhgkdylfapviusr
oewubtcxjqnzhgkdyluapvausr
ohwmbtcxqqhzhgkdylfapviusr
oewmbtcxjqnzhgkpylfapnissr
eewmbccxjqnzhgkdylbapviusr
oewmitcyjqnzhgkdylkapviusr
oewmbtcxjvnzhgkdyjfvpviusr
oewmbtcxjqmzhgkdyefagviusr
oewmbtcvjqnzhgkdylpapviufr
oewmbtcxjrnkhgkdylfapsiusr
oewmbtcxjqnzygkdylfaxvipsr
oexmbtcxjqczhgkdyloapviusr
oewmbtcxjqnlhtkdylfapvmusr
oewmbtcxdqjzdgkdylfapviusr
oewmbtclgqnzhgkdylfabviusr
oewmbtvfjqnzhgkdylfapviulr
oewmbtcxjqnzhgkdyllarvijsr
oewmbtyxjqnzhgpdylxapviusr
oeylbtcxjqnzhgkyylfapviusr
oewmbtctjqnzhjkdylfapviulr
oermatcxjqnzhgkdylzapviusr
oewmbtcxjqnztgkdzlfapviutr
oewlbtcxjqnztgkvylfapviusr
oewmbtcxjqzvhgkdylfapviusk
oewmbtcxjqnzmgkdyldapvilsr
felmbtcxjqnzhgkdylfapviusl
oewmbtcxjgnzhgkjylfaeviusr
ovwmbtcxjqpzhgkdylfapvizsr
eewmbtcpjqnzhgkdylfapvijsr
oewmbzcxjqnzhgkdylfaeviutr
tewmbtcljqhzhgkdylfapviusr
oewmbtcujqnzhgkdnliapviusr
oewmbtcljqnzhskdylfapvgusr
oewmbtchjqnzhgkdylmapviuse
oewmbtcxjqnzbgkdylfaiviurr
oewmbtcxjqnzhkkdyloapsiusr
oewjbtcxjqnhhgkdylfapjiusr
odwmbtcnjqnzhgkdylfapvicsr
oewmbccxjqrzwgkdylfapviusr
kewmbtcvjqnzhgkdylaapviusr
okwmbtcxjqnzhgkdylfspvausr
oewmbtcxjynzhgkdyafapviusw
oewmbtcxjqnzhgwdyleayviusr
oewmbtcxjqnzhgkdylfapviicl
oewmbtcxjqnzhgkdyltaeziusr
oewmbtcxrqnzhgkdylftpvizsr
oewsrtcgjqnzhgkdylfapviusr
oewmbtsxgqnzhgxdylfapviusr
oewmbtcxjanzhgtdylfapeiusr
oewybtcgjqnzhgkdylfapviust
ojwmbncxjqnzhgkdylfapgiusr
ocgebtcxjqnzhgkdylfapviusr
oejcbtcxjqnzhgkvylfapviusr
oswmbtcxjqnkhgkdylfapviusb
oewdbtcxjqnzdgkdylfypviusr
oawmutcxjqnzhgkddlfapviusr
oewzbtcxyqnzhgkdylfapviusy
zewmbtcxjqnzkgkdylwapviusr
aewmbtkxjqnzhgkdylfapviuer
oewmbtcxwqnzhgkdyofapviuur
oewmbtcxjqnzggkdylfapanusr
oewmstcxuqnzhgkdylzapviusr
zewmbtcxjqozhgkdelfapviusr
oewzbtcxjqnahgkdyllapviusr
fewmatcxjqnghgkdylfapviusr
oewmbtcxjqnzhgkdylfapviyqb
oewwbtcxjqnzhgkdyljapviqsr
oewmbtbxjqnzhgkxylfapviesr
oewmbtcbjqnphgkdylfapviysr
oewabtcxyqnzhgkdylfabviusr
oewmbtcxhknzhgkdylfapviusd
ozwmbtcljqnzhgkdylfapviksr
tewmbtcxjqnzhgkdylfaxvqusr
oewmbtcxrqnzhgkdytfapvrusr
ohwmbtcxjcnzhgkdyifapviusr
oewmbpcxjqnzhwkdylfaphiusr
oedmbtcxjqnzhgnbylfapviusr
oewmbocxjqnehgkdylfapvbusr
oeymbtcxjqezegkdylfapviusr
oewmbtcxjqnzhgkdllferviusr
oewmbtcxjqnzhgkwmlfawviusr
oewmbtcxienzhgkdyzfapviusr
mewmbtcxjqnzhqkdylfapviwsr
oewmbtcxjqnztgkmylfapvdusr
ouwmbtcxjqnzhokdylpapviusr
oewmctcxjqhzhgmdylfapviusr
oewmbtcyjqnzhmkdylfarviusr
oewmbtcxjqnzhgkdpnfzpviusr
oewmptcxjqnzhgkdylkapviulr
nefmbtcxsqnzhgkdylfapviusr
oewmbtcxwqnzhgkdilfapvizsr
eewmbtcxjqwzhghdylfapviusr
oewmbtixmqnzhgkjylfapviusr
okwmbtcdzqnzhgkdylfapviusr
oewmbtxxjrnzigkdylfapviusr
oewmdycxjqnzhekdylfapviusr
oewmutcxjqnzhgkdylfapsiuqr
oewmbacxjqnzrgkdrlfapviusr
oewmbtcxpqnzhmkdylfapciusr
oewabtcxjqnzhgkdyrcapviusr
oswmbtcxjqnzhgkdrxfapviusr
gewmbtcnjqnzhgkdylvapviusr
newmbtcxjwnzfgkdylfapviusr
lewmbtcxjqnzhgkdylfaptiujr
oewwbtcxjqndhgkdylfapiiusr
oewmbtcxjqnzhggdylfapvqmsr
lewmbtcxjqnzhgkhllfapviusr
oewmbtocjqnzhgkdylfapvhusr
oedmbtcxjqnzhgkdyhfapviusb
oewmbtcxjqnzhgkdylfajvaosr
zewmbtcxjqnzhgkdylfapvsssr
oewmbthxjqnzhskdylfapviuqr
yewmrtcvjqnzhgkdylfapviusr
oewmbtctjqnzhgkdylfabvhusr
oesmstcxjqnzhgkdylfapqiusr
oewmbtcxjqnzzgkdylfopiiusr
otwmbtzxjqnzhgkdylfaxviusr
ouwmbxcxjqnzhgkdylfapvnusr
oewmbtcxjqezhgedylfapvsusr
oesmhtcsjqnzhgkdylfapviusr
oewdbtcxjqnzhgkdilfapvifsr
oewmbtcxjqnzhgudynfamviusr
qewhbtcxjqnzhgkdyxfapviusr
oewmbzcxjqtzhgkdylfapvitsr
oewmbtccjqzzhgkaylfapviusr
jewmbtcxmqnzhlkdylfapviusr
oewmbtcxjqbzhgkdnlfapviusp
oeimbtcdjqnzhgkdylfapviuer
oewtbtcxjqnihgkdylfahviusr
oewmbtcxhqnzhgkdylfapdiudr
oefmbtcxjqyshgkdylfapviusr
oewmbtcxjqnzhgkfglfapviusx
oecmbocxjqnzhgkdmlfapviusr
oewmbtcxjqnzhghdylfavviuhr
oewmbmcxiqnzhgkpylfapviusr
oewmbtcnjqnzhgkrylfanviusr
oewmbocxjqnzhzkdllfapviusr
eewmbtckjqnzhgkdylfapviusg
oewmbtcrjqqzhgkdylfapvigsr
oewmbtcxjqazhgfdylfapjiusr
oetmbtcxjqnzhgldylfapviqsr
oewbbtcxjqnzlgkdylfapviuse
oewmbtcxjqnzhglbolfapviusr
oewmbtcxjqnzcgkdylfapviuhy
oelmbtcxjqfzhgkdylaapviusr
oojmbycxjqnzhgkdylfapviusr
oewmbtrxjqnrhgkdylfapniusr
oewmbtcxjqnzhgkyyhfapviuso
oewabtcxjqnzhskdylfapviusx
oewmbtcrjqnmhgkdylfapvnusr
oewmbtcxjqrzhgkdylfapvpuss
oewmbtcxhqnzwgkddlfapviusr
kewmbtcxjqnzhgkyylfajviusr
oswmbtcxjqnzhgkdjlfapviuss
onwmbtcxjqnchgkdylfapvpusr
oeymbtcxjqnxhikdylfapviusr
oewmblcdjqnzhgkdylfapviysr
oewmbtcxeqczhgudylfapviusr
oewmbpgxjqnzhgkdylfapfiusr
ohwmwtcxjqnzhgkdylftpviusr
zebmbtuxjqnzhgkdylfapviusr
]]
return Input
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment