Combine AoC Repos

This commit is contained in:
2016-12-16 16:21:15 -06:00
parent 5977b28d73
commit 105dbd1ff7
151 changed files with 9081 additions and 1 deletions

1
2015/day12/input Normal file

File diff suppressed because one or more lines are too long

133
2015/day12/main.go Normal file
View 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
View 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