Compare commits

..

5 Commits

Author SHA1 Message Date
07ecb2d127 "Solved" Day 4
Literally couldn't be assed to write out the full list of cases in Odin
syntax when it's just objectively more cumbersome than Python syntax
2026-02-17 22:52:46 -05:00
152dc04a5b First part of Day 4 2026-02-17 20:22:14 -05:00
fafa2b6550 Use bitmask to save space on Day 3 2026-02-17 19:54:16 -05:00
f4ad14a34a Finish day 3 2026-02-17 19:46:35 -05:00
c36f402874 Finish Day 2 2026-02-17 19:46:29 -05:00
7 changed files with 2625 additions and 11 deletions

Binary file not shown.

View File

@@ -37,13 +37,31 @@ determine_score :: proc(friendly: Move, enemy: Move) -> int {
return result + int(friendly) return result + int(friendly)
} }
determine_score_alt :: proc(friendly: Move, outcome: Move) -> int { /// Scoring for Part 2 of the puzzle
// X = lose round determine_score_alt :: proc(outcome: Move, enemy: Move) -> int {
// Y = draw round // Redefine the outcomes so that
// Z = win round // draw = 0, win = 1, lose = 2
// 3 defeats 2, 2 defeats 1, 1 defeats 3 outcome_ : int;
// If w := enemy input and v := friendly input, then w = (v - 1) % 2 is a defeat switch outcome {
return 0 // X = lose
case .ROCK:
outcome_ = 2
// Y = draw
case .PAPER:
outcome_ = 0
// Z = win
case .SCISSORS:
outcome_ = 1
}
// Convert enemy from range [1, 3] to range [0, 2]
enemy_ := int(enemy) - 1
// Assert that (friendly - enemy = outcome) % 3 (see scratch.py)
// Thus, (friendly = outcome + enemy) % 3
friendly_ := (outcome_ + enemy_) % 3
// Add 1 back in because we subtracted it before (going from [0, 2] to [1, 3])
friendly_ = friendly_ + 1
// Return score as before
return determine_score(cast(Move)friendly_, enemy)
} }
main :: proc () { main :: proc () {
@@ -56,7 +74,7 @@ main :: proc () {
fh, errno := os.open(os.args[1]) fh, errno := os.open(os.args[1])
if errno != os.ERROR_NONE { if errno != os.ERROR_NONE {
fmt.printf("Cannot open %s: %s\n", os.args[1], os.get_last_error_string()) fmt.printf("Cannot open %s: %s\n", os.args[1], os.get_last_error_string())
os.exit(int(errno)) os.exit(-1)
} }
defer os.close(fh) defer os.close(fh)
@@ -64,6 +82,7 @@ main :: proc () {
defer delete(buffer); defer delete(buffer);
num_read, error := os.read(fh, buffer) num_read, error := os.read(fh, buffer)
score : int = 0;
total_score : int = 0; total_score : int = 0;
friendly : Move friendly : Move
enemy : Move enemy : Move
@@ -73,8 +92,9 @@ main :: proc () {
chr = buffer[0] chr = buffer[0]
switch chr { switch chr {
case '\n': case '\n':
fmt.printf("Score for this line: %d\n", determine_score(friendly, enemy)) score = determine_score_alt(friendly, enemy)
total_score += determine_score(friendly, enemy) fmt.printf("Score for this line: %d\n", score)
total_score += score
case 'A': case 'A':
enemy = .ROCK enemy = .ROCK
case 'B': case 'B':
@@ -92,7 +112,7 @@ main :: proc () {
} }
} }
if chr != '\n' { if chr != '\n' {
total_score += determine_score(friendly, enemy) total_score += determine_score_alt(friendly, enemy)
} }
/// Handle potential errors /// Handle potential errors
if error != os.ERROR_NONE { if error != os.ERROR_NONE {

51
odin/day02/scratch.py Normal file
View File

@@ -0,0 +1,51 @@
rock = 0
paper = 1
scissors = 2
print("Friendly first, then enemy")
result = (rock - paper) % 3
print(f"{rock} - {paper} % 3 = {result}")
result = (paper - scissors) % 3
print(f"{paper} - {scissors} % 3 = {result}")
result = (scissors - rock) % 3
print(f"{scissors} - {rock} % 3 = {result}")
print("lose = 2")
lose = 2
result = (paper - rock) % 3
print(f"{paper} - {rock} % 3 = {result}")
result = (scissors - paper) % 3
print(f"{scissors} - {paper} % 3 = {result}")
result = (rock - scissors) % 3
print(f"{rock} - {scissors} % 3 = {result}")
print("win = 1")
win = 1
result = (paper - paper) % 3
print(f"{paper} - {paper} % 3 = {result}")
result = (scissors - scissors) % 3
print(f"{scissors} - {scissors} % 3 = {result}")
result = (rock - rock) % 3
print(f"{rock} - {rock} % 3 = {result}")
print("draw = 0")
draw = 0
print("(friendly - outcome = enemy) % 3")
outcome = (rock - win) % 3
print(f"{outcome} = {scissors}")
outcome = (paper - win) % 3
print(f"{outcome} = {rock}")
outcome = (scissors - win) % 3
print(f"{outcome} = {paper}")

429
odin/day03/day03.odin Normal file
View File

@@ -0,0 +1,429 @@
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)
}

9
odin/day03/scratch.py Normal file
View File

@@ -0,0 +1,9 @@
BOUND_a = ord('a')
BOUND_z = ord('z')
BOUND_Z = ord('Z')
BOUND_A = ord('A')
print(BOUND_z - ord('v'))
print(25 - (BOUND_z - ord('v')))
print((25 - (BOUND_z - ord('v'))) + 27)

1070
odin/day04/day04.odin Normal file

File diff suppressed because it is too large Load Diff

1035
odin/day04/scratch.py Normal file

File diff suppressed because it is too large Load Diff