Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
dbc4b5cf6b
|
|||
23a75d8f95
|
@ -48,7 +48,6 @@ type Day17 struct {
|
|||||||
|
|
||||||
func (d *Day17) Parse() {
|
func (d *Day17) Parse() {
|
||||||
d.program = u.LoadIntcodeProgram("17p")
|
d.program = u.LoadIntcodeProgram("17p")
|
||||||
// d.program.SetDebugASCIIPrint(true)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d Day17) Num() int {
|
func (d Day17) Num() int {
|
||||||
@ -389,8 +388,9 @@ func (d *Day17) Part2() string {
|
|||||||
row := 0
|
row := 0
|
||||||
var outputState int
|
var outputState int
|
||||||
var lastOutput int64
|
var lastOutput int64
|
||||||
|
var instructionStr string
|
||||||
d.program.RunIn(func(inputStep int) int64 {
|
d.program.RunIn(func(inputStep int) int64 {
|
||||||
panic("unexpected read")
|
return int64(instructionStr[inputStep-1])
|
||||||
}, func(val int64, state u.IntcodeProgramState) {
|
}, func(val int64, state u.IntcodeProgramState) {
|
||||||
rVal := rune(val)
|
rVal := rune(val)
|
||||||
if outputState == 0 {
|
if outputState == 0 {
|
||||||
@ -401,7 +401,7 @@ func (d *Day17) Part2() string {
|
|||||||
|
|
||||||
if rVal == '\n' && lastOutput == '\n' {
|
if rVal == '\n' && lastOutput == '\n' {
|
||||||
if outputState == 0 {
|
if outputState == 0 {
|
||||||
d.program.FeedInputString(beforeGrid.solvePath(beforeBotLocation, beforeBotFacing))
|
instructionStr = beforeGrid.solvePath(beforeBotLocation, beforeBotFacing)
|
||||||
}
|
}
|
||||||
outputState++
|
outputState++
|
||||||
row = 0
|
row = 0
|
||||||
|
85
days/21.go
85
days/21.go
@ -1,85 +0,0 @@
|
|||||||
package days
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
u "parnic.com/aoc2019/utilities"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Day21 struct {
|
|
||||||
program u.IntcodeProgram
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Day21) Parse() {
|
|
||||||
d.program = u.LoadIntcodeProgram("21p")
|
|
||||||
// d.program.SetDebugASCIIPrint(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d Day21) Num() int {
|
|
||||||
return 21
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Day21) Part1() string {
|
|
||||||
// if there's any hole up to 3 ahead of us but there's ground where we'd land if we jumped
|
|
||||||
// (a jump takes 4 spaces), go ahead and jump
|
|
||||||
cmds := []string{
|
|
||||||
// check if a hole at 1 or 2 ahead
|
|
||||||
"NOT A T",
|
|
||||||
"NOT B J",
|
|
||||||
// store that result in J
|
|
||||||
"OR T J",
|
|
||||||
// check if a hole at 3 ahead
|
|
||||||
"NOT C T",
|
|
||||||
// store hole in 1, 2, or 3 in T
|
|
||||||
"OR J T",
|
|
||||||
// set J true if hole in 1, 2, or 3
|
|
||||||
"OR T J",
|
|
||||||
// set J true if also no hole at 4 ahead
|
|
||||||
"AND D J",
|
|
||||||
"WALK",
|
|
||||||
}
|
|
||||||
instructionStr := strings.Join(cmds, "\n") + "\n"
|
|
||||||
d.program.FeedInputString(instructionStr)
|
|
||||||
|
|
||||||
res := d.program.Run()
|
|
||||||
|
|
||||||
return fmt.Sprintf("Hull damage value when walking: %s%d%s", u.TextBold, res, u.TextReset)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Day21) Part2() string {
|
|
||||||
// @
|
|
||||||
// #####.#.##.##.###
|
|
||||||
// ABCDEFGHI
|
|
||||||
// using the first program, this kills us. if we jump, we land at D and H becomes our new D, so it won't jump again.
|
|
||||||
// but if we waited to jump until we got one more ahead, we'd be ok.
|
|
||||||
// so now we want to know essentially the same thing as part 1, but also if our multiple (immediate second jump) would be successful.
|
|
||||||
// in problem terms, that's: if there's a hole at 1 or 2 ahead, and there's a hole at C with ground at H, and there's ground at D.
|
|
||||||
// so now for the above example we'd wait to jump until here:
|
|
||||||
// @
|
|
||||||
// #####.#.##.##.###
|
|
||||||
// ABCDEFGHI
|
|
||||||
// and all will be well.
|
|
||||||
cmds := []string{
|
|
||||||
// check if a hole at 1 or 2 ahead
|
|
||||||
"NOT A J",
|
|
||||||
"NOT B T",
|
|
||||||
// store that result in J
|
|
||||||
"OR T J",
|
|
||||||
// check if a hole at 3 ahead...
|
|
||||||
"NOT C T",
|
|
||||||
// and ground at 8 ahead (so we can immediately jump again if needed)...
|
|
||||||
"AND H T",
|
|
||||||
// combine those into J
|
|
||||||
"OR T J",
|
|
||||||
// and ensure we also still have a place to land if we jumped right away
|
|
||||||
"AND D J",
|
|
||||||
"RUN",
|
|
||||||
}
|
|
||||||
instructionStr := strings.Join(cmds, "\n") + "\n"
|
|
||||||
d.program.FeedInputString(instructionStr)
|
|
||||||
|
|
||||||
res := d.program.Run()
|
|
||||||
|
|
||||||
return fmt.Sprintf("Hull damage value when running: %s%d%s", u.TextBold, res, u.TextReset)
|
|
||||||
}
|
|
238
inputs/20p.txt
238
inputs/20p.txt
@ -1,113 +1,125 @@
|
|||||||
G R U E Z S S
|
J L P P V T X
|
||||||
W N C K Z G D
|
G V M I O R C
|
||||||
#################################.###########.###.#######.#########.#.#######.#####################################
|
#######################################.#######.###.###########.###.#.#######.#########################################
|
||||||
#.#.......#.#.........#.#.#.....#.#.....#.#.#...#.....#.........#.....#...#.#...........#.......#.....#.....#.#...#
|
#...#.........#.#...#.#...#.........#.....#.#.....#.......#...#...#.....#.#...........#...........#.......#...#.......#
|
||||||
#.#####.###.###.###.#.#.#.###.###.#.###.#.#.###.#.###.###.#####.#.###.###.#.###.#########.###.###.#######.###.#.###
|
###.#########.#.#.###.#.#######.###.###.###.#####.#.###.###.#####.###.###.#####.#.#######.#####.###.#.#####.#####.#####
|
||||||
#.#.#.#...#...#.#.#.#.................#.#...#...#.#.#...#.#.....#.#.#.#.....................#.#.......#.........#.#
|
#.#.....#...........#...#...#.#.#.....#.....#.#...#.#.....#.#.#.....#.....#.....#.#.#.#.......#.#...#.....#.#.#.....#.#
|
||||||
#.#.#.#.###.#####.#########.###########.#.#.#.###.#.#######.###.#.#.#####.###.#.###.#.###.#.###.#######.#######.#.#
|
#.#####.#####.###.#####.###.#.#######.#.#.###.#.#####.###.#.#.#.#########.#.#.#####.#.###.#######.#.#######.#.###.###.#
|
||||||
#...#...#.#.#.#.........#...#...#.......#.#...#.......#.....#.#.#.....#.....#.#...#.#.#...#.#...#.#.........#.#.#.#
|
#...#...#.....#...#.#...#.#.#...#.#.....#.#.......#...#.#.#...#.#.#.......#.#.#...............#.#.#.........#.#.#.....#
|
||||||
#.#.###.#.#.#.#####.#.#.#######.#.#######.###.#.###.#####.###.#####.#.###.#########.#.#.#######.#.#####.#####.#.#.#
|
###.#.#.#########.#.###.#.#.#.###.#.#.#########.#####.#.#.#.#.#.#.###.#####.###.#.#.#.###.#.###.###.#######.#.#.#.#####
|
||||||
#.#...#.#.#.#.#.....#.#.................#.#...#.#.#.....#...#.#.#...#...#.#.....#.#.#.#...#.#.#...........#.#.....#
|
#.....#...#.....#.........#...#.#...#.........#.....#.#...#.#.....#.....#.#.#...#.#.#.#...#...........#...#.........#.#
|
||||||
###.###.#.#.#.#.#.#####.#.###.#########.#.#######.#.#####.###.#.#.#.#####.#.#.###.#.#######.#.#.###.#######.###.#.#
|
#########.#####.#.#.#.#.#.###.#.#######.#####.###.#####.###.###.###.#####.#.#.###.#.#.###.#.#####.#.###.#########.###.#
|
||||||
#...#.......#...#.#.#.#.#...#.#.........#.....#.......#.#.......#.#...#.....#.....#.#...#.........#...#.#.#.#.#.#.#
|
#.#.........#.....#.#.#.#.#.......#.......#.#.#.......#.#...#.#...#...#...#.....#.#.#...#.#.....#.#.............#.#...#
|
||||||
###.#######.#######.#.###########.#.#####.###.#####.###.#.#####.#.###.#.#.###.#.#######.###.#####.#####.#.#.#.#####
|
#.###.###.#####.#########.###.#####.###.#.#.#####.#####.###.#.###.#.###.###.#.###.#######.###.#.#.#.#######.#####.###.#
|
||||||
#.......#.#...#.......#.........#.#.#...#.#.#.#.....#.....#...#.#...#.#.#.#...#...#...#...#...#.#.#...........#.#.#
|
#...#...#.....#.#.#...#.........#...#...#.#.....#.#.#.....#...#...#.......#.#.#.........#...#.#.#.#.......#.#...#.#.#.#
|
||||||
#.#.###.#.#.#########.#########.#.###.###.#.#####.#.###.#.#.#.#.#.###########.#.###.###.###.###.###.###.#.#####.#.#
|
#.#########.###.#.#.#####.#.###.###.#######.###.#.#.#.###.###.###.#.#.#.###.#####.#.###.#.#.###.#.#.#.#######.#.###.#.#
|
||||||
#.#...#.....#.#...#.#.#.#.#.............#.....#...#...#.#.#.#...#...#.#.#.....#.........#...#.......#...#...#...#.#
|
#...#.......#.#.#.....#.#.#.#...........#.....#.....#.#...#.....#.#.#.#.#.......#.#.#...#.#.#.#.#.#.#...#...#.#.#.#...#
|
||||||
###########.#.#.###.#.#.#.#######.#####.#.#####.#.#######.#####.###.#.#.#####.#.#.###.#####.###.#############.#.#.#
|
#.#########.#.###.###.#.###########.#########.###########.#.###.###.###.#########.#########.#.#####.#.###.###.###.###.#
|
||||||
#.#.#.#.#.....#.#.....#.#.#.#.....#...#.#.....#.#.....#...#.#.#...#...#.#.#...#.#...#...#...#...#...#.#.......#.#.#
|
#...#.#.#.......#.#.....#.....#.....#.#.......#.#...#.#...#...#.#.#.#.#.#...#...........#.#.....#...#.....#...#.......#
|
||||||
#.#.#.#.###.###.#####.#.#.#.#####.#.###.#.#########.#######.#.#.###.###.#.#.###.###.#####.#####.#.###.#####.#####.#
|
###.#.#.#####.#####.###.#####.#####.#.#####.###.###.#.###.#.#####.#.#.###.#######.#######.#.#######.#.###.###.#####.###
|
||||||
#.#...#.#...#.#.#...#...#.#.....#.#.....#.#...#.....#.......#.#.#...#.....#.#.#.#.......#.......#...#.#.#...#.#...#
|
#.....#.#.#.#.....#.#.#.........#.#.....#.#...........#...#.....#.........#...#...#...#...#.#.#...#.#.#.#...#.#.#.....#
|
||||||
#.#.#.#.###.#.#.###.#.###.#.#####.#.###.#.###.###.###.#.#.###.#.#.###.#.#.###.#.###.#####.#.#####.###.#.###.#.###.#
|
#.#.#.#.#.#.#.#######.#########.#.###.###.###.#####.#####.#.#######.#########.###.###.###.###.#.#####.#.#####.#.#.#.###
|
||||||
#.#.#.#.#...#.#...#...#.#.#...#...#...#.#.#.....#.#...#.#.#.....#.#...#.#.#.......#.......#...#.#.....#.........#.#
|
#.#.#.......#.....#.#.#.#.#.#.#.#.....#...#...#.#.#.#...#.#.#.#.#.....#...#...#...#...#.....#.....#.#.#.#...#...#.#.#.#
|
||||||
#.#.###.###.#.#.#####.#.#.#.###.#.#####.#.#.###.#.###.#.###.#.###.#.###.#####.#####.#####.#####.###.#########.#.#.#
|
#####.#####.#.#####.#.#.#.#.#.#.###.#####.#.###.#.###.###.#.#.#.#.#.###.###.#.#.#####.#.#.#######.#.###.#.#####.###.#.#
|
||||||
#.....#...#.......#.#.#.......#.#.#...#.#...#.#.#.....#...#.#...#...#.#...#.......#...#.#...#...#...#.#.#.#.#.#.#.#
|
#.#.#.#.....#.....#.......................#...#...#.......#.....#.#.#.......#.#.........#...#.#.#.#...#.....#.#.#.....#
|
||||||
###.###.#######.###.#.#.#.#.#########.#.#####.#.#.#####.#######.#####.#.#####.#.#.###.#.#######.###.#.#.#.#.#.###.#
|
#.#.#######.#.#######.###.#.#####.#######.#.#####.#.#.###.###.#####.#######.#.###.#######.#.#.#.#.#.#####.###.#.###.###
|
||||||
#.....#...#.#.#.......#.#.#.#.#.......#...#.....#.#.....#.......#.......#.#...#.#.#.#...#.....#.#.....#.#.#...#.#.#
|
#...#...........#.#.#.#...#.#...#.#...#.#.#.....#...#...#.#...#...........#.#...#.....#.#.#...........#...#...#.#...#.#
|
||||||
###.###.###.#.#######.#.#####.#####.#.#.###.#########.#.###.#.#####.#####.###.#####.#######.###.###.###.#.#.###.#.#
|
###.#.#.###.#.###.#.#.#.#####.#####.###.#.#.#######.#.#.#.#.###########.###.###.#.#.#.#.#.#.#.#.###.#.###.###.#.#.#.#.#
|
||||||
#.....#.......#...#...#...#.#.#.#.#.#.#.#.......#.#...#.#.#.#...#.......#...#.......#...#.....#...#.#.........#...#
|
#.....#.#.#.#.#.....#.#...#...#.#.#.....#.#.....#...#.#.#.#...#.#.#...#.#...#.#.#.#.#.#.#.#.#.#.#.#.#...#.......#.#...#
|
||||||
#.#####.#######.###.#.#.###.#.#.#.#.#.#.###.#.###.#.#####.#####.#####.#####.###.#######.###.###.###.#########.#.###
|
###.#.#.#.#.#####.###########.#.#.#.###.#.#.#####.#.#######.###.#.#.#.#.#.#.#.#.#.#####.#.#######.#######.#.###.#.#####
|
||||||
#...#...#...#.#.#...#.#.#.#.........#.....#.#.....#.......#.......#...#.............#...#...#.#.........#...#.#...#
|
#.#.#.#.#...#.#.......#.......#.....#.#.#.#...#.#.#.......#.......#.#...#.#.#.#...#.#...#.#...#...#...#...#.#...#.....#
|
||||||
#.###.###.###.#.#####.#.#.#.#####.#############.#######.#####.#####.#######.###########.###.#.###.#######.###.#.###
|
#.#########.#.###.#.#####.#.#.#####.#.#.#.###.#.###.###.#########.#.#######.#.#####.###.###.###.#####.#########.###.###
|
||||||
#...#...#...#...#.#...#...#.# S L B V G R #.#.#.#.....#.#.......#.#...#
|
#.....#.#.#.#.....#...#...#.#.#.......#...#.....#.....#...#.......#.....#.................#...#...#.........#.#.#.#...#
|
||||||
#.###.#.#.#####.#.###.#.###.# D M E H X Q #.#.#.#####.#.###.#####.#.###
|
#.#####.#.#.#######.#######.#########.#########.#########.#.#########.#.#######.#########.#.###.#####.#######.#.#.#.###
|
||||||
#.....#.#.................#.# #.........................#.#
|
#.....#.#.#.#...#.#.#.#.#.#...# F O O X N U W #.#.....#.#.#...#.#.#.........#
|
||||||
#.###.###.#####.#.#.#.###.### #.#.#.###.#######.###.#.#.#.#
|
#.#####.#.#.#.###.#.#.#.#.#.### Z G D L B Y W ###.#####.#.###.#.#.###.###.###
|
||||||
#.#.#.....#.#...#.#.#.#.....# RZ..#.#...#.....#.#...#.#.#.#..BE
|
#...#.#.#.#.#.#...#.......#...# #.......#.....#...#...#.#.#...#
|
||||||
#.#.#####.#.#####.#.#####.### #######.#####.#.#.#######.#.#
|
#.###.#.#.#.#.###.#.#.###.#.#.# #.#.#######.###.#.###.#.#.#.###
|
||||||
#.....#.#.....#.#.#.....#.#.# #.#.#.#.#.#...#.......#...#.#
|
PL....#.#.#...#...#...#...#...#.# #.#.#.#.#...#.#.#.....#.#.#.#.#
|
||||||
###.###.###.#.#.#.#.###.#.#.# #.#.#.###.#####.#.#######.#.#
|
#.###.#.###.#.###.#.#.#.###.#.# #.###.#.#.###.###.#######.#.#.#
|
||||||
RI....#.....#.#.#...#.#.#.#....UW #.#.......#...#.#.#.#...#...#
|
#.......#.#.......#.#.#.#...#..EL PM..#.........#.#.....#.#.......#
|
||||||
#####.###############.###.### #.###.#####.#.#####.#.#.#####
|
#.#.#.###.###.#.#.###########.# #.###.###.###.#.#.#.#.###.###.#
|
||||||
#.....#.#.#...#.#.....#.#...# GW..........#.#.........#.#...#
|
#.#.#.........#.#.#.....#...#.# #.#.#...#.......#.#.......#....BR
|
||||||
#.###.#.#.#.###.###.###.##### #.###.#.#.###.#######.###.###
|
#############.#.#####.###.##### #.#.###.#########.#.#.###.###.#
|
||||||
#...#...#.....#.#.......#....FM #.#...#.#.....#...#.........#
|
YP..#.........#.#...#.#.#.#.....# #.#...#.....#.#.#.#.#...#...#.#
|
||||||
###.###.#.#.#.#.#.#########.# ###.#######.###.###########.#
|
#.#.###.#.#####.###.#.#.###.#.# #.#.#.###.###.#.###########.#.#
|
||||||
AJ..#...#...#.#...#...#.....#.# #...#.#.#...#...#.#...#.#.#..GX
|
#...#.#.#.#.#.#.#...#.....#.#.# #...#.....#.#.#.#...#.#...#.#.#
|
||||||
#.#.#########.#.#.#######.#.# #####.#.#######.#.###.#.#.###
|
#.###.###.#.#.###.#.#.#.###.### ###########.#.#.#.###.###.###.#
|
||||||
#.....#.#.#.#.#.............# #...............#...#........DD
|
#...#.#...........#...#........TH #.......#...............#...#.#
|
||||||
#######.#.#.###########.###.# ###.#######.###.#.#.#.#.###.#
|
###.#.#####################.### #.#####.#.###.###.#####.#.#.###
|
||||||
#.....................#.#...# #.......#.....#...#.#.#.#...#
|
EV..#.#...#.................#...# LV..#.#.....#...#...#.#.#...#.#..UN
|
||||||
###.###.#.#.###.#####.####### #####.#########.###.#.###.###
|
#.###.#.#####.#.###.#.#.###.### #.#.#.###.###.#.#.#.#.#####.#.#
|
||||||
GP..#...#.#.#.#.....#.#...#...# SG..#...#.....#...#.#.....#...#
|
#.#...#...#...#.#...#.#.#.#...# #.#...#.#.#.#.#.#.#.#.......#.#
|
||||||
#.###.#####.#.#.#.#.###.###.# #.#.###.#.#######.#######.###
|
#.#.#####.#.#.#.###.###.#.##### #######.###.#######.#.#######.#
|
||||||
#.#.....#.#.#.#.#.#.....#...# #.....#.#.#.#...#.#.#...#.#.#
|
#.#.#.....#.#.#...#.#.#.......# #.#.......#.....#.#.#.........#
|
||||||
#.#.#####.#########.#######.# #########.#.###.#.#.#.#####.#
|
#.#.#.#######.#######.###.#.#.# #.#####.#.###.###.#.###########
|
||||||
#.....#...#..................SI DD....#........................UW
|
#...#...........#...#...#.#.#..XC #...#.#.#.........#...........#
|
||||||
#.#######.#####.###.###.##### #.###.#####.#.###.#.###.#####
|
#######.#########.###.###.##### #.#.#.###.###.###.###.#.#.#.###
|
||||||
#.#.#...#...#.....#.#.#.#.#..AJ #.........#.#.#.#.#.#.....#.#
|
WV..#.#.#.#...............#.#.#.# #.#...#.#.#.#.#.......#.#.#....OD
|
||||||
###.#.###.#.#########.###.#.# #.#####.###.#.#.#######.###.#
|
#.#.#.#.#.#.#.###.#####.###.#.# #.###.#.#.#.#########.#########
|
||||||
#.........#.#...#.....#.#.#.# #...#.....#.#...#.#.#.#.#....LM
|
#.....#.#.#.#...#.#.....#.#.#..PI #.#.....#...#.....#.#.....#...#
|
||||||
#########.#.###.#.###.#.#.#.# #########.#.#.###.#.#.#####.#
|
#####.###.#####.#.#####.#.#.#.# #.#.#.#.###.###.###.#########.#
|
||||||
AA......#.#.#.....#.#...#.....# #.#.#.#.#.#.#.#...#.#.#.....#
|
AA........#.....#.#.#...#.......# UN..#.#.#.....#...#...#.#.#.#...#
|
||||||
#.#####.#.#.###.#.#.###.#.### #.#.#.#.#########.#.#.#####.#
|
#.#######.###########.###.###.# ###.###########.###.#.#.#.###.#
|
||||||
JO..........#...#...#.....#...# #.#.......#.#.............#.#
|
#...........#.#.#.#.....#.#.#.# #...#...#.......#..............OA
|
||||||
#####.###############.###.#.# #.#.#.#####.###.###.#.###.#.#
|
#.#.#.#.#.#.#.#.#.###.#####.### #####.#.#.#.###.#.#.###.###.#.#
|
||||||
#.#.#...#.........#.#.#.#.#.# TX....#.............#.#...#...#
|
#.#.#.#.#.#.....#.............# #.#...#...#.#.....#.#...#...#.#
|
||||||
#.#.#######.#.#.#.#.###.###.# #.###.#.###.#####.###########
|
#################.#########.### #.#.###.#.#########.###########
|
||||||
VH......#.....#.#.#.....#...#.# #.#...#.#...#...#.#.....#...#
|
#.....#.#.#.#.......#.....#...# #.#...#.#.#.......#.#.#.....#.#
|
||||||
#####.#.###########.###.##### #############.#####.###.#.#.#
|
#.#.###.#.#.#######.#.###.###.# #.#.###.#.#.#########.#.#####.#
|
||||||
#.....#.....#.#.......#.....# #.#...#...#.#.......#.#.#.#..RZ
|
#.#.#...#...#.#...#.....#.#.#.# SL....#.#.#.#.#.#.....#...#.#...#
|
||||||
#.#.#######.#.#######.#.##### #.###.###.#.###.#.###.#.#.###
|
#.#.#.#.#.###.#.#.#######.#.#.# #####.#####.#.#.#.#####.#.#.###
|
||||||
#.#...........#.#............FW RN..#.....#...#.#.#.#.....#...#
|
EL..#...#.........#.........#.#..WV #...............#.#.#..........XP
|
||||||
#########.###.#.#.########### #.#.#.###.###.###.#.#####.###
|
#.###########.###.#########.### #.#########.###.###.###.#####.#
|
||||||
#...#...#.#.....#.#.........# #...#.............#.......#.#
|
#.#.......#...#...#...........# #.#.....#...#...#...#.......#.#
|
||||||
#.#.#.#################.#.#.# ###############.###########.#
|
###.#####.###.#########.#.###.# #.#.###.#.#.#####.#.#####.#.#.#
|
||||||
AX..#...#.#...#.#...#...#.#.#..HR JO............#.#.#...........#
|
UY..#...#.....#.#.........#.#....XP PL..#...#...#.#.#.#.#...#...#.#.#
|
||||||
#.#.###.###.#.#.#####.###.#.# #.#.#####.#.#.###.#.#.#####.#
|
#.#.###.#.###########.#.#.##### #.###.#######.#.###.#.#.#####.#
|
||||||
TX..#...#.......#...#.....#.#..EK #.#...#.#.#.......#.#...#.#..MM
|
#.#.#...#.#.#.#.#.#...#.#.....# #...#...............#.....#.#.#
|
||||||
###.#.###.#.#.#.#.###.#.#.### #.###.#.#######.#.###.###.#.#
|
#.#.#.#####.#.#.#.###.###.##### #.#.###############.#.#.###.#.#
|
||||||
#...#.....#.#...#.....#.....# #.#.#.....#.#...#...#.#.....#
|
#...#...................#.....# #.#.#...........#...#.#.#...#.#
|
||||||
#####.#.#.#####.###.#######.# R Y G U A M S #.#.#.#.###.#####.#.#.###.#.#
|
###############.############### #.#.###.#######.###########.###
|
||||||
#.....#.#...#.....#.....#...# I Q P C X M Y #...#.#.#.....#...#.#...#.#.#
|
#...........#.#.#.............# #.#.#.....#...........#...#.#.#
|
||||||
#####.#########.###.#####.###########.#####.###.###########.#####.###########.#.#######.#.###.#.#########.#.#####.#
|
#####.#.#.###.###.#######.###.# #########.#.#.###########.#.#.#
|
||||||
#...#...#.#.......#.....#...#...#.....#.....#.....#.#.....#...#...........#...#...#...#.#.#.....#.#.......#.#.....#
|
#.....#.#.#.#.#.........#.#...# #.#.#.....#.#.#...#...#...#....TH
|
||||||
#.#.#.###.###.#.#.#######.#####.###.###.###.#####.#.###.#.#.#########.#####.#####.#.#########.###.###.#####.###.#.#
|
#.#####.###.#.#######.#####.### #.#.###.#.#.#########.###.#.#.#
|
||||||
#.#.......#...#.#.#.......#.....#.#.#.....#.#.....#...#.#.......#.#.#...#.......#.#.......#.#.#.#.....#.......#.#.#
|
ZZ....#...#...#.#...........#.#.# JG........#.#.................#.#
|
||||||
#.#.#.#.#####.###########.#####.#.#.#.#.#.#####.###.###.#########.#.#.#######.###.#.#######.###.###.#.###.#.#.#.#.#
|
###.#.###.#.#.###.#.#.#####.#.# #.###.#.###.#.#.#####.###.#.###
|
||||||
#.#.#.#...#.......#.......#.........#.#.#.....#.#.....#.........#.........#.#.#.....#.......#.......#.#.#.#.#.#.#.#
|
JH....#.....#.......#.#...#......EV #.#...#...#.#.#...#.....#.#...#
|
||||||
#######.#.#.#.#####.#.#########.#############.#.#.###.#######.#####.#.#####.#.#.#######.#####.#.#.###.#.#.#######.#
|
#.#.#######.#.#####.#.#####.### #.###.#########.###.#.#####.#.#
|
||||||
#.......#.#.#...#...#.#.........#.......#...#.#.....#.#.......#.....#...#.....#...........#.#.#.#.#.....#...#.....#
|
#.#.#.......#.#.#.#.#.....#.#.# #.#...#...........#.#.#.#...#.#
|
||||||
#.#.#.#####.#.#.#####.#.#######.#.###.###.###.#.###.#.#.###.#.#.#.###.#.#####.#.###.#.#.###.###.#.#.#.#####.#####.#
|
#.#.###.#.#.###.#.#.#######.#.# V J Y T C B O #.#####.###.#.###.#.###.###.#.#
|
||||||
#.#.#.#.....#.#.#.....#...#.#.....#...#.......#.#...#.#...#.#.#.#...#.#.#.....#.#...#.#.......#.#.#.#...#.#.#.....#
|
#.#.#...#.#...#.....#.#.......# O H P R K R A #.#.....#...#...#.#.#.#.....#.#
|
||||||
#.###.###.#.###.###.#.#.###.#.#.#.#.###.###.#.#######.###.#.###.#######.#.#.#.#####.#.#.#.#############.#.#####.###
|
#.#.#.#.###.#.#.#.#.#.#.###.#.#####.#####.###########.#######.#####.#####.#######.###############.#.#.#.###.#.#.#.#.###
|
||||||
#.#.#.#.#.#...#.#...#.#.#.....#.#.#...#...#.#...#.....#...#...#...#.....#.#.#.....#.#.#.#.#.....#.#.#.......#...#.#
|
#.#.#.#.#...#.#.#.#...#...#.#.#.......#.......#...#.....#.....#.......#...#...#.........#.#.#.....#.#.#.#.#.#...#.#.#.#
|
||||||
###.#.#.#.#.###.#####.#############.#.#.#.#.#######.###.###.###.#############.#####.#####.###.###.#.#.#####.###.#.#
|
###.#####.#.#######.###.###.#######.#####.#####.###.#######.###.#######.###.#.#.#.#.###.#.#.###.#####.###.#########.#.#
|
||||||
#.......#.#.#.....#...#.#.......#...#.#.#.#.#.#.#.#...#...#.#.....#.#.#...#.....#.#.#...#...#.......#.....#...#...#
|
#.....#.#.#.....#...#...#.#.#...........#.........#.....#...#.#.....#.#.....#.#.#.#.#.....#...#.#.#.........#.........#
|
||||||
###.###.#.###.#########.#######.#####.#.#####.#.#.#.###.#######.###.#.#.#####.###.#.#.###.###.#####.#.#.###.###.###
|
#.#####.#.###.#####.#####.#.#.###.###.#.###.#.###.#####.#.#.#.#.#####.###.###.#.#####.#.###.#####.###.###.###.#.#.###.#
|
||||||
#.....#.#.#.....#.....#.#.......#.#.#.#...#.......#.#.......#...#.....#.......#.........#.#.#.....#.#.#.#...#.....#
|
#...#...#...#.#.........#...#.#...#.#.#.#.#.#...#.#.....#.#...#.......#.#.#...#.#...#.#.#.....#.#.....#.....#.#.#.#...#
|
||||||
#.#####.#.###.#.#####.#.#######.#.#.#.#.#######.#.#.###.#####.#.###.#.###.#.#####.###.#####.#.#######.###.#.#.#.###
|
#######.#####.#####.#######.#####.#.#.###.#####.#####.###.###########.#.#####.#.#.#########.###.###.#.###.#######.###.#
|
||||||
#.#.....#.#...#...#.......#.#.....#...#.#.#.....#...#.......#.#.....#.#...#...#.#...#...#.#.#.....#.#.#.#.#.#.#...#
|
#.......#.#.....#...#.........#...#.#.#...#.........#...#.#.#.......#...#.#.#.#...#...#...#.#.....#.#.#.#.#.........#.#
|
||||||
#####.#.#.###.#######.#.###.###.#.#.###.#.#####.#######.#######.#.#####.###.###.###.#####.#.#.#####.###.#######.#.#
|
#.#.#.#.#.#.#####.#####.###.#####.#.#.#.#####.#.#.#.###.#.#.#####.#.#.###.#.#.#.###.###.###.###.###.###.###.#.###.#####
|
||||||
#.#.#.#.#.#.#.#...#...#...#.#.#.#...#.......#.#.....#.#.#...#...#.....#.#.......#.........#.#...#.#.........#.#.#.#
|
#.#.#.#.......#...#...#.#...#.......#.#...#...#.#.#.#.#.#.....#...#.#.....#...#...#.#.#.........#.#...#...#.#.#.......#
|
||||||
#.#.#######.#####.#####.###.#.#.#########.###.#####.#.#.#.#######.#########.#.###.#########.###.#.#.#########.#.#.#
|
#######.###.###.#.#.###############.###.#####.###.###.#.#.#.#.#.#.#.#.###.###.###.#.#.#.###.#.###.###.#.#.#.#####.#.#.#
|
||||||
#...#.#.#.#.....#.#...................#...#...#...#...#.....#...#.#...#...#.#.#.....#.#.......#.#.#.#.#.#.#...#.#.#
|
#...#.#.#.....#.#.#.#.........#.#.........#.....#.#...#.#.#.#.#.#.#.....#.#...#...#...#...#.#.....#.#.#.#.......#.#.#.#
|
||||||
###.#.#.#.#.###.#.#####.#############.###.#.#.#.#.###.#.#.#####.#.#.#####.###.#.###.#.#####.###.#.#.#.#.#.###.#.###
|
#.###.###.#.#####.#.#########.#.#######.#.###.#####.###.#.#.#####.###.#######.#.###.###.#######.#.#.#####.#.#.#.###.###
|
||||||
#...........#.#.#...#...#.#.......#.#...#...#.#.#...#.#.#...#.#.......#.....#.#...#.#.#.#.#.....#.....#.#.....#...#
|
#.....#...#...#.#.....#...............#.#.#.....#.......#.#.#.....#.#...#.....#.....#.....#.....#.....#.#.#.#.#.#.....#
|
||||||
#####.#.#.#.#.###.#####.#.#.#.###.#.#.#######.#.###.#.#.###.#.#####.###.###.#.#.###.#.#.#.#.#####.###.#.#.#########
|
#####.#.#.###.#.#.#########.#####.###.#.###.###.#######.#.#####.###.#.#.#####.#.###.#.#.#######.#.#.###.#.#######.#.#.#
|
||||||
#.#...#.#.#.............#...#...#...#.....#...#...#...#.#.#.#...#...#...#.#...#.#...................#.............#
|
#.......#.#.#.#.....#.......#.#...#.#.....#.#...#.#.#...#...#.......#.#.#.....#.#.....#...#...#.#.#.#.......#.#.#.#.#.#
|
||||||
#.#####.#######.#.###.###.#.#.#####.#.#######.###.#####.#.###.#.#.#####.#.###.#.#.#####.###.#####.###.#.###.#.#####
|
#.###.#.#.#.###.#######.#####.#.#.#####.#.###.###.#.#.#.#.#####.#####.#####.###.#.###.###.#.###.#.###########.#.#.#.#.#
|
||||||
#.......#.......#...#...#.#.#.#.........#.....#.....#.......#.#.......#.....#.#.#.....#...#.....#...#.#...#.#.....#
|
#.#.#.#.#...#...#...#.#.#.#.#.#.#.....#.#...#...#.....#.#...#.#.....#.#.......#.#.#...#.#.....#.#.#.........#...#.#.#.#
|
||||||
###################################.#######.###.#########.#######.#########.#######.###############################
|
#.#.#.#.#.###.#####.#.###.#.#.###.#######.#####.#.###.###.#.#.#.#############.#######.#.#.###.#####.#.###.###.#####.###
|
||||||
Y S R S F F H
|
#.#.#.#.#...#...#.#.....................#.#.....#...#.#...#...#.#...#.#.......#...#.#...#.#.#.#.....#.#.........#.#...#
|
||||||
Q Y Q I M W R
|
#.#.#.#.#.#######.#####.#####.#####.#########.#.#.#########.#.#.###.#.#####.###.###.#.#.###.#####.#########.#####.#####
|
||||||
|
#.#...#.#.#...#.........#.#.#.#.......#...#.#.#.#.........#.#.#.#.....#...........#...#.#.......#.#.#.#.#...........#.#
|
||||||
|
#.#######.###.###.#######.#.#####.#####.###.#.#######.#####.###.###.#.###.###.#######.#######.###.#.#.#.###.###.###.#.#
|
||||||
|
#.....#.#.#.#.#.#.#.#.....#.........#.........#.#...#...#.#...#.....#.#.#...#.#.#.#.#.....#...............#...#.#.....#
|
||||||
|
#.#####.###.#.#.###.#####.#######.#####.#.###.#.#.#.#.###.#.#########.#.#.###.#.#.#.#.#########.#####.#.#.#######.#.#.#
|
||||||
|
#.#.#.......................#.#.#.#...#.#.#.....#.#...#.#...#.#.#.......#.#.....#.#...#...#.........#.#.#.......#.#.#.#
|
||||||
|
#.#.#.###.#####.#########.#.#.#.#.#.###########.#.###.#.#.###.#.###.###.###.#####.###.###.#.#.#.#.###.#####.#.###.#####
|
||||||
|
#.#...#.#.#.#...#.........#.........#...#.#.....#...#.#.......#...#...#.#.....#...#.........#.#.#...#...#...#.#.#...#.#
|
||||||
|
#######.###.###.#####.#####.#####.#.#.###.###.###.#######.#.#.#.#####.#######.#.#.#.#####.#####.#.#.#.#####.###.#####.#
|
||||||
|
#...............#.....#.......#...#.....#.......#.....#...#.#.#.......#.......#.#.......#.....#.#.#.#.....#...........#
|
||||||
|
#####################################.#####.#######.#######.###.#########.#####.#######################################
|
||||||
|
O C N X F S W
|
||||||
|
G K B L Z L W
|
File diff suppressed because one or more lines are too long
1
main.go
1
main.go
@ -54,7 +54,6 @@ var dayMap = []day{
|
|||||||
&days.Day18{},
|
&days.Day18{},
|
||||||
&days.Day19{},
|
&days.Day19{},
|
||||||
&days.Day20{},
|
&days.Day20{},
|
||||||
&days.Day21{},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
@ -28,8 +28,6 @@ type IntcodeProgram struct {
|
|||||||
program []int64
|
program []int64
|
||||||
relativeBase int
|
relativeBase int
|
||||||
haltRequested bool
|
haltRequested bool
|
||||||
printASCII bool
|
|
||||||
feedInput []rune
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type IntcodeProgramState struct {
|
type IntcodeProgramState struct {
|
||||||
@ -142,15 +140,14 @@ func (p *IntcodeProgram) Reset() {
|
|||||||
p.relativeBase = 0
|
p.relativeBase = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *IntcodeProgram) Run() int64 {
|
func (p *IntcodeProgram) Run() {
|
||||||
return p.RunIn(func(int) int64 { return 0 }, func(int64, IntcodeProgramState) {})
|
p.RunIn(func(int) int64 { return 0 }, func(int64, IntcodeProgramState) {})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *IntcodeProgram) RunIn(inputFunc ProvideInputFunc, outputFunc ReceiveOutputFunc) int64 {
|
func (p *IntcodeProgram) RunIn(inputFunc ProvideInputFunc, outputFunc ReceiveOutputFunc) {
|
||||||
p.init()
|
p.init()
|
||||||
|
|
||||||
inputsRequested := 0
|
inputsRequested := 0
|
||||||
lastOutput := int64(0)
|
|
||||||
for instructionPointer := 0; instructionPointer < len(p.program) && !p.haltRequested; {
|
for instructionPointer := 0; instructionPointer < len(p.program) && !p.haltRequested; {
|
||||||
instruction := p.GetMemory(instructionPointer)
|
instruction := p.GetMemory(instructionPointer)
|
||||||
instructionPointer++
|
instructionPointer++
|
||||||
@ -187,28 +184,13 @@ func (p *IntcodeProgram) RunIn(inputFunc ProvideInputFunc, outputFunc ReceiveOut
|
|||||||
case opInput:
|
case opInput:
|
||||||
inputsRequested++
|
inputsRequested++
|
||||||
param1 := p.GetMemory(instructionPointer)
|
param1 := p.GetMemory(instructionPointer)
|
||||||
var inputVal int64
|
p.setMemory(int(param1), inputFunc(inputsRequested), paramModes[0])
|
||||||
if len(p.feedInput) > 0 {
|
|
||||||
inputVal = int64(p.feedInput[0])
|
|
||||||
p.feedInput = p.feedInput[1:]
|
|
||||||
} else {
|
|
||||||
inputVal = inputFunc(inputsRequested)
|
|
||||||
}
|
|
||||||
if p.printASCII && inputVal <= 255 {
|
|
||||||
fmt.Printf("%c", rune(inputVal))
|
|
||||||
}
|
|
||||||
p.setMemory(int(param1), inputVal, paramModes[0])
|
|
||||||
|
|
||||||
instructionPointer += 1
|
instructionPointer += 1
|
||||||
|
|
||||||
case opOutput:
|
case opOutput:
|
||||||
param1 := p.GetMemory(instructionPointer)
|
param1 := p.GetMemory(instructionPointer)
|
||||||
param1Val := p.getParamValue(int(param1), paramModes[0])
|
outputFunc(p.getParamValue(int(param1), paramModes[0]), p.makeState(instructionPointer))
|
||||||
if p.printASCII && param1Val <= 255 {
|
|
||||||
fmt.Printf("%c", rune(param1Val))
|
|
||||||
}
|
|
||||||
outputFunc(param1Val, p.makeState(instructionPointer))
|
|
||||||
lastOutput = param1Val
|
|
||||||
|
|
||||||
instructionPointer += 1
|
instructionPointer += 1
|
||||||
|
|
||||||
@ -274,19 +256,8 @@ func (p *IntcodeProgram) RunIn(inputFunc ProvideInputFunc, outputFunc ReceiveOut
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.haltRequested = false
|
p.haltRequested = false
|
||||||
|
|
||||||
return lastOutput
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *IntcodeProgram) Stop() {
|
func (p *IntcodeProgram) Stop() {
|
||||||
p.haltRequested = true
|
p.haltRequested = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *IntcodeProgram) SetDebugASCIIPrint(enable bool) {
|
|
||||||
p.printASCII = enable
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *IntcodeProgram) FeedInputString(str string) {
|
|
||||||
p.feedInput = make([]rune, len(str))
|
|
||||||
copy(p.feedInput, []rune(str))
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user