Day 2 Complete
This commit is contained in:
parent
07749a232d
commit
9ec55d2a89
1
.gitignore
vendored
1
.gitignore
vendored
@ -24,3 +24,4 @@ _testmain.go
|
||||
*.test
|
||||
*.prof
|
||||
|
||||
othertests
|
||||
|
BIN
day02/day02
Executable file
BIN
day02/day02
Executable file
Binary file not shown.
5
day02/input
Normal file
5
day02/input
Normal file
@ -0,0 +1,5 @@
|
||||
DULUDRDDDRLUDURUUULRRRURDRDULRUDDUDRULUDDUDRLDULRRLRDRUDUUULUUDLRURDUDDDDRDLLLLULRDLDRDLRLULRUURDDUULUDLRURRDDRDDRDDLDRDLLUURDRUULRRURURRDLRLLLUDULULULULUDRLLRUDUURLDRLRLRDRRDRLLLDURRDULDURDDRLURRDURLRRRLDLLLDRUUURLRDLDLLLLRDURRLDLULRLDDLDLURLRRDDRUDDUULRURRUDLRDLDUURDDDDRLRURUDULUDLRRLLLLLRDRURLLDLDULUUDLUDDDRLLDRRUDLLURRUUDDRRLLRRLDDDURLDRDRLURRRRDRRRDDUDULULDURRUUURRRDULUUUDDRULDRLLRDLDURLURRLLRUUUULRDURLLDDRLLDLRLRULUUDRURUDLLURUDDRDURLRDRRRDURLDDRDRLRLLURULUUULUDDDULDLRDDDRDLLRRLDRDULLUUUDLDDLDDDLLLLLLLDUDURURDURDRUURRRDDRDUDLULDURDUDURDDDRULDURURURRLURLURLUURLULDLLRUULURDDRLRDDLRDLRRR
|
||||
LUURLRUDRRUDLLDLUDDURULURLUUDUUDDRLUULRDUDDUULDUUDRURDDRRDRLULLRDRDLRLLUURRUULRLDRULUDLDUUDDDRDDLRDLULDRLDUULDLRDLLLDLDLRDUULUDURRULLRLDUDRLLLULUUUULUUDUUURRRDULLUURUDRRLDURRUULDRDULDUDRDUUULUUDDRLUDRLDLDRUUURDLDUDRUDUURLLRRLRLLRRLDULDDULUDUUURULDDUDUDRURRDLULRUDDURDLDLLRRRLDRLULLLRUULDUDLUUDURRLLLRLUDURRDDLDRDDDLURDLDRRUDUDLUDULULRUUUDLUURLLRLDDLURULDURDLRRDDDDURLDDLLDDULLLRLDLDULDUUDDRLDUURDDLDLUUDULRRLRLUURURUURLRLURUURLDRUURLLRDDUUUDULUDDDRDRLDRDRRLRLDULLRRUDLURULULRDRURURLULDUDLRURLRDDRULDDLRD
|
||||
LUDRULUULRRDDDDRRDUURUDDRLDDLDRDURRURULRDLDLDUUDRRDUUDUDLLLRRLDUDDRLDDLRRLRDRLUDLULUDDUUDULDUUULUDLDDURLDURUDLDRUUDRLRRLDLDDULDUUDDLDDLLURDRLRUURDDRUDDUDLDRRLRUDRUULRRRLRULULURDLRRURDRLRULDDDRDUULLURUUUURUDDLRRRRRDURLULDLUULUDRRUDUDRRDDRURDURLRLUDDLDLRRULUDLDDRLDDLDDDLLLLRDLLUULDDLULDLDRDDUDLURUDLDLDDRRUUDDDLRLLLDRRDDDUURDUDURUURRDRLLDUDLDUULLDLDLLUULLRRULDLDRURLDULDRUURDURRURDLRDLLLDRRUDRUUDRURLUDDRURLDURRDLUUDLUUDULLLDDDDRRDLLLDLURULDDRDLUUURRDRRUUDDUL
|
||||
DUUULDUDDDURLLULDDLLUDURLLLURULULURUURDRURLRULLLLDRDDULRRDRRLLLRDDDUULLRRURRULLDDURRRLRDDLULDULLDUDLURRDLDDLURDLRLLDRURLLRLLRRRDRRRURURUUDDLLDDLDDDLRLURUUUULRDLUDDDURLLDDRLDRRLLUDUUULRLLDRRRLRUUDLDUULRLUDRULLLLDUDLLUUDDRUURLURUDRDDDLRURUDRLULLULUUDLDURDULRRDRLDURUULRDRRRDRDRRLRLRDDUULLRDLDURDDDULURRLULDDURDURDDUDURDLLUUULUDULRDDLDRDRUDLLUURDLRDURURULURULLDRLLRRULDLULULDLULRURLRRLUDLLLRLUDLURLULDULDRLLLDLDDDDRDRLRRLRDULUUDULDDLDURDLLLDDDDLLUURRDURLDLUDDLULRUUUDDRRLDLLLRDLLDRRRDDLULLURDDRRRRLDLRLLLRL
|
||||
LULLRRDURRLDUUDRRURLURURRRLRDRUULUULURLLURRDRULRDURDDDDUULLLLDUULDLULURDRLDLULULDRLLDLLRLRULURUDRUUDULRULLLUDRULUDRLLUDLDRRDRUUURURLRDURDRLRDDDURLURRDLRUUUDUURULULDLUULRDLRRRDRDRLLLDLRRDRLLDDULDRUDRRLULLRDLDUDDULRDDLULRURULRLLLULDLLLLRDLDRURUDUURURLDRLUULLDUDULUDDDULUDLRUDDUDLULLUULUUURULURRULRDDURDDLURLRRDRDLDULRLRDRRRULRDDDRLLDDDDRRRRDRDLULUURDURULDLRDULDUDLDURUDLUDLUDDDUDURDURDDURLLRUDUURRRUDRRRRULLLLDDDLUULLUULRRRULDLURDLULRULDRLR
|
111
day02/main.go
Normal file
111
day02/main.go
Normal file
@ -0,0 +1,111 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
input := stdinToStringSlice()
|
||||
var press []rune
|
||||
keypad := initKeypad("diamond")
|
||||
pos := '5'
|
||||
for _, i := range input {
|
||||
for _, j := range i {
|
||||
pos = moveFinger(j, pos, keypad)
|
||||
}
|
||||
press = append(press, pos)
|
||||
}
|
||||
fmt.Println("Code: ", string(press))
|
||||
}
|
||||
|
||||
func moveFinger(dir rune, start rune, keypad map[string]rune) rune {
|
||||
// Find the starting button
|
||||
var startX, startY int
|
||||
for k, v := range keypad {
|
||||
if v == start {
|
||||
// Found it
|
||||
strCoords := strings.Split(k, ";")
|
||||
startY = atoi(strCoords[0])
|
||||
startX = atoi(strCoords[1])
|
||||
}
|
||||
}
|
||||
switch dir {
|
||||
case 'U':
|
||||
newY := startY - 1
|
||||
if keypad[itoa(newY)+";"+itoa(startX)] != 0 {
|
||||
return keypad[itoa(newY)+";"+itoa(startX)]
|
||||
}
|
||||
case 'R':
|
||||
newX := startX + 1
|
||||
if keypad[itoa(startY)+";"+itoa(newX)] != 0 {
|
||||
return keypad[itoa(startY)+";"+itoa(newX)]
|
||||
}
|
||||
case 'D':
|
||||
newY := startY + 1
|
||||
if keypad[itoa(newY)+";"+itoa(startX)] != 0 {
|
||||
return keypad[itoa(newY)+";"+itoa(startX)]
|
||||
}
|
||||
case 'L':
|
||||
newX := startX - 1
|
||||
if keypad[itoa(startY)+";"+itoa(newX)] != 0 {
|
||||
return keypad[itoa(startY)+";"+itoa(newX)]
|
||||
}
|
||||
}
|
||||
return start
|
||||
}
|
||||
|
||||
func initKeypad(tp string) map[string]rune {
|
||||
ret := make(map[string]rune)
|
||||
switch tp {
|
||||
case "diamond":
|
||||
ret["0;2"] = '1'
|
||||
ret["1;1"] = '2'
|
||||
ret["1;2"] = '3'
|
||||
ret["1;3"] = '4'
|
||||
ret["2;0"] = '5'
|
||||
ret["2;1"] = '6'
|
||||
ret["2;2"] = '7'
|
||||
ret["2;3"] = '8'
|
||||
ret["2;4"] = '9'
|
||||
ret["3;1"] = 'A'
|
||||
ret["3;2"] = 'B'
|
||||
ret["3;3"] = 'C'
|
||||
ret["4;2"] = 'D'
|
||||
case "square":
|
||||
currKey := 1
|
||||
for i := 0; i < 3; i++ {
|
||||
for j := 0; j < 3; j++ {
|
||||
ret[itoa(i)+";"+itoa(j)] = rune(currKey)
|
||||
currKey++
|
||||
}
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func itoa(i int) string {
|
||||
return strconv.Itoa(i)
|
||||
}
|
||||
|
||||
func atoi(i string) int {
|
||||
var ret int
|
||||
var err error
|
||||
if ret, err = strconv.Atoi(i); err != nil {
|
||||
log.Fatal("Invalid Atoi")
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func stdinToStringSlice() []string {
|
||||
var input []string
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
for scanner.Scan() {
|
||||
input = append(input, scanner.Text())
|
||||
}
|
||||
return input
|
||||
}
|
113
day02/problem
Normal file
113
day02/problem
Normal file
@ -0,0 +1,113 @@
|
||||
Advent of Code
|
||||
|
||||
• [About]
|
||||
• [AoC++]
|
||||
• [Events]
|
||||
• [Settings]
|
||||
• [Log Out]
|
||||
|
||||
br0xen (AoC++) 4*
|
||||
|
||||
<y>2016</y>
|
||||
|
||||
• [Calendar]
|
||||
• [Leaderboard]
|
||||
• [Stats]
|
||||
• [Sponsors]
|
||||
|
||||
--- Day 2: Bathroom Security ---
|
||||
|
||||
You arrive at Easter Bunny Headquarters under cover of darkness. However, you left in such a rush that you forgot to
|
||||
use the bathroom! Fancy office buildings like this one usually have keypad locks on their bathrooms, so you search the
|
||||
front desk for the code.
|
||||
|
||||
"In order to improve security," the document you find says, "bathroom codes will no longer be written down. Instead,
|
||||
please memorize and follow the procedure below to access the bathrooms."
|
||||
|
||||
The document goes on to explain that each button to be pressed can be found by starting on the previous button and
|
||||
moving to adjacent buttons on the keypad: U moves up, D moves down, L moves left, and R moves right. Each line of
|
||||
instructions corresponds to one button, starting at the previous button (or, for the first line, the "5" button); press
|
||||
whatever button you're on at the end of each line. If a move doesn't lead to a button, ignore it.
|
||||
|
||||
You can't hold it much longer, so you decide to figure out the code as you walk to the bathroom. You picture a keypad
|
||||
like this:
|
||||
|
||||
1 2 3
|
||||
4 5 6
|
||||
7 8 9
|
||||
|
||||
Suppose your instructions are:
|
||||
|
||||
ULL
|
||||
RRDDD
|
||||
LURDL
|
||||
UUUUD
|
||||
|
||||
• You start at "5" and move up (to "2"), left (to "1"), and left (you can't, and stay on "1"), so the first button is
|
||||
1.
|
||||
• Starting from the previous button ("1"), you move right twice (to "3") and then down three times (stopping at "9"
|
||||
after two moves and ignoring the third), ending up with 9.
|
||||
• Continuing from "9", you move left, up, right, down, and left, ending with 8.
|
||||
• Finally, you move up four times (stopping at "2"), then down once, ending with 5.
|
||||
|
||||
So, in this example, the bathroom code is 1985.
|
||||
|
||||
Your puzzle input is the instructions from the document you found at the front desk. What is the bathroom code?
|
||||
|
||||
Your puzzle answer was 98575.
|
||||
|
||||
--- Part Two ---
|
||||
|
||||
You finally arrive at the bathroom (it's a several minute walk from the lobby so visitors can behold the many fancy
|
||||
conference rooms and water coolers on this floor) and go to punch in the code. Much to your bladder's dismay, the
|
||||
keypad is not at all like you imagined it. Instead, you are confronted with the result of hundreds of man-hours of
|
||||
bathroom-keypad-design meetings:
|
||||
|
||||
1
|
||||
2 3 4
|
||||
5 6 7 8 9
|
||||
A B C
|
||||
D
|
||||
|
||||
You still start at "5" and stop when you're at an edge, but given the same instructions as above, the outcome is very
|
||||
different:
|
||||
|
||||
• You start at "5" and don't move at all (up and left are both edges), ending at 5.
|
||||
• Continuing from "5", you move right twice and down three times (through "6", "7", "B", "D", "D"), ending at D.
|
||||
• Then, from "D", you move five more times (through "D", "B", "C", "C", "B"), ending at B.
|
||||
• Finally, after five more moves, you end at 3.
|
||||
|
||||
So, given the actual keypad layout, the code would be 5DB3.
|
||||
|
||||
Using the same instructions in your puzzle input, what is the correct bathroom code?
|
||||
|
||||
Your puzzle answer was CD8D4.
|
||||
|
||||
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/2016/about
|
||||
. http://adventofcode.com/2016/support
|
||||
. http://adventofcode.com/2016/events
|
||||
. http://adventofcode.com/2016/settings
|
||||
. http://adventofcode.com/2016/auth/logout
|
||||
. http://adventofcode.com/2016
|
||||
. http://adventofcode.com/2016
|
||||
. http://adventofcode.com/2016/leaderboard
|
||||
. http://adventofcode.com/2016/stats
|
||||
. http://adventofcode.com/2016/sponsors
|
||||
. http://adventofcode.com/2016/sponsors
|
||||
. http://adventofcode.com/2016
|
||||
. http://adventofcode.com/2016/day/2/input
|
||||
. https://twitter.com/intent/tweet?text=I%27ve+completed+%22Bathroom+Security%22+%2D+Day+2+%2D+Advent+of+Code+2016&url=http%3A%2F%2Fadventofcode%2Ecom%2F2016%2Fday%2F2&related=ericwastl&hashtags=AdventOfCode
|
||||
. https://plus.google.com/share?url=http%3A%2F%2Fadventofcode%2Ecom%2F2016%2Fday%2F2
|
||||
. http://www.reddit.com/submit?url=http%3A%2F%2Fadventofcode%2Ecom%2F2016%2Fday%2F2&title=I%27ve+completed+%22Bathroom+Security%22+%2D+Day+2+%2D+Advent+of+Code+2016
|
Loading…
Reference in New Issue
Block a user