package main
import "core:fmt"
import "core:os"
parse_input_file :: proc(filepath: string) -> []u8 {
data, ok := os.read_entire_file_from_filename(filepath)
if !ok {
panic("oh no, could not read file")
}
return data
}
is_uniq :: proc(message: []u8) -> bool {
for i := 0; i < len(message); i += 1 {
for j := i + 1; j < len(message); j += 1 {
if message[i] == message[j] {
return false
}
}
}
return true
}
task1 :: proc(datastream: []u8) -> int {
marker: int
message: [4]u8
for char, index in datastream {
for i := 0; i < 3; i += 1 {
message[i] = message[i + 1]
}
message[3] = char
if index > 2 {
if is_uniq(message[:]) {
marker = index + 1
break
}
}
}
return marker
}
task2 :: proc(datastream: []u8) -> int {
marker: int
message: [14]u8
for char, index in datastream {
for i := 0; i < 13; i += 1 {
message[i] = message[i + 1]
}
message[13] = char
if index > 12 {
if is_uniq(message[:]) {
marker = index + 1
break
}
}
}
return marker
}
main :: proc() {
datastream := parse_input_file("input.txt")
defer delete(datastream)
result1 := task1(datastream)
fmt.printf("Task 1 result: %d\n", result1)
result2 := task2(datastream)
fmt.printf("Task 2 result: %d\n", result2)
}