Files
advent-of-code-2022/odin/day03/day03.odin

430 lines
14 KiB
Odin

package day03
import "core:fmt";
// Lowercase item types a through z have priorities 1 through 26.
// Uppercase item types A through Z have priorities 27 through 52.
BOUND_a := int('a')
BOUND_z := int('z')
BOUND_A := int('A')
BOUND_Z := int('Z')
priority :: proc(item: rune) -> int {
item_ := int(item)
n : int;
if BOUND_a <= item_ && item_ <= BOUND_z {
// Map to range [25, 0]
n = BOUND_z - item_
// Reverse range to [0, 25]
m := 25 - n
// Map to range [1, 26]
return m + 1
} else if BOUND_A <= item_ && item_ <= BOUND_Z {
// Map to range [25, 0]
n = BOUND_Z - item_
// Reverse range to [0, 25]
m := 25 - n
// Map to range [27, 52]
return m + 27
} else {
return -1
}
}
prio_to_rune :: proc(prio: int) -> rune {
if 1 <= prio && prio <= 26 {
return rune(BOUND_a + prio)
}
if 27 <= prio && prio <= 52 {
return rune(BOUND_A + prio)
}
return 0
}
sum_rucksack :: proc(sack: string) -> int {
counter := make([]int, 52)
defer delete(counter)
for idx in 0..<52 {
counter[idx] = 0
}
total := 0
midpoint := len(sack) / 2
for chr, idx in sack {
prio := priority(chr)
if prio < 0 {
return -1 // TODO handle error better
}
index := prio - 1
if idx < midpoint {
counter[index] += 1
} else {
if counter[index] > 0 {
fmt.printf("Adding %c (%d)\n", chr, prio)
counter[index] = -1
total += prio
}
}
}
return total
}
find_common_item :: proc(sacks: []string) -> int {
size := 52
counter := make([]int, size) // Dynamic array initialized to all 0
defer delete(counter) // Clean up memory when it goes out of scope
// Compute the max value for a counter
max_counter := 0
idx : u32 = 0
for _ in 0..<len(sacks) {
max_counter = max_counter & (1 << idx)
idx += 1
}
// Check every item in every rucksack
for sack, offset_ in sacks {
offset := u32(offset_)
for chr, _ in sack {
prio := priority(chr) - 1
counter[prio] = counter[prio] & (1 << offset)
// If we hit the max value, we can just quit without checking anything else - this is because per the problem there should only be one item that appears in all three rucksacks
if counter[prio] == max_counter {
return prio + 1
}
}
}
return 0
}
main :: proc() {
// input := [6]string{
// "vJrwpWtwJgWrhcsFMMfFFhFp",
// "jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL",
// "PmmdzqPrVvPwwTWBwg",
// "wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn",
// "ttgJtRGJQctTZtZT",
// "CrZsJsPPZsGzwwsLwLmpwMDw",
// }
input := []string{
"lvcNpRHDCnTLCJlL",
"RFZggsMrjTFGCJmdmd",
"srsBZgBqwBqRZbzqtHpzzDNtHDqV",
"CCTPpCvlpzzZQQQflrzbQDttTJcgcggJcHtcddtdhT",
"nMLBRnGsFFLznRFRLMMNBnNLDRDdhScJccctdSccJJgDDHhH",
"GVBGVBsLjsrrvfzpjpfQ",
"dzVRSPVVBVDSPzDBQVSQFFlrclMplpMJMtPJlJvHZCMt",
"TjmGmbhjTnTmwhmrvvrHcZvCHZMl",
"fnLwwqfwfqjghHwGThwfTGGBFVDFFsszSRVzRBsdBDgFsV",
"CCWFCcdDWwcWFpSvggnzRRQszngJwT",
"mGtqqLrqfmmLNtNrgTjgJzNQlvJTvznJ",
"tnhVbhMLLZZrnWHPSHDBWbWBFd",
"nQhvgnCQjSSSTTSMCsLDsfPfDlsPJMWLzL",
"qrqBFFBbrVRLszLfsqdqPW",
"bNFFRbBcFZNrZRRRbprNpFrHSwznTnvSwgHvzCSSSjnCQwgz",
"tnnZZVmwmqtvVdZqnddQQHHTHQLsFTnsPrrgrQ",
"MzMflMGpzGzPGPgjLgHrGj",
"zPfhMJDDMJfzlhcRJvVwcVtwVcmcbqqtbv",
"GVzrBVcPVfGrzVVBcQJlGGRCZSSRtSdRnGLJ",
"wbjvHWbLvhFppjZdtwZRNddtJwlR",
"pvMmbpFFbqqqvWHMFvzrLDMMrMTTrVTPzVzc",
"qPmgpmwpwqWWPHdjdTNStzNLMztSWtMNtz",
"lVFfJrFJbbcsvcRVRZzQCzQNSZTZ",
"DGbvFSDGbDjnqgjwmGdq",
"DMnpnpwwnpmRRmcRBDnDwpbRQHssHqhHCHHSsQddHZQQcqqs",
"JlZjjlJgNSddfsgQdf",
"GvrWvzNjvPVLDpbPZwBP",
"drQDzHsHrdZWqDSSPwmmJDDbvbSJ",
"hphBhCMFlBtBtGTJMJsscPwTjMJv",
"tlBCGFgVFNpGClFFVGGtFBZrdZQznfdQQrRWVRQdRsVf",
"NjdCLdjzzlNdjwBBtZqpqPJQbN",
"CsDWcHcGHtcBbJPpbP",
"mGHSssSgSsHFSgGrSgmlLzCdldllrCVCLdnfnT",
"rDLLzRmbcLJRtRSvSBdZtSTp",
"MFswshwgsCsjghgFBsGssjlZpfpvdSHfTdCZTSpHtfddTH",
"llwlwGjMPMQQnBMswsFgglPVcWcDcbWqLWbbLJVDzrqnVr",
"pqmmcSTLfSSSMFlf",
"rHWtPWnHtlrlDntzWwtBFdzCFMRCfjRQFfgMRMjC",
"PWWHDVZPDDJVlWHncGGbqqTVvVmpGTmm",
"wLBtWhGWJBdMmZMs",
"jgvNCFvvGppGnmNJ",
"DDRQTgcvjTPFqGHhRVhLRSVL",
"tPPwLpBpDpgLSPvgQCvsLPjdjNZrJZsdZjsrsnZNjbZc",
"lMWzWMBhmMhRGfVRffHmMjJcJjrNNZnjJcWjNqJnZJ",
"mFMzhTmBGfHTwgPgtptFpPgP",
"qCcqJQHslgtsQsCZmPWNSRNZTPBBCN",
"nnLpjjnvwwvDnrGwFvbFjwPgPWRTPrrPShNhmmNSRRPN",
"bnwdDLjnzGgvFqdJQcqVfQVqHt",
"DfCzDCCTDLDBCsdjzwdrHjbRgjGH",
"MSStMScccJtPptJNJZtJJSrFdwPGjFFHHwsggrwdwRdP",
"nStlpVlhhNSshZlcNZnMcctpBChWBQLqCWqmqvmBCBmQBqmL",
"RfLHNvfLfLZQBtRZsBfffjVqGvqpGSmJpgrJpjGjrp",
"FDbPCMzbTTDDPmzrVzqppJBrBj",
"DPcWPWDhlbCcWBsQZZfHtdwf",
"fbHfPfHHfPZWgZfSGpqNBqdBBjpjdPBJqv",
"rnVNCwwrhhDrmmvcmjdDqcmB",
"hFRrslFRNhFzVthllRCRCCwnQtSGfQgZZbbSWQLSSTZWbQTt",
"nmVqTFCmTVbnvVCnqwFrffjhZLffhNrNJF",
"StBHWDgMBpHMBHDzLjffjWwZJNNfNZjL",
"wBBcDcgzdVbbQcnQlq",
"MfGCtqGDhjDqHhrjGCcJZZBwHRcspZsBsHRc",
"PFFpLFSpzVdSTPgnzzdPPZBRcZBwBJRcWJBmJW",
"vdTTzVpNVpfCChMGqMvr",
"VtZzBzhtlrhznFlBfgrfZgFrPjGRMGjRTmSjRjRTHjfRHmRv",
"DQpnsbJCsNNnpNNJsDQdCDcRmHPGTHTHRSmRmHjvjHSpSS",
"cQbnQdNLdJJQJJJDJWnFwzgwBthrgZBwBgFLZV",
"VhRRgmhpFjFFBDVPGPWQPzvvMMWfjf",
"qcnbnCbfLqJrCnrcdbbLrGSlzWsQvsWWzvWGdMWGQl",
"bnfbwrcwCrHqnHcZhFBTBVRDFmpBHB",
"lrtqltJJJqSTWJqVHRnsRhphdbfbzBdhsRsd",
"vSZCgZMMLSNvCQLPLDPNgZgnznzBfsGGnQnQGdnsfhsfzb",
"CMFLgmPgFFNMFDDCgLLcrWrjTTjtmSJqlWTTwWSr",
"LdjljBdZMFdZFLLLgPvWzQRzCsCmCVssmFSW",
"TJttwDhnnTlWsQzSQQDvWm",
"HtcnfctJwtwrHhrwhfHhJpjNLMZBMgZLrBlbbLNPNj",
"qqhNchPdpqTTNqpDmmvvGzVfzfmvdH",
"cwccjsFwFjnwGwQDfVVVVv",
"FbWjcRsLLFngBrjpbJqCJZTbJZNClq",
"lhznMTSzSnjhQGtVPQBdGB",
"msfNDDJLWslJgfNgCrmLdtGQFVvdGQPZVttBFP",
"RCrJJJDrJRsfgmbsrNsrlDMTSMHcjqwzScjMqqTjbbSc",
"nNgsvNWDRvgnRNVCFddTNZTNZQCTFZ",
"lffHJfHSPmSfvLlbLmpZrCTFTtrTQHqtTrCCrq",
"cpzblplpbvMzWnsDDB",
"CgtvQvJvMtWttvwftCdWvDQrfsFcrqnlcnqZZFRcRqsnhF",
"HzLzVBNLjHqnhzFlWFlr",
"NmBjLbVVbmbTLpTjBNVLHNdCtTSWQvCgdwSwJtWQwdSD",
"lncHcnlccVSLNSQNslncLcrZJCrgPfJZDrggJCCvZPHC",
"jRqqRmmqFwRFppfPPppPBfpWBvZf",
"wmMqjtTdjFwGGdtNhQbVfhntcNLVbL",
"HFBgMjpbpddMpbHdgHLLRNwhwFLDtNSRDLLD",
"zsCnfqZflrlnhhrtwNgggNNL",
"CGqnQzlqlWWMWgVBGg",
"pQnvzjztpzpCmtzzjzpnBHrJNGlqggMMqgqlNWgfNNqNCP",
"sVTSwddRRDVShwRwRTWgPNqMGQMGNqMWslsg",
"hDSTQhcQcHrtcBmZHv",
"QRmQfvQpWpswfZWWvNbhlMglgFbZDldlbL",
"rzHqtcnqqVjqjGcHdLdFdCFdCbLDnMCh",
"DGcGGSPDpWTsSfpv",
"llfMHTmvHlfZlFZRzgQzsFBLtLzFGF",
"wrWNJrdJhRmhGmNh",
"DWrrJjwPjCdPDwdmwnrTZnZZcqZfnqbvZfHvql",
"mPmVJJmNZJmlVBPPrZpWcFWbGWbjgqNbdqjSjg",
"nMhzwRhwvhMDMgWHRdGHgccggd",
"sMvnhQshMwwvdvMMCwBtlZtplZpTmPBVZVlC",
"ltlRzpncRglplzhFwFwzZZMWLWZBqnDVZLDVZQQQ",
"SJcdvJscNSsGcSGCSJmsTQDTVZQTLTQQWCTTMQCW",
"sPdJmcvsJvGJmdJmfpwftfrlztrRlPfP",
"LdPrWcMCWCfPdMJgdFsbRRHsRSHRHHcFpH",
"hVVTQmQTnRFLFsmzps",
"qthVVwZqlQLQhNttDDDWrffDJJJDrgNP",
"BTjTNjtlPrBjjrljbnMFfhVWFFhlMWMfHdll",
"mzcgZvDggDDCJCZLvsLJLcmVqWVSVqFLfdHHMWVWWWffnF",
"cmmcmzQDZQJmZCnDRgQCTTwjpTtwRjrbNjpPpwrj",
"rMbchQphhCSbGnzSbl",
"qFtgvTTqFFFFJGzWJG",
"NZjGqGBNjNHQrhpPNHQr",
"LnLmbtTtTwtLcVfFFLtPrfPrfqqqsqhSvrhrhh",
"BzJWzZRZJzJvlZJCZgZZpJHCqQDhNQPDqDDrjNsjPPNrhSCN",
"lpJWZzJpgHWdWMgHlJMZzgpJLGVLGGvwVwtmcGbvGMGVvncn",
"WdBgdqRgWqHmNNwsGgcQ",
"ptPVbPbSbMJrmsVzRzhwmcGQ",
"SSbvrJbJtCDZfTqdRfCdBZ",
"WDNNWvPpvNJRRbGLsGMnnbmG",
"qgFdBwgVdjwdtjjdBgMgGmLQsnZrnZssGswsmLrw",
"FqTCTtqjdjVqgCqSMJMTvPThTJMNDh",
"brSSSpZjVVWdfVrHPhRBggNNGwHr",
"fDlLzFCLMvnMMJLNHNCBQwNhRgwRPP",
"MJqMmfzDvFtLDtmsVsZZTsSScWcsbq",
"CSZlllhSdnDrrDdJjqjzbSGzGvwbfHMb",
"gTNvVNLQtsFpQHqfwfBfVMfHzf",
"QgNmWTtmTcmmdmrZRvnlPl",
"SmzfvfjvjbjLNJjD",
"cFhWMhGHTPhccMQQGBTFGwbVVwdbddJDvVJLvDDHvd",
"GFMBGcWTWhcGrhFZTTchQsSfgtmnnRvnmnnRgRCrRS",
"ZTQHVZsZSQpQQGBMGqfBRbRB",
"CwtLDtNFcPnllwnqvMgbvGVfVfBG",
"VClLWWFPPhlhctsTrrSpWpmszjZj",
"HChzPltNnnHtnpqSpHpFpSfSvS",
"mJmQssZJLdTQLcbjlGLGfSgMbqwwSFSMSFMMqMwS",
"JdBLlGTjLjjjjdmmBPnRzCBRNPhPtPWPtr",
"FPLHMHqqPMgFLLggsMghTJhwtDSSJDltJvtwdvST",
"WQfmjQZsjfZNQCrZCNZQQWQBCSClvdwTSClwSwlTJvtwJdbT",
"BpmzrWcpBrfmpsGPGFqPRgzqVPLM",
"bHjccpHwGHJTfPlffPwr",
"VtChMZVhhStZdfTCfJvcPRCTJn",
"sLNLZcdNZZqZqqVqSNWtjQDGHssHGHgQHDBgmsDg",
"CdWgCpddwgClFlmmVTBbRtRtbntBVVds",
"vcJGhPLPhJvChLhMLfccrvfvsVVbsGBTTBnVbRzBVstsGnbz",
"vJJHhjcCLPPjQPHLrSZmpgmqwlWZZgZZQm",
"VpTFCFtrjCdJdjHVFnSjszSllDjsDzgvzl",
"fhmhZBMtfZfGBNfNcmsbZnzSlRsRggslsbnv",
"qPLPhMcLhPfNWPpFrdFdFTtJ",
"nlgQJhJFlncMzMWZMFvw",
"mDdsDfHjHsjHdjTLfpDsbDcNzzwcRbZNZPMcCPWMRPMc",
"sqqdwffHjTmdmpffmLddTTGDnSJtJBShVVhrGVJtShrlBBnJ",
"CrcMcMDBCmLlZdSd",
"qPjGjnQPqWjgZmTdlFwTmqLJ",
"bnPnnzHjbPznzVpdpVDcvprr",
"TCScMQcQCrssJPQhQs",
"VpfnqqfdVVwpqvqwGbDPPsjgPShDSsJhlnSl",
"qffdmGpfwfbfvVqpfwwfbdqRMTSTWNMWTmZLTzTCZTMLWC",
"QQPpPbPbDNplSJrCCj",
"VdMzffgnRmVdfVWRvlrCTjRlNBvrrlrr",
"mGgNdthhGgMWWtsFcHcHwqLqtH",
"HrPFVqVppVpDjFDrVbCpDFJSLsmwjhjGLLmthJLJLmZs",
"WWgRdMdRMnQnRzWvPSssPWssJmhsshtG",
"MnfvMlnQccvfMlcTRMQdRfpHPDDDpPrDTbTBNbHbHDCq",
"GWWRsSwLhWsRsSbsPttThZqrNBJJBgPNCJCCqNMNgP",
"HpVDTHzfFDpFfzHzFVcrBZCggMJBvNrNgcNNrM",
"jlVpVpVVQDHdFVlmmmQTlzpjjGstWLsSbsnnnStWLRhnht",
"prLMDDjNCLZbdFLGngdLBv",
"VQHmhWSSzhWHmPJRJhSmVHJPFvgTbtnTbBtGqbQnbdqgTFqG",
"RzwzzhwhwNCvvfpc",
"wQgmZnhmWVtwQmnnnQbQhzwsFcRPrFPvRJhPlPPBBBFvJv",
"DdjqMMGLLMMGqTGdMqdMLdBBJsJPJBJJrrBFcqRlPlqr",
"DsddsfMsWgfzftZb",
"lcqlFSFwBBPlNwPlvSlQfWsVLTQjzjWVfLsWVq",
"HMMbMHMtJHgFzzFrVVtfFQ",
"RMFpCDDFcCNBcZvP",
"gwDrClhppDDPwPhnmPlwDrlDjMFfMTjMTjJmRHHJBJRMJHGj",
"LbbZBSvSLVRHffHJHJGZ",
"WztdtLsSvNQStbbtzdStthWhnwnPBDclgwwnrwllCC",
"MnMMBppMBDWMhpnCDBgCBmRbstvPvvbGltSPVGlVPWVv",
"TrrddJHjNcTqrrqdFcqZwSvLSlGGPbtFRbLvFVSRPG",
"JTccqTcwNQcTJrZwNJcJqHwJBQDfhCBCpCQpmpDfMRfCfBpn",
"njVcjHfGjVjpTCpMWprW",
"tsSsQDvSqQshDhtmWpnQnmMmbrpdzM",
"FNhsDDLNLnNllBqfRJGBVHBPHRRBZZ",
"hFVdlFSFlfZdRhgWgdWnnnfGpMNfnLMQzQQjMD",
"RsrJRHsvBcvHBHjDMMpDQDjjzDHj",
"BcCmBqvrbbqJgmFZtWdRVSVV",
"FzzdDJrJCFSFRqLlwsgspsBCpL",
"HQdWhMZMVwqLMllw",
"bbQtcvZcmHtNPZcWthWRvrdrRzrSDfRSrzjJjR",
"bTFZzHjZNJHzLggsJgbdsWcdcShWCwsSSdvGvv",
"VDBmntntfCBGGGGhRc",
"fMnnPDfmDlmnMPmtmttnVlHzZzNLbFbLbhzJJjMgJFbb",
"GzgJGPRrMSgTgpgH",
"hcvWhBdhcfPFvmFQvwfbHMsMMbpDpTDSSHsHpd",
"LmcvFFlcWQlFlfPnRZPVCJzJClCz",
"DdCHCHrmHRgghTHH",
"pFVZFwfssMsgghML",
"tSnphvhtctSSQNDqNdmrWGvq",
"rqmtRmGmcWrRRQprRRnfbGMMlPGGPblwMbTP",
"BHHhVZSvDNdhvBVhshbzfPbTmDfnwPwzPgbl",
"ddvBsSSdsLdshLsLpmWqcWrCCrtFpQ",
"wZPCwdPCHrnLQCGZDcPRqllzqqBzjlqc",
"gMmgnJspsvTmWNVWNpTNWNcDcqVjqDcclhSzllRSDzqR",
"JnWsgMnngmttFWWMdrwCZwHfZfdfGdFd",
"wwgNgrsWvbfBrqqsWbjDCDDDCDCmFbSmLDLlSC",
"QdpdzQTVdzRMTVVzcHTQLnlFmZHPSChCmlDPPHnP",
"dRMLVttzzVtTVQVqrrrgBtsvWWwtNw",
"vtBvntlqMvfnTfPDPhdRNbhdTFzF",
"QLWcmrrcgmCgCcsgcQWlWWrrDjjzzjsdFDdRhPNDhhhzDzPF",
"GGWHcCQcCCSlmmBVMGVBfMqwJtqv",
"cfqfhDRwhqZgRgRzRvcfhBSrsBnrDBBJWrnrWrSmmr",
"VCTVjGCTCjFddQntmrsVsJvrtrrW",
"PFQGpFbvPRMNqgRq",
"MmDgZZGMjZGfZRFztzCtCjzSrF",
"cBNpPJpBdNntcBHBccJlsSVVzzSwlCRrCnzsFw",
"PPBJLPPBBLPHBNQgqfMQtmTftGGvhq",
"bbZnbnVVgVSnbgZtntZrltsprpMCJvpqdJmsCMMmvvCq",
"BjDcjLLDzNjLDcjDzhcDNLLLHdpmpHJsqsMMNfCHfJpspqvp",
"dFLTFBcBzjFLgTbQtRgTVTlZ",
"nqNnrBRjLnjLZCqGGlqSGWlWDS",
"mTJTTcTJJfJfhhhwMbQDPWCQFCRlbDCSDDPl",
"dhMcRgJmgRrBrrrNgrLZ",
"GvJvJSGZFrGmmbmCrWnhjncLctcWttVqjLBB",
"wDlTzwlHTncRTqnRBt",
"gspglgzDzdPDfpgfdDzsgMPGvZJBrrbZGJNFmCFvmFvFvM",
"RLjMZZzfvNLBdjQfBfQdhRfSTVlcVqGbGcLGlbmqLVccmm",
"FggHCwsggrWWtCHJDDHtWrTNNlqSnlTlnGVTmWGcbcbm",
"PtpttrwsJssPsdRQvphZNzdMBh",
"NqqpZBHqTBpPNpPpGwwMPGTJjjLjQljGmtLfftllbJQfGf",
"nHczcrSFnVWSlrltrgJmjLLQ",
"SvzcDDVVFzdzhndCFSvnhcDspRDRDMPpMHRNPPZqppwM",
"FRSbVCSFFCDMFjRMjSSVFSWggMmWtWngJWttWmmJctnt",
"BPwcQQcQqQmWHfgrfwrh",
"PPlBQdNQvdLzzvclczdNRSbpLSbRbDjFZFFZVsFs",
"wtrrVhBbpcZSSjBfSfmm",
"MDWTvTMGMRCDCTQWsvfrRjjFfHlFmjlmLlHl",
"gQrTQvQDssdNWGsTstcbptwVPqcbpNqttP",
"jtGSwGQczrzjtGzrcsJwMRqMVMwRVMWFvVTWFV",
"DhLgnDLndDHmLvWqpTHqHHVNqF",
"LhdmPhfgZnZDlPCPmDfljQtGsJtBsWjGJzJSWBjC",
"zHDjcjBjTfjjfGpf",
"NNFTnNwPNNdqnJdFnqqTgmgftfftrWCZGbmrpWttmW",
"FLJqVNVNhnwnTRsRQBlQzShs",
"HJGJGJzzHHQHfJHsnNsGMbccMrTgbr",
"vddSCCjdmVvDDmvmBVbbBchcrrcscMTTnscn",
"VjWdFCVVMWWmjdSVFSVpqwwZttfJJltJZqltppLw",
"SnmPBPBnMLnPBsSgSDqRNRRccDfNcNQQRg",
"lZVWtWVzCjvZzCCGzDwbwRwtqJwJNTtDfD",
"zCzHZFFFfdLnBfFf",
"NRBFpNNJgNbWbJLRpRbWNtNpZllCZdjjZfjPVljTVCZQltlV",
"sDqHmsHcDrwHhMDlfCQfVBjDPCTd",
"MnGGcqwhhsrchcmGpzRJSSGGJWJzbJBR",
"LBzjQQzcjWvHWLnVDdnHRffHDCVR",
"rmJSrPJJsbNZssGSPrFpddfGwDRRpVjVpCGdCp",
"mPsrmsNTrPNLTjQlWQhqLc",
"MSDFszbhbRRTRdwhtw",
"PWmCZCmZVvGqMcjmJRpdTTtdLpqwdlll",
"MWGmmCVHvMSBDSNbbHHS",
"mBwSBSfSPHZCLPZSWwfPppTndVpdVncFgcgPpP",
"rhQJjzQjrltJzGqCrGJTvgqRpnTgFgcFTVFqFR",
"QbhGMJrhzrhQGQCsjwMDNWBDSZBZwSBLmM",
"bQfDPgDQbQNGPgflWfvMZcRMMFmcvMfZ",
"BLqSssjnzpBwszqwzFCNMvzWvRvzCCZFvc",
"BpNpjnNHnSpssqLqrBLLHjdhTPPDgbggllldhTPdrrQh",
"CvCMqNWVVqqPvNvvChhhdSnFHwBdWwhfdS",
"gqTZGGjlmclrZjlmSndSDwfFhhDBHm",
"tRrZpgrcctbbltRpgtqCVJCvPsRvsvPCQPCLPz",
"dTjRdWDBRzvjfzTfvTJPtJttsSLqHsSQJw",
"hrJNmbnFNZrbhlCsqltqcQcQSQqwPL",
"pVNhFgZphZmjzvjGDJWzVJ",
"gWzQhCWbQnCCFgCJnFQnWCzwjrHjjHGTwHGrhLwjjjtStL",
"splcpqDNDqqcZqRlspwHbjVrjjHTrwSbtVNV",
"BpMslDqDmRDRsBRBJPPnbzCfvQgmCWJb",
"tRtgRQWCwlTglHZHTglCtTdbbfvhWpbSBbhWzzbfGpfhbb",
"cqZVMJmLqmNrsJMDbzGrGSvzGBhvvG",
"mmnJPMZcclFRdnQtCQ",
"QVQVqfFzVVQQrQwZsCTrBtTrccTtctcJRRjT",
"vNNPnvGbBtWBLvBf",
"mMHbfDfHdHGmnhDDqZFDzVSQzF",
"NNlTNFCRTrfllTZsPWSsFPfzJdVQVpDQVszQVtpbzJMVbJ",
"LNHjNHjmLLjNqvGgvVQJQDVLbDVDpdQQzQ",
"nqmqGHjwgHvgwGHjGgccNTSWrrlCZrFfPSFFCP",
"qWzCQqhPCHjHmqJhqvqmjRgSFMTFggMFTFVRVVTgTm",
"SptGsDlnGfnDLgTMTwgRFFFs",
"bBcntZdpGZZcctlGtDfnDnBCSWqJvQhqjqzjhJqJQCQWPd",
"SjZJrSSDShddqLvPqzzdwq",
"nTssfRpQQmQCHlPBBgGmwVGzwm",
"TWQsbCRQFHFWQRTpzRHRsRrMtDrjhjbtMbccrttJjJht",
"cCChVMwPPMHCPCCPrvJnntdTJSvTtdrSRt",
"FGfFDBhGGlfGGfWJWdbSRSnRNbTvdn",
"fGpGlDmBhflgfDFmmfFpcVzMzqZZzcCPQVZzqP",
"SmgtSjGPjppBjbqqWTCZDQTHHHTg",
"VsFfCzLvsMfzNfNRhVMslzlHqrWrQDQcqDqTrLWHcrWJJW",
"dsRdsNCvNMVpwPdnnGbbPb",
}
total := 0
// for str, idx in input {
// sm := sum_rucksack(str)
// fmt.printf("Line %d: %d\n", idx, sm)
// total += sm
// }
idx := 0
step := 3
for idx < len(input) {
upper_bound := idx + step
offset := min(len(input), upper_bound)
prio := find_common_item(input[idx:offset])
total += prio
idx = upper_bound
}
fmt.printf("Total: %d\n", total)
}