This commit is contained in:
unintendedfraud
2024-12-08 21:32:21 +01:00
commit a809dc3a9a
5 changed files with 1089 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
*.bin
+63
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -0,0 +1,3 @@
# Advent of code 2024
Trying [odin](https://odin-lang.org/) this year.
+22
View File
@@ -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
}