aboutsummaryrefslogtreecommitdiff
path: root/2021/10/second.go
diff options
context:
space:
mode:
authorJulien Dessaux2021-12-10 21:41:37 +0100
committerJulien Dessaux2021-12-10 21:41:37 +0100
commit5d7ee2e5028cb283735b6788fa046843ed1f0821 (patch)
tree72c1138f59c471199991675ea1b1db8387ff899e /2021/10/second.go
parentAdded solutions for 9th day : minimums and basins in height map (diff)
downloadadvent-of-code-5d7ee2e5028cb283735b6788fa046843ed1f0821.tar.gz
advent-of-code-5d7ee2e5028cb283735b6788fa046843ed1f0821.tar.bz2
advent-of-code-5d7ee2e5028cb283735b6788fa046843ed1f0821.zip
Added solutions for 10th day : syntax scoring
Diffstat (limited to '')
-rw-r--r--2021/10/second.go86
1 files changed, 86 insertions, 0 deletions
diff --git a/2021/10/second.go b/2021/10/second.go
new file mode 100644
index 0000000..69bd104
--- /dev/null
+++ b/2021/10/second.go
@@ -0,0 +1,86 @@
+package main
+
+import (
+ "bufio"
+ "fmt"
+ "os"
+ "sort"
+)
+
+type stack []byte
+
+func (s *stack) clear() {
+ *s = make(stack, 0)
+}
+
+func (s *stack) push(b byte) {
+ *s = append(*s, b)
+}
+
+func (s *stack) pop() *byte {
+ l := len(*s)
+ if l == 0 {
+ return nil
+ } else {
+ elt := (*s)[l-1]
+ *s = (*s)[:l-1]
+ return &elt
+ }
+}
+
+func main() {
+ scores := make([]int, 0)
+ s := make(stack, 0)
+
+ scanner := bufio.NewScanner(os.Stdin)
+out:
+ for scanner.Scan() {
+ line := scanner.Text()
+ s.clear()
+ for i := 0; i < len(line); i++ {
+ c := line[i]
+ if c == '(' || c == '[' || c == '{' || c == '<' {
+ s.push(c)
+ continue
+ }
+ b := s.pop()
+ switch c {
+ case ')':
+ if *b != '(' {
+ continue out
+ }
+ case ']':
+ if *b != '[' {
+ continue out
+ }
+ case '}':
+ if *b != '{' {
+ continue out
+ }
+ case '>':
+ if *b != '<' {
+ continue out
+ }
+ }
+ }
+ score := 0
+ for c := s.pop(); c != nil; c = s.pop() {
+ score *= 5
+ switch *c {
+ case '(':
+ score += 1
+ case '[':
+ score += 2
+ case '{':
+ score += 3
+ case '<':
+ score += 4
+ }
+ }
+ if score != 0 {
+ scores = append(scores, score)
+ }
+ }
+ sort.Ints(scores)
+ fmt.Println(scores[len(scores)/2])
+}