]> fbox.kageds.com Git - adventofcode.git/blob - 2022/go/day05/day05.go
day02
[adventofcode.git] / 2022 / go / day05 / day05.go
1 package day05
2
3 import (
4 "fmt"
5 "strings"
6
7 "github.com/philhanna/stack"
8 )
9
10 func Part1(input string) (result string) {
11
12 result = ""
13 var stacks [9]stack.Stack[string]
14 var lineNo int
15
16 for i := 0; i < 9; i++ {
17 stacks[i] = stack.NewStack[string]()
18 }
19
20 lines := strings.Split(input, "\n")
21 for n, line := range lines {
22 if line == " 1 2 3 4 5 6 7 8 9 " {
23 lineNo = n + 2
24 break
25 }
26 for i, r := range line {
27 if r != ' ' && r != '[' && r != ']' {
28 stacks[i/4].Push(string(r))
29 }
30 }
31 }
32 for i := 0; i < 9; i++ {
33 stacks[i].Reverse()
34 }
35 var quantity, from, to int
36 for _, line := range lines[lineNo:] {
37 fmt.Sscanf(line, "move %d from %d to %d", &quantity, &from, &to)
38 for i := 0; i < quantity; i++ {
39 value, _ := (stacks[from-1]).Pop()
40 stacks[to-1].Push(value)
41 }
42 }
43 for i := 0; i < 9; i++ {
44 item, _ := stacks[i].Peek()
45 result = result + item
46 }
47 return
48 }
49
50 func Part2(input string) (result string) {
51
52 result = ""
53 var stacks [9]stack.Stack[string]
54 tmp := stack.NewStack[string]()
55 var lineNo int
56
57 for i := 0; i < 9; i++ {
58 stacks[i] = stack.NewStack[string]()
59 }
60
61 lines := strings.Split(input, "\n")
62 for n, line := range lines {
63 if line == " 1 2 3 4 5 6 7 8 9 " {
64 lineNo = n + 2
65 break
66 }
67 for i, r := range line {
68 if r != ' ' && r != '[' && r != ']' {
69 stacks[i/4].Push(string(r))
70 }
71 }
72 }
73 for i := 0; i < 9; i++ {
74 stacks[i].Reverse()
75 }
76 var quantity, from, to int
77 for _, line := range lines[lineNo:] {
78 fmt.Sscanf(line, "move %d from %d to %d", &quantity, &from, &to)
79 for i := 0; i < quantity; i++ {
80 value, _ := (stacks[from-1]).Pop()
81 tmp.Push(value)
82 }
83 for i := 0; i < quantity; i++ {
84 value, _ := tmp.Pop()
85 stacks[to-1].Push(value)
86 }
87 }
88 for i := 0; i < 9; i++ {
89 item, _ := stacks[i].Peek()
90 result = result + item
91 }
92 return
93 }