finish day 1
This commit is contained in:
106
day1/day1.odin
Normal file
106
day1/day1.odin
Normal file
@@ -0,0 +1,106 @@
|
||||
package day1
|
||||
|
||||
import "core:strings"
|
||||
import "core:testing"
|
||||
import strconv "core:strconv"
|
||||
import os "core:os"
|
||||
|
||||
sample :: `L68
|
||||
L30
|
||||
R48
|
||||
L5
|
||||
R60
|
||||
L55
|
||||
L1
|
||||
L99
|
||||
R14
|
||||
L82`
|
||||
|
||||
solve_first :: proc(s: string) -> uint {
|
||||
s := s
|
||||
pointing_at_zero: uint
|
||||
current_dial := 50
|
||||
for line in strings.split_lines_iterator(&s) {
|
||||
if line == "" do continue
|
||||
value, _ := strconv.parse_int(line[1:])
|
||||
if line[0] == 'L' {
|
||||
current_dial -= value
|
||||
} else {
|
||||
current_dial += value
|
||||
}
|
||||
|
||||
|
||||
for current_dial < 0 {
|
||||
current_dial += 100
|
||||
}
|
||||
for current_dial >= 100 {
|
||||
current_dial -= 100
|
||||
}
|
||||
|
||||
if current_dial == 0 {
|
||||
pointing_at_zero += 1
|
||||
}
|
||||
}
|
||||
return pointing_at_zero
|
||||
}
|
||||
|
||||
solve_second :: proc(s: string) -> uint {
|
||||
s := s
|
||||
pointing_at_zero: uint
|
||||
current_dial := 50
|
||||
for line in strings.split_lines_iterator(&s) {
|
||||
if line == "" do continue
|
||||
value, _ := strconv.parse_int(line[1:])
|
||||
for value >= 100 {
|
||||
value -= 100
|
||||
pointing_at_zero += 1
|
||||
}
|
||||
if line[0] == 'L' {
|
||||
current_dial -= value
|
||||
} else {
|
||||
current_dial += value
|
||||
}
|
||||
|
||||
for current_dial < 0 {
|
||||
current_dial += 100
|
||||
pointing_at_zero += 1
|
||||
}
|
||||
for current_dial > 100 {
|
||||
current_dial -= 100
|
||||
pointing_at_zero += 1
|
||||
}
|
||||
|
||||
if current_dial == 0 {
|
||||
pointing_at_zero += 1
|
||||
}
|
||||
}
|
||||
return pointing_at_zero
|
||||
}
|
||||
|
||||
@(test)
|
||||
solve_first_sample :: proc(t: ^testing.T) {
|
||||
pointing_at_zero := solve_first(sample)
|
||||
testing.expect_value(t, pointing_at_zero, 3)
|
||||
}
|
||||
|
||||
@(test)
|
||||
solve_first_input :: proc(t: ^testing.T) {
|
||||
contents, _ := os.read_entire_file("day1/input.txt")
|
||||
defer delete(contents)
|
||||
pointing_at_zero := solve_first(string(contents))
|
||||
testing.expect_value(t, pointing_at_zero, 1158)
|
||||
}
|
||||
|
||||
@(test)
|
||||
solve_second_sample :: proc(t: ^testing.T) {
|
||||
pointing_at_zero := solve_second(sample)
|
||||
testing.expect_value(t, pointing_at_zero, 6)
|
||||
}
|
||||
|
||||
@(test)
|
||||
solve_second_input :: proc(t: ^testing.T) {
|
||||
contents, _ := os.read_entire_file("day1/input.txt")
|
||||
defer delete(contents)
|
||||
pointing_at_zero := solve_second(string(contents))
|
||||
testing.expect_value(t, pointing_at_zero, 6860)
|
||||
}
|
||||
Reference in New Issue
Block a user