re-organise repo
This commit is contained in:
93
2022/go/day05/day05.go
Normal file
93
2022/go/day05/day05.go
Normal file
@@ -0,0 +1,93 @@
|
||||
package day05
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/philhanna/stack"
|
||||
)
|
||||
|
||||
func Part1(input string) (result string) {
|
||||
|
||||
result = ""
|
||||
var stacks [9]stack.Stack[string]
|
||||
var lineNo int
|
||||
|
||||
for i := 0; i < 9; i++ {
|
||||
stacks[i] = stack.NewStack[string]()
|
||||
}
|
||||
|
||||
lines := strings.Split(input, "\n")
|
||||
for n, line := range lines {
|
||||
if line == " 1 2 3 4 5 6 7 8 9 " {
|
||||
lineNo = n + 2
|
||||
break
|
||||
}
|
||||
for i, r := range line {
|
||||
if r != ' ' && r != '[' && r != ']' {
|
||||
stacks[i/4].Push(string(r))
|
||||
}
|
||||
}
|
||||
}
|
||||
for i := 0; i < 9; i++ {
|
||||
stacks[i].Reverse()
|
||||
}
|
||||
var quantity, from, to int
|
||||
for _, line := range lines[lineNo:] {
|
||||
fmt.Sscanf(line, "move %d from %d to %d", &quantity, &from, &to)
|
||||
for i := 0; i < quantity; i++ {
|
||||
value, _ := (stacks[from-1]).Pop()
|
||||
stacks[to-1].Push(value)
|
||||
}
|
||||
}
|
||||
for i := 0; i < 9; i++ {
|
||||
item, _ := stacks[i].Peek()
|
||||
result = result + item
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func Part2(input string) (result string) {
|
||||
|
||||
result = ""
|
||||
var stacks [9]stack.Stack[string]
|
||||
tmp := stack.NewStack[string]()
|
||||
var lineNo int
|
||||
|
||||
for i := 0; i < 9; i++ {
|
||||
stacks[i] = stack.NewStack[string]()
|
||||
}
|
||||
|
||||
lines := strings.Split(input, "\n")
|
||||
for n, line := range lines {
|
||||
if line == " 1 2 3 4 5 6 7 8 9 " {
|
||||
lineNo = n + 2
|
||||
break
|
||||
}
|
||||
for i, r := range line {
|
||||
if r != ' ' && r != '[' && r != ']' {
|
||||
stacks[i/4].Push(string(r))
|
||||
}
|
||||
}
|
||||
}
|
||||
for i := 0; i < 9; i++ {
|
||||
stacks[i].Reverse()
|
||||
}
|
||||
var quantity, from, to int
|
||||
for _, line := range lines[lineNo:] {
|
||||
fmt.Sscanf(line, "move %d from %d to %d", &quantity, &from, &to)
|
||||
for i := 0; i < quantity; i++ {
|
||||
value, _ := (stacks[from-1]).Pop()
|
||||
tmp.Push(value)
|
||||
}
|
||||
for i := 0; i < quantity; i++ {
|
||||
value, _ := tmp.Pop()
|
||||
stacks[to-1].Push(value)
|
||||
}
|
||||
}
|
||||
for i := 0; i < 9; i++ {
|
||||
item, _ := stacks[i].Peek()
|
||||
result = result + item
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user