Skip to content

Commit

Permalink
Day 1 + 2
Browse files Browse the repository at this point in the history
  • Loading branch information
jpastoor committed Dec 12, 2016
0 parents commit 779f959
Show file tree
Hide file tree
Showing 7 changed files with 244 additions and 0 deletions.
28 changes: 28 additions & 0 deletions aoc2016utils/assignmentloader.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package aoc2016utils

import (
"fmt"
"io/ioutil"
"os"
"strconv"
)

type AssignmentLoader struct {
}

func (*AssignmentLoader) Load(day int) string {
wd, _ := os.Getwd()
file, err := os.Open(wd + string(os.PathSeparator) + "src\\github.com\\jpastoor\\advent-of-code-2016\\day" + strconv.Itoa(day) + "\\input.txt")
if err != nil {
fmt.Println(err)
os.Exit(1)
}

defer file.Close()
body, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
return string(body)
}
105 changes: 105 additions & 0 deletions day1/day1.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package main

import (
"fmt"

"strings"

"strconv"

"log"

"math"

"github.com/jpastoor/advent-of-code-2016/aoc2016utils"
)

type Step struct {
direction string
amount int
}

func main() {
loader := aoc2016utils.AssignmentLoader{}
input := loader.Load(1)
steps := parseInput(input)

dir := 0
x := 0
y := 0

secondX := 0
secondY := 0

visited := map[string]bool{}

for _, step := range steps {
// Change direction
if step.direction == "R" {
dir += 90
} else {
dir -= 90
}

dir = (dir + 360) % 360

// Calculate new position
for i := 0; i < step.amount; i++ {

switch dir {
case 0:
y -= 1
case 90:
x += 1
case 180:
y += 1
case 270:
x -= 1
}

// Check if position is visited before
if secondX == 0 && secondY == 0 {
positionStr := strconv.Itoa(x) + "_" + strconv.Itoa(y)
if visited[positionStr] {
secondX = x
secondY = y
}
visited[positionStr] = true
}
}
}

stepcount := int(math.Abs(float64(x)) + math.Abs(float64(y)))
fmt.Printf("%d steps to HQ, [x:%d,y:%d]\n", stepcount, x, y)
secondDistance := int(math.Abs(float64(secondX)) + math.Abs(float64(secondY)))
fmt.Printf("%d steps to Second visit [x:%d,y:%d]\n", secondDistance, secondX, secondY)

}

/**
This function converts the input string to a list of steps
*/
func parseInput(input string) []Step {

// First split by the comma
parts := strings.Split(input, ",")

// Reserve output memory
output := make([]Step, len(parts))

for i, part := range parts {
// Split the first character off (direction) and the rest is the amount, store as Step struct
trimmed := strings.TrimSpace(part)
amount, err := strconv.Atoi(trimmed[1:])
if err != nil {
log.Fatal(err)
}

output[i] = Step{
direction: trimmed[:1],
amount: amount,
}
}

return output
}
1 change: 1 addition & 0 deletions day1/input.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
R4, R3, L3, L2, L1, R1, L1, R2, R3, L5, L5, R4, L4, R2, R4, L3, R3, L3, R3, R4, R2, L1, R2, L3, L2, L1, R3, R5, L1, L4, R2, L4, R3, R1, R2, L5, R2, L189, R5, L5, R52, R3, L1, R4, R5, R1, R4, L1, L3, R2, L2, L3, R4, R3, L2, L5, R4, R5, L2, R2, L1, L3, R3, L4, R4, R5, L1, L1, R3, L5, L2, R76, R2, R2, L1, L3, R189, L3, L4, L1, L3, R5, R4, L1, R1, L1, L1, R2, L4, R2, L5, L5, L5, R2, L4, L5, R4, R4, R5, L5, R3, L1, L3, L1, L1, L3, L4, R5, L3, R5, R3, R3, L5, L5, R3, R4, L3, R3, R1, R3, R2, R2, L1, R1, L3, L3, L3, L1, R2, L1, R4, R4, L1, L1, R3, R3, R4, R1, L5, L2, R2, R3, R2, L3, R4, L5, R1, R4, R5, R4, L4, R1, L3, R1, R3, L2, L3, R1, L2, R3, L3, L1, L3, R4, L4, L5, R3, R5, R4, R1, L2, R3, R5, L5, L4, L1, L1
46 changes: 46 additions & 0 deletions day2/day2.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package main

import (
"strings"

"fmt"

"github.com/jpastoor/advent-of-code-2016/aoc2016utils"
)

type Step struct {
direction string
amount int
}

func mainx() {
loader := aoc2016utils.AssignmentLoader{}
input := loader.Load(2)

pos := 5
for _, line := range strings.Split(input, "\n") {
//fmt.Println(line)
for _, ch := range line {

switch string(ch) {
case "L":
if pos != 1 && pos != 4 && pos != 7 {
pos -= 1
}
case "R":
if pos != 3 && pos != 6 && pos != 9 {
pos += 1
}
case "U":
if pos != 1 && pos != 2 && pos != 3 {
pos -= 3
}
case "D":
if pos != 7 && pos != 8 && pos != 9 {
pos += 3
}
}
}
fmt.Print(pos)
}
}
5 changes: 5 additions & 0 deletions day2/input.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
LURLLLLLDUULRDDDRLRDDDUDDUULLRLULRURLRRDULUUURDUURLRDRRURUURUDDRDLRRLDDDDLLDURLDUUUDRDDDLULLDDLRLRRRLDLDDDDDLUUUDLUULRDUDLDRRRUDUDDRULURULDRUDLDUUUDLUDURUURRUUDRLDURRULURRURUUDDLRLDDDDRDRLDDLURLRDDLUDRLLRURRURRRURURRLLRLDRDLULLUDLUDRURDLRDUUDDUUDRLUDDLRLUDLLURDRUDDLRURDULLLUDDURULDRLUDLUDLULRRUUDDLDRLLUULDDURLURRRRUUDRUDLLDRUDLRRDUDUUURRULLDLDDRLUURLDUDDRLDRLDULDDURDLUUDRRLDRLLLRRRDLLLLURDLLLUDRUULUULLRLRDLULRLURLURRRDRLLDLDRLLRLULRDDDLUDDLLLRRLLLUURLDRULLDURDLULUDLRLDLUDURLLLURUUUDRRRULRDURLLURRLDLRLDLDRRUUDRDDDDDRDUUDULUL
RRURLURRULLUDUULUUURURULLDLRLRRULRUDUDDLLLRRRRLRUDUUUUDULUDRULDDUDLURLRRLLDLURLRDLDUULRDLLLDLLULLURLLURURULUDLDUDLUULDDLDRLRRUURRRLLRRLRULRRLDLDLRDULDLLDRRULRDRDUDUUUDUUDDRUUUDDLRDULLULDULUUUDDUULRLDLRLUUUUURDLULDLUUUULLLLRRRLDLLDLUDDULRULLRDURDRDRRRDDDLRDDULDLURLDLUDRRLDDDLULLRULDRULRURDURRUDUUULDRLRRUDDLULDLUULULRDRDULLLDULULDUDLDRLLLRLRURUDLUDDDURDUDDDULDRLUDRDRDRLRDDDDRLDRULLURUDRLLUDRLDDDLRLRDLDDUULRUDRLUULRULRLDLRLLULLUDULRLDRURDD
UUUUUURRDLLRUDUDURLRDDDURRRRULRLRUURLLLUULRUDLLRUUDURURUDRDLDLDRDUDUDRLUUDUUUDDURRRDRUDDUURDLRDRLDRRULULLLUDRDLLUULURULRULDRDRRLURULLDURUURDDRDLLDDDDULDULUULLRULRLDURLDDLULRLRRRLLURRLDLLULLDULRULLDLRULDDLUDDDLDDURUUUURDLLRURDURDUUDRULDUULLUUULLULLURLRDRLLRULLLLRRRRULDRULLUURLDRLRRDLDDRLRDURDRRDDDRRUDRLUULLLULRDDLDRRLRUDLRRLDULULRRDDURULLRULDUDRLRUUUULURLRLRDDDUUDDULLULLDDUDRLRDDRDRLDUURLRUULUULDUDDURDDLLLURUULLRDLRRDRDDDUDDRDLRRDDUURDUULUDDDDUUDDLULLDRDDLULLUDLDDURRULDUDRRUURRDLRLLDDRRLUUUDDUUDUDDDDDDDLULURRUULURLLUURUDUDDULURDDLRDDRRULLLDRRDLURURLRRRDDLDUUDR
URLLRULULULULDUULDLLRDUDDRRLRLLLULUDDUDLLLRURLLLLURRLRRDLULRUDDRLRRLLRDLRRULDLULRRRRUUDDRURLRUUDLRRULDDDLRULDURLDURLRLDDULURDDDDULDRLLUDRULRDDLUUUDUDUDDRRUDUURUURLUUULRLULUURURRLRUUULDDLURULRRRRDULUDLDRLLUURRRLLURDLDLLDUDRDRLLUDLDDLRLDLRUDUULDRRLLULDRRULLULURRLDLUUDLUDDRLURDDUDRDUDDDULLDRUDLRDLRDURUULRRDRUUULRUURDURLDUDRDLLRUULUULRDDUDLRDUUUUULDDDDDRRULRURLLRLLUUDLUDDUULDRULDLDUURUDUDLRULULUULLLLRLULUDDDRRLLDRUUDRLDDDRDDURRDDDULURDLDLUDDUULUUURDULDLLULRRUURDDUDRUULDLRLURUDLRDLLLDRLDUURUDUDRLLLDDDULLUDUUULLUUUDLRRRURRRRRDUULLUURRDUU
UDULUUDLDURRUDDUDRDDRRUULRRULULURRDDRUULDRLDUDDRRRRDLRURLLLRLRRLLLULDURRDLLDUDDULDLURLURUURLLLDUURRUUDLLLUDRUDLDDRLRRDLRLDDDULLRUURUUUDRRDLLLRRULDRURLRDLLUDRLLULRDLDDLLRRUDURULRLRLDRUDDLUUDRLDDRUDULLLURLRDLRUUDRRUUDUDRDDRDRDDLRULULURLRULDRURLURLRDRDUUDUDUULDDRLUUURULRDUDRUDRULUDDULLRDDRRUULRLDDLUUUUDUDLLLDULRRLRDDDLULRDUDRLDLURRUUDULUDRURUDDLUUUDDRLRLRLURDLDDRLRURRLLLRDRLRUUDRRRLUDLDLDDDLDULDRLURDURULURUDDDUDUULRLLDRLDDDDRULRDRLUUURD
54 changes: 54 additions & 0 deletions day2b/day2b.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package main

import (
"strings"

"fmt"

"github.com/jpastoor/advent-of-code-2016/aoc2016utils"
)

func main() {
loader := aoc2016utils.AssignmentLoader{}
input := loader.Load(2)

keypad := [][]string{
{"", "", "1", "", ""},
{"", "2", "3", "4", ""},
{"5", "6", "7", "8", "9"},
{"", "A", "B", "C", ""},
{"", "", "D", "", ""},
}

x := 0
y := 2

// Split input by line
for _, line := range strings.Split(input, "\n") {
// Split string in characters
for _, ch := range line {

switch string(ch) {
case "L":
if x != 0 && keypad[y][x-1] != "" {
x--
}

case "R":
if x != 4 && keypad[y][x+1] != "" {
x++
}
case "U":
if y != 0 && keypad[y-1][x] != "" {
y--
}
case "D":
if y != 4 && keypad[y+1][x] != "" {
y++
}
}
}

fmt.Print(keypad[y][x])
}
}
5 changes: 5 additions & 0 deletions day2b/input.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
LURLLLLLDUULRDDDRLRDDDUDDUULLRLULRURLRRDULUUURDUURLRDRRURUURUDDRDLRRLDDDDLLDURLDUUUDRDDDLULLDDLRLRRRLDLDDDDDLUUUDLUULRDUDLDRRRUDUDDRULURULDRUDLDUUUDLUDURUURRUUDRLDURRULURRURUUDDLRLDDDDRDRLDDLURLRDDLUDRLLRURRURRRURURRLLRLDRDLULLUDLUDRURDLRDUUDDUUDRLUDDLRLUDLLURDRUDDLRURDULLLUDDURULDRLUDLUDLULRRUUDDLDRLLUULDDURLURRRRUUDRUDLLDRUDLRRDUDUUURRULLDLDDRLUURLDUDDRLDRLDULDDURDLUUDRRLDRLLLRRRDLLLLURDLLLUDRUULUULLRLRDLULRLURLURRRDRLLDLDRLLRLULRDDDLUDDLLLRRLLLUURLDRULLDURDLULUDLRLDLUDURLLLURUUUDRRRULRDURLLURRLDLRLDLDRRUUDRDDDDDRDUUDULUL
RRURLURRULLUDUULUUURURULLDLRLRRULRUDUDDLLLRRRRLRUDUUUUDULUDRULDDUDLURLRRLLDLURLRDLDUULRDLLLDLLULLURLLURURULUDLDUDLUULDDLDRLRRUURRRLLRRLRULRRLDLDLRDULDLLDRRULRDRDUDUUUDUUDDRUUUDDLRDULLULDULUUUDDUULRLDLRLUUUUURDLULDLUUUULLLLRRRLDLLDLUDDULRULLRDURDRDRRRDDDLRDDULDLURLDLUDRRLDDDLULLRULDRULRURDURRUDUUULDRLRRUDDLULDLUULULRDRDULLLDULULDUDLDRLLLRLRURUDLUDDDURDUDDDULDRLUDRDRDRLRDDDDRLDRULLURUDRLLUDRLDDDLRLRDLDDUULRUDRLUULRULRLDLRLLULLUDULRLDRURDD
UUUUUURRDLLRUDUDURLRDDDURRRRULRLRUURLLLUULRUDLLRUUDURURUDRDLDLDRDUDUDRLUUDUUUDDURRRDRUDDUURDLRDRLDRRULULLLUDRDLLUULURULRULDRDRRLURULLDURUURDDRDLLDDDDULDULUULLRULRLDURLDDLULRLRRRLLURRLDLLULLDULRULLDLRULDDLUDDDLDDURUUUURDLLRURDURDUUDRULDUULLUUULLULLURLRDRLLRULLLLRRRRULDRULLUURLDRLRRDLDDRLRDURDRRDDDRRUDRLUULLLULRDDLDRRLRUDLRRLDULULRRDDURULLRULDUDRLRUUUULURLRLRDDDUUDDULLULLDDUDRLRDDRDRLDUURLRUULUULDUDDURDDLLLURUULLRDLRRDRDDDUDDRDLRRDDUURDUULUDDDDUUDDLULLDRDDLULLUDLDDURRULDUDRRUURRDLRLLDDRRLUUUDDUUDUDDDDDDDLULURRUULURLLUURUDUDDULURDDLRDDRRULLLDRRDLURURLRRRDDLDUUDR
URLLRULULULULDUULDLLRDUDDRRLRLLLULUDDUDLLLRURLLLLURRLRRDLULRUDDRLRRLLRDLRRULDLULRRRRUUDDRURLRUUDLRRULDDDLRULDURLDURLRLDDULURDDDDULDRLLUDRULRDDLUUUDUDUDDRRUDUURUURLUUULRLULUURURRLRUUULDDLURULRRRRDULUDLDRLLUURRRLLURDLDLLDUDRDRLLUDLDDLRLDLRUDUULDRRLLULDRRULLULURRLDLUUDLUDDRLURDDUDRDUDDDULLDRUDLRDLRDURUULRRDRUUULRUURDURLDUDRDLLRUULUULRDDUDLRDUUUUULDDDDDRRULRURLLRLLUUDLUDDUULDRULDLDUURUDUDLRULULUULLLLRLULUDDDRRLLDRUUDRLDDDRDDURRDDDULURDLDLUDDUULUUURDULDLLULRRUURDDUDRUULDLRLURUDLRDLLLDRLDUURUDUDRLLLDDDULLUDUUULLUUUDLRRRURRRRRDUULLUURRDUU
UDULUUDLDURRUDDUDRDDRRUULRRULULURRDDRUULDRLDUDDRRRRDLRURLLLRLRRLLLULDURRDLLDUDDULDLURLURUURLLLDUURRUUDLLLUDRUDLDDRLRRDLRLDDDULLRUURUUUDRRDLLLRRULDRURLRDLLUDRLLULRDLDDLLRRUDURULRLRLDRUDDLUUDRLDDRUDULLLURLRDLRUUDRRUUDUDRDDRDRDDLRULULURLRULDRURLURLRDRDUUDUDUULDDRLUUURULRDUDRUDRULUDDULLRDDRRUULRLDDLUUUUDUDLLLDULRRLRDDDLULRDUDRLDLURRUUDULUDRURUDDLUUUDDRLRLRLURDLDDRLRURRLLLRDRLRUUDRRRLUDLDLDDDLDULDRLURDURULURUDDDUDUULRLLDRLDDDDRULRDRLUUURD

0 comments on commit 779f959

Please sign in to comment.