Finish Day 2

This commit is contained in:
2026-02-17 19:46:29 -05:00
parent 7b500eca53
commit c36f402874
2 changed files with 82 additions and 11 deletions

View File

@@ -37,13 +37,31 @@ determine_score :: proc(friendly: Move, enemy: Move) -> int {
return result + int(friendly)
}
determine_score_alt :: proc(friendly: Move, outcome: Move) -> int {
// X = lose round
// Y = draw round
// Z = win round
// 3 defeats 2, 2 defeats 1, 1 defeats 3
// If w := enemy input and v := friendly input, then w = (v - 1) % 2 is a defeat
return 0
/// Scoring for Part 2 of the puzzle
determine_score_alt :: proc(outcome: Move, enemy: Move) -> int {
// Redefine the outcomes so that
// draw = 0, win = 1, lose = 2
outcome_ : int;
switch outcome {
// 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 () {
@@ -56,7 +74,7 @@ main :: proc () {
fh, errno := os.open(os.args[1])
if errno != os.ERROR_NONE {
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)
@@ -64,6 +82,7 @@ main :: proc () {
defer delete(buffer);
num_read, error := os.read(fh, buffer)
score : int = 0;
total_score : int = 0;
friendly : Move
enemy : Move
@@ -73,8 +92,9 @@ main :: proc () {
chr = buffer[0]
switch chr {
case '\n':
fmt.printf("Score for this line: %d\n", determine_score(friendly, enemy))
total_score += determine_score(friendly, enemy)
score = determine_score_alt(friendly, enemy)
fmt.printf("Score for this line: %d\n", score)
total_score += score
case 'A':
enemy = .ROCK
case 'B':
@@ -92,7 +112,7 @@ main :: proc () {
}
}
if chr != '\n' {
total_score += determine_score(friendly, enemy)
total_score += determine_score_alt(friendly, enemy)
}
/// Handle potential errors
if error != os.ERROR_NONE {