Day 5
This commit is contained in:
parent
5bcb267cba
commit
5952e4cf89
1 changed files with 85 additions and 0 deletions
85
d05/main.odin
Normal file
85
d05/main.odin
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
package main
|
||||
|
||||
import "core:math"
|
||||
import "core:slice"
|
||||
import "core:strconv"
|
||||
import "core:strings"
|
||||
import "core:bytes"
|
||||
import "core:fmt"
|
||||
import "core:os"
|
||||
|
||||
import "../util"
|
||||
|
||||
Row :: struct { min: i64, max: i64 }
|
||||
Column :: struct { min: i64, max: i64 }
|
||||
|
||||
part_1 :: proc(lines: []string) {
|
||||
result: i64 = 0
|
||||
|
||||
for line in lines {
|
||||
row := Row{ min = 0, max = 127 }
|
||||
col := Column{ min = 0, max = 7 }
|
||||
for letter in line {
|
||||
switch letter {
|
||||
case 'B':
|
||||
row.min += (row.max - row.min + 1) / 2
|
||||
case 'F':
|
||||
row.max -= (row.max - row.min + 1) / 2
|
||||
case 'R':
|
||||
col.min += (col.max - col.min + 1) / 2
|
||||
case 'L':
|
||||
col.max -= (col.max - col.min + 1) / 2
|
||||
}
|
||||
}
|
||||
|
||||
id := row.max * 8 + col.max
|
||||
result = max(result, id)
|
||||
}
|
||||
|
||||
fmt.printfln("Part 1: %d", result)
|
||||
}
|
||||
|
||||
part_2 :: proc(lines: []string) {
|
||||
result: i64 = 0
|
||||
seats := [dynamic]i64{}
|
||||
|
||||
for line in lines {
|
||||
row := Row{ min = 0, max = 127 }
|
||||
col := Column{ min = 0, max = 7 }
|
||||
for letter in line {
|
||||
switch letter {
|
||||
case 'B':
|
||||
row.min += (row.max - row.min + 1) / 2
|
||||
case 'F':
|
||||
row.max -= (row.max - row.min + 1) / 2
|
||||
case 'R':
|
||||
col.min += (col.max - col.min + 1) / 2
|
||||
case 'L':
|
||||
col.max -= (col.max - col.min + 1) / 2
|
||||
}
|
||||
}
|
||||
append(&seats, row.max * 8 + col.max)
|
||||
}
|
||||
|
||||
slice.sort(seats[:])
|
||||
for seat, idx in seats[1:len(seats)-1] {
|
||||
if seat - 1 != seats[idx] {
|
||||
result = seat - 1
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
fmt.printfln("Part 2: %d", result)
|
||||
}
|
||||
|
||||
main :: proc() {
|
||||
context.allocator = context.temp_allocator
|
||||
defer free_all(context.temp_allocator)
|
||||
|
||||
INPUT :: #load("input.txt", string)
|
||||
lines := strings.split(INPUT, "\n")
|
||||
lines = lines[:len(lines)-1]
|
||||
|
||||
part_1(lines)
|
||||
part_2(lines)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue