Combine AoC Repos
This commit is contained in:
1
2015/day12/input
Normal file
1
2015/day12/input
Normal file
File diff suppressed because one or more lines are too long
133
2015/day12/main.go
Normal file
133
2015/day12/main.go
Normal file
@@ -0,0 +1,133 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var inpArr []string
|
||||
var input, readInp string
|
||||
for {
|
||||
_, err := fmt.Scan(&readInp)
|
||||
if err != nil {
|
||||
if err != io.EOF {
|
||||
log.Fatal(err)
|
||||
}
|
||||
break
|
||||
}
|
||||
inpArr = append(inpArr, readInp)
|
||||
}
|
||||
input = strings.Join(inpArr, "")
|
||||
|
||||
//fmt.Println("Part 1 Solution: " + strconv.Itoa(sumAllInts(input)))
|
||||
fmt.Println("Part 2 Solution: " + strconv.Itoa(sumAllInts(removeAllValue(input, "red"))))
|
||||
//removeAllValue(input, "red")
|
||||
}
|
||||
|
||||
func removeAllValue(s string, remove string) string {
|
||||
ret := s
|
||||
var removed bool
|
||||
//ret, _ = removeFirstValue(ret, remove)
|
||||
ret, removed = removeFirstValue(ret, remove)
|
||||
for removed {
|
||||
ret, removed = removeFirstValue(ret, remove)
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
// Not quite returning proper JSON... But may be good enough
|
||||
// for the problem (since we're not looking for JSON output
|
||||
// anyways
|
||||
func removeFirstValue(s string, remove string) (string, bool) {
|
||||
ret := s
|
||||
var curlIdx []int
|
||||
removeStart := -1
|
||||
for i := range s {
|
||||
if s[i] == '{' {
|
||||
curlIdx = pushLevel(curlIdx, i)
|
||||
}
|
||||
if checkForValueAtIdx(s, ":\""+remove+"\"", i) {
|
||||
removeStart, curlIdx = popLevel(curlIdx)
|
||||
ret = strings.Replace(ret, trimAtClose(s[removeStart:]), "", -1)
|
||||
// Now figure out if we have an abandoned key
|
||||
if ret[removeStart-1] == ':' {
|
||||
// Trackback in ret until we find the matching " and remove up to removeStart
|
||||
remTrackBack := removeStart - 3
|
||||
for ret[remTrackBack] != '"' {
|
||||
remTrackBack--
|
||||
}
|
||||
}
|
||||
return ret, true
|
||||
}
|
||||
if s[i] == '}' {
|
||||
_, curlIdx = popLevel(curlIdx)
|
||||
}
|
||||
}
|
||||
return ret, false
|
||||
}
|
||||
|
||||
// Trim string after closing bracket/brace
|
||||
func trimAtClose(s string) string {
|
||||
var levelStack []int
|
||||
for i := range s {
|
||||
if s[i] == '[' || s[i] == '{' {
|
||||
levelStack = pushLevel(levelStack, i)
|
||||
} else if s[i] == ']' || s[i] == '}' {
|
||||
idx := -1
|
||||
idx, levelStack = popLevel(levelStack)
|
||||
if idx == 0 {
|
||||
endIdx := i + 1
|
||||
if s[i+1] == ',' {
|
||||
endIdx++
|
||||
}
|
||||
return s[:endIdx]
|
||||
}
|
||||
}
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// Checks if the s contains v starting at index i
|
||||
func checkForValueAtIdx(s string, v string, i int) bool {
|
||||
if len(s) > i+len(v) {
|
||||
if s[i:i+len(v)] == v {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// Simple Part 1 solution
|
||||
func sumAllInts(s string) int {
|
||||
var allIntStrings []string
|
||||
re := regexp.MustCompile("[-]?[0-9]+")
|
||||
allIntStrings = append(allIntStrings, re.FindAllString(s, -1)...)
|
||||
var sum int
|
||||
for i := range allIntStrings {
|
||||
sum += mustAtoi(allIntStrings[i])
|
||||
}
|
||||
return sum
|
||||
}
|
||||
|
||||
func pushLevel(stack []int, n int) []int {
|
||||
return append(stack, n)
|
||||
}
|
||||
|
||||
func popLevel(stack []int) (int, []int) {
|
||||
return stack[len(stack)-1], stack[:len(stack)-1]
|
||||
}
|
||||
|
||||
func mustAtoi(s string) int {
|
||||
r, err := strconv.Atoi(s)
|
||||
if err != nil {
|
||||
fmt.Println("Tried to Atoi " + s)
|
||||
os.Exit(1)
|
||||
}
|
||||
return r
|
||||
}
|
70
2015/day12/problem
Normal file
70
2015/day12/problem
Normal file
@@ -0,0 +1,70 @@
|
||||
Advent of Code
|
||||
|
||||
br0xen 40*
|
||||
|
||||
• [About]
|
||||
• [Stats]
|
||||
• [Leaderboard]
|
||||
• [Settings]
|
||||
• [Log out]
|
||||
|
||||
--- Day 12: JSAbacusFramework.io ---
|
||||
|
||||
Santa's Accounting-Elves need help balancing the books after a recent order. Unfortunately,
|
||||
their accounting software uses a peculiar storage format. That's where you come in.
|
||||
|
||||
They have a JSON document which contains a variety of things: arrays ([1,2,3]), objects
|
||||
({"a":1, "b":2}), numbers, and strings. Your first job is to simply find all of the numbers
|
||||
throughout the document and add them together.
|
||||
|
||||
For example:
|
||||
|
||||
• [1,2,3] and {"a":2,"b":4} both have a sum of 6.
|
||||
• [[[3]]] and {"a":{"b":4},"c":-1} both have a sum of 3.
|
||||
• {"a":[-1,1]} and [-1,{"a":1}] both have a sum of 0.
|
||||
• [] and {} both have a sum of 0.
|
||||
|
||||
You will not encounter any strings containing numbers.
|
||||
|
||||
What is the sum of all numbers in the document?
|
||||
|
||||
Your puzzle answer was 191164.
|
||||
|
||||
--- Part Two ---
|
||||
|
||||
Uh oh - the Accounting-Elves have realized that they double-counted everything red.
|
||||
|
||||
Ignore any object (and all of its children) which has any property with the value "red". Do
|
||||
this only for objects ({...}), not arrays ([...]).
|
||||
|
||||
• [1,2,3] still has a sum of 6.
|
||||
• [1,{"c":"red","b":2},3] now has a sum of 4, because the middle object is ignored.
|
||||
• {"d":"red","e":[1,2,3,4],"f":5} now has a sum of 0, because the entire structure is
|
||||
ignored.
|
||||
• [1,"red",5] has a sum of 6, because "red" in an array has no effect.
|
||||
|
||||
Your puzzle answer was 87842.
|
||||
|
||||
Both parts of this puzzle are complete! They provide two gold stars: **
|
||||
|
||||
At this point, you should return to your advent calendar and try another puzzle.
|
||||
|
||||
If you still want to see it, you can get your puzzle input.
|
||||
|
||||
You can also [Shareon Twitter Google+ Reddit] this puzzle.
|
||||
|
||||
References
|
||||
|
||||
Visible links
|
||||
. http://adventofcode.com/
|
||||
. http://adventofcode.com/about
|
||||
. http://adventofcode.com/stats
|
||||
. http://adventofcode.com/leaderboard
|
||||
. http://adventofcode.com/settings
|
||||
. http://adventofcode.com/auth/logout
|
||||
. http://json.org/
|
||||
. http://adventofcode.com/
|
||||
. http://adventofcode.com/day/12/input
|
||||
. https://twitter.com/intent/tweet?text=I%27ve+completed+%22JSAbacusFramework%2Eio%22+%2D+Day+12+%2D+Advent+of+Code&url=http%3A%2F%2Fadventofcode%2Ecom%2Fday%2F12&related=ericwastl&hashtags=AdventOfCode
|
||||
. https://plus.google.com/share?url=http%3A%2F%2Fadventofcode%2Ecom%2Fday%2F12
|
||||
. http://www.reddit.com/submit?url=http%3A%2F%2Fadventofcode%2Ecom%2Fday%2F12&title=I%27ve+completed+%22JSAbacusFramework%2Eio%22+%2D+Day+12+%2D+Advent+of+Code
|
Reference in New Issue
Block a user