[ADD] main: Added day 5 solution
This commit is contained in:
parent
4a969fa3be
commit
a5e32e9995
3 changed files with 1563 additions and 0 deletions
1368
05/input.txt
Normal file
1368
05/input.txt
Normal file
File diff suppressed because it is too large
Load diff
167
05/main.go
Normal file
167
05/main.go
Normal file
|
|
@ -0,0 +1,167 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const FILE_PATH = "./input.txt"
|
||||
|
||||
//const FILE_PATH = "./sample.txt"
|
||||
|
||||
func LoadInput(filename string) ([]string, error) {
|
||||
file, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
var lines []string
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
lines = append(lines, scanner.Text())
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return lines, nil
|
||||
}
|
||||
|
||||
type Rule struct {
|
||||
definition int
|
||||
limiter int
|
||||
}
|
||||
|
||||
type structuredInput struct {
|
||||
rules []Rule
|
||||
updates [][]int
|
||||
}
|
||||
|
||||
func TransformInput(lines []string) structuredInput {
|
||||
var nums []string
|
||||
var num1 int
|
||||
var num2 int
|
||||
var result structuredInput = structuredInput{}
|
||||
var i = 0
|
||||
for ; lines[i] != ""; i++ {
|
||||
nums = strings.Split(lines[i], "|")
|
||||
num1, _ = strconv.Atoi(nums[0])
|
||||
num2, _ = strconv.Atoi(nums[1])
|
||||
result.rules = append(result.rules, Rule{num1, num2})
|
||||
}
|
||||
i++
|
||||
var c = 0
|
||||
for ; i < len(lines); i++ {
|
||||
result.updates = append(result.updates, make([]int, 0))
|
||||
nums = strings.Split(lines[i], ",")
|
||||
for _, num := range nums {
|
||||
num1, _ = strconv.Atoi(num)
|
||||
result.updates[c] = append(result.updates[c], num1)
|
||||
}
|
||||
|
||||
c++
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func IsCorrect(rules []Rule, update []int) bool {
|
||||
|
||||
for i, page := range update {
|
||||
for _, rule := range rules {
|
||||
if rule.definition != page {
|
||||
continue
|
||||
}
|
||||
|
||||
for j := 0; j < i; j++ {
|
||||
if update[j] == rule.limiter {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func Part1(input structuredInput) int {
|
||||
var result = 0
|
||||
|
||||
for _, update := range input.updates {
|
||||
if IsCorrect(input.rules, update) {
|
||||
result += update[len(update)/2]
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func CorrectUpdate(rules []Rule, update []int) []int {
|
||||
var result []int = make([]int, len(update))
|
||||
copy(result, update)
|
||||
|
||||
var IsCorrect = false
|
||||
var temp = 0
|
||||
for !IsCorrect {
|
||||
IsCorrect = true
|
||||
|
||||
for i, page := range result {
|
||||
for _, rule := range rules {
|
||||
if rule.definition != page {
|
||||
continue
|
||||
}
|
||||
|
||||
for j := 0; j < i; j++ {
|
||||
if result[j] == rule.limiter {
|
||||
temp = result[j]
|
||||
result[j] = result[i]
|
||||
result[i] = temp
|
||||
IsCorrect = false
|
||||
break
|
||||
}
|
||||
}
|
||||
if !IsCorrect {
|
||||
break
|
||||
}
|
||||
}
|
||||
if !IsCorrect {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func Part2(input structuredInput) int {
|
||||
var result = 0
|
||||
|
||||
for _, update := range input.updates {
|
||||
if IsCorrect(input.rules, update) {
|
||||
continue
|
||||
}
|
||||
|
||||
result += CorrectUpdate(input.rules, update)[len(update)/2]
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
func main() {
|
||||
input, err := LoadInput(FILE_PATH)
|
||||
if err != nil {
|
||||
fmt.Println("Error loading input:", err)
|
||||
return
|
||||
}
|
||||
|
||||
structuredInput := TransformInput(input)
|
||||
fmt.Println("Structured Input:", structuredInput)
|
||||
|
||||
fmt.Println("Solution Part 1: ", Part1(structuredInput))
|
||||
fmt.Println("Solution Part 2: ", Part2(structuredInput))
|
||||
}
|
||||
28
05/sample.txt
Normal file
28
05/sample.txt
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
47|53
|
||||
97|13
|
||||
97|61
|
||||
97|47
|
||||
75|29
|
||||
61|13
|
||||
75|53
|
||||
29|13
|
||||
97|29
|
||||
53|29
|
||||
61|53
|
||||
97|53
|
||||
61|29
|
||||
47|13
|
||||
75|47
|
||||
97|75
|
||||
47|61
|
||||
75|61
|
||||
47|29
|
||||
75|13
|
||||
53|13
|
||||
|
||||
75,47,61,53,29
|
||||
97,61,53,29,13
|
||||
75,29,13
|
||||
75,97,47,61,53
|
||||
61,13,29
|
||||
97,13,75,29,47
|
||||
Loading…
Reference in a new issue