2017 Day 9 Complete
This commit is contained in:
parent
d4d4e5c91c
commit
52faafccdf
90
2017/day09/day09.go
Normal file
90
2017/day09/day09.go
Normal file
@ -0,0 +1,90 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := StdinToStrings()
|
||||
for i := range inp {
|
||||
ln, gb := RemoveGarbage(inp[i])
|
||||
fmt.Print(ln)
|
||||
v := FindGroupValue(ln)
|
||||
fmt.Println(" :: Value:", v, ":: Garbage:", gb)
|
||||
}
|
||||
}
|
||||
|
||||
func FindGroupValue(inp string) int {
|
||||
var ret, depth int
|
||||
for i := 0; i < len(inp); i++ {
|
||||
switch inp[i] {
|
||||
case '{':
|
||||
depth++
|
||||
ret += depth
|
||||
case '}':
|
||||
depth--
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func GetOuterGroup(inp string) string {
|
||||
var ret string
|
||||
gCount := 1
|
||||
for i := range inp[1:] {
|
||||
if gCount == 0 {
|
||||
break
|
||||
}
|
||||
ret += string(inp[i])
|
||||
switch inp[i] {
|
||||
case '{':
|
||||
gCount++
|
||||
case '}':
|
||||
gCount--
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func RemoveGarbage(inp string) (string, int) {
|
||||
var ret string
|
||||
var isGarbage, ignore bool
|
||||
var cnt int
|
||||
for i := 0; i < len(inp); i++ {
|
||||
if isGarbage {
|
||||
if ignore {
|
||||
ignore = false
|
||||
continue
|
||||
}
|
||||
|
||||
switch inp[i] {
|
||||
case '!':
|
||||
ignore = true
|
||||
continue
|
||||
case '>':
|
||||
isGarbage = false
|
||||
default:
|
||||
cnt++
|
||||
}
|
||||
} else {
|
||||
switch inp[i] {
|
||||
case '<':
|
||||
isGarbage = true
|
||||
default:
|
||||
ret += string(inp[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret, cnt
|
||||
}
|
||||
|
||||
func StdinToStrings() []string {
|
||||
var input []string
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
for scanner.Scan() {
|
||||
input = append(input, scanner.Text())
|
||||
}
|
||||
return input
|
||||
}
|
1
2017/day09/input
Normal file
1
2017/day09/input
Normal file
File diff suppressed because one or more lines are too long
15
2017/day09/test.input
Normal file
15
2017/day09/test.input
Normal file
@ -0,0 +1,15 @@
|
||||
{}
|
||||
{{{}}}
|
||||
{{},{}}
|
||||
{{{},{},{{}}}}
|
||||
{<a>,<a>,<a>,<a>}
|
||||
{{<ab>},{<ab>},{<ab>},{<ab>}}
|
||||
{{<!!>},{<!!>},{<!!>},{<!!>}}
|
||||
{{<a!>},{<a!>},{<a!>},{<ab>}}
|
||||
{<>}
|
||||
{<random characters>}
|
||||
{<<<<>}
|
||||
{<{!>}>}
|
||||
{<!!>}
|
||||
{<!!!>>}
|
||||
{<{o"i!a,<{i<a>}
|
Loading…
Reference in New Issue
Block a user