day1
This commit is contained in:
@@ -0,0 +1 @@
|
||||
*.bin
|
||||
@@ -0,0 +1,63 @@
|
||||
package main
|
||||
|
||||
import "core:fmt"
|
||||
import "core:os"
|
||||
import "core:slice"
|
||||
import "core:strconv"
|
||||
import "core:strings"
|
||||
|
||||
import "../utils"
|
||||
|
||||
main :: proc() {
|
||||
input, err := utils.load_file("day1/input.txt")
|
||||
if err != nil {
|
||||
fmt.println("error loading input file: ", err)
|
||||
return
|
||||
}
|
||||
|
||||
n1, n2 := process_input(input)
|
||||
|
||||
distance := calc_distance(n1, n2)
|
||||
similarity := calc_similarity(n1, n2)
|
||||
|
||||
fmt.println("Distance: ", distance)
|
||||
fmt.println("Similarity: ", similarity)
|
||||
}
|
||||
|
||||
calc_distance :: proc(n1: []int, n2: []int) -> int {
|
||||
diff := 0
|
||||
|
||||
for i in 0 ..< len(n1) {
|
||||
diff += abs(n1[i] - n2[i])
|
||||
}
|
||||
|
||||
return diff
|
||||
}
|
||||
|
||||
calc_similarity :: proc(n1: []int, n2: []int) -> int {
|
||||
similarity := 0
|
||||
|
||||
for i in 0 ..< len(n1) {
|
||||
n := n1[i]
|
||||
similarity += n * slice.count(n2, n)
|
||||
}
|
||||
|
||||
return similarity
|
||||
}
|
||||
|
||||
process_input :: proc(input: []string) -> ([]int, []int) {
|
||||
first := make([]int, len(input))
|
||||
second := make([]int, len(input))
|
||||
|
||||
for line, i in input {
|
||||
split := strings.split(line, " ")
|
||||
|
||||
first[i] = strconv.atoi(split[0])
|
||||
second[i] = strconv.atoi(split[len(split) - 1])
|
||||
}
|
||||
|
||||
slice.sort(first)
|
||||
slice.sort(second)
|
||||
|
||||
return first, second
|
||||
}
|
||||
+1000
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
# Advent of code 2024
|
||||
|
||||
Trying [odin](https://odin-lang.org/) this year.
|
||||
@@ -0,0 +1,22 @@
|
||||
package utils
|
||||
|
||||
import "core:fmt"
|
||||
import "core:os"
|
||||
import "core:strings"
|
||||
|
||||
Error :: os.Error
|
||||
|
||||
load_file :: proc(path: string) -> ([]string, Error) {
|
||||
file, open_err := os.open(path)
|
||||
if open_err != nil {
|
||||
return nil, open_err
|
||||
}
|
||||
defer os.close(file)
|
||||
|
||||
content, read_err := os.read_entire_file_or_err(file)
|
||||
if read_err != nil {
|
||||
return nil, read_err
|
||||
}
|
||||
|
||||
return strings.split(string(content), "\n"), nil
|
||||
}
|
||||
Reference in New Issue
Block a user