Day 3.
parent
847044d9ba
commit
421b1a4b5e
|
@ -0,0 +1,323 @@
|
|||
.#..........#...#...#..#.......
|
||||
.###...#.#.##..###..#...#...#..
|
||||
#.....#................#...#.#.
|
||||
#.....#..###.............#....#
|
||||
......#.....#....#...##.....###
|
||||
....#........#.#......##....#.#
|
||||
..#.......##..#.#.#............
|
||||
#.............#..#...#.#...#...
|
||||
.#...........#.#....#..##......
|
||||
......#..##..#....#....#...##..
|
||||
....#.##.#####..#.##..........#
|
||||
..#.#......#.#.#....#.....#....
|
||||
...###.##......#..#.#...#...#..
|
||||
...#..#.#..#..#.......#........
|
||||
...#....#..#...........#.#.....
|
||||
....#.........###.#....#...#...
|
||||
....#..##.....#.##....##.#.....
|
||||
........#.#.#.....#........#...
|
||||
..#..#.....#.#...#.#...#.#.....
|
||||
....#..........#....#....#...##
|
||||
.##...#..#...##....#..#.#....#.
|
||||
.#....##..#...#................
|
||||
..#.###.........#.###.....#....
|
||||
....#..#.......###.#...........
|
||||
#...#...#.#...........#.#......
|
||||
.#..#.......##.....##...#......
|
||||
....####.#..#.#.#...........#..
|
||||
.##...#..#..#.#....##.....#..##
|
||||
...#......##....#...#.#.###....
|
||||
##.#...........#.........#...#.
|
||||
...........#...#...........##..
|
||||
.....#....#...........#........
|
||||
...#..#.........#...#....#.##..
|
||||
.....##.........#...#........##
|
||||
....#....#..#.#...#...##.#.....
|
||||
...#.#..#...#...........#..#...
|
||||
.....#.#.....#....#...#....#...
|
||||
.#.............#..##..........#
|
||||
..........#......#..##.....###.
|
||||
..#....#........#.#.....##...#.
|
||||
#..#......#.#.##......#.#.##...
|
||||
.....#..#.........#...#.#.#.#.#
|
||||
#.#...#.......#.#..##.##.....##
|
||||
.....#......##......#.......#..
|
||||
#.....#...##.#.#........#......
|
||||
#..........#.#...#.......#.....
|
||||
..#..#........#........#.......
|
||||
...#....#....#..####.#....#...#
|
||||
#.............#.....##....#..#.
|
||||
##....#.....###..##....#......#
|
||||
#.....#...#.#.............#....
|
||||
.#.#..##..##.#..#....#.#.#...#.
|
||||
.#...#..#.....#..#.#.#..#...##.
|
||||
..#.#.#.#.#.#....##...#........
|
||||
.......##.....#..........#...#.
|
||||
...#..#...#...........#....#...
|
||||
.....#..#....#..#.##...#.......
|
||||
..##..#.......#.#..#....#......
|
||||
...#...............#.#..#......
|
||||
....#........#...#....#...#.#..
|
||||
...#...#..........##....##.#...
|
||||
..###.#.##.............#..#.#.#
|
||||
##.......##.#..#.#.#.....#.#.#.
|
||||
..#####...#......##...#........
|
||||
...#.##...#................#..#
|
||||
..#......#...#....#.#..##..#...
|
||||
#.#.........#............#.....
|
||||
##.............#.#.....#......#
|
||||
....#.......#..#..##....#.#....
|
||||
...#...##....#.........#..#....
|
||||
...####.....#...........#....#.
|
||||
#.#........##....#..#..#...#...
|
||||
....#.#.###..........#........#
|
||||
#.#......#.....#.##....#.#...#.
|
||||
#....##.#..##..#.#.............
|
||||
.#.....##..#..................#
|
||||
...#.#........#...#.#........#.
|
||||
..#....#......#.....##........#
|
||||
....#...#....#...#.....#.##....
|
||||
...#........#.......##.........
|
||||
.#.##......#......#....##......
|
||||
.#...#...###.#............#..#.
|
||||
.#...........#.#.#....#...#..#.
|
||||
.#.....#....#.....#...#........
|
||||
.#..#.....#............#.#.##.#
|
||||
...###.#.............#..##.....
|
||||
...#.#.##.#..#..........#..#...
|
||||
.#.#.#....#..#...............##
|
||||
.......#.#..#...#.#.#........#.
|
||||
....#.#...#..##....#........#.#
|
||||
..........#...#.......#..#....#
|
||||
...###.....#.#....#.....##.....
|
||||
#......#..#..#........#.#...#..
|
||||
#......#....#..#.#.............
|
||||
...#....#........#...#..#......
|
||||
...#..###........#.#.........##
|
||||
#......#.#..###..#........###..
|
||||
.#.#......#.#..#.#.#.#.....#..#
|
||||
#....#.....#..##.....#.........
|
||||
....#......#...#..#..#.#.##.#..
|
||||
........#.#...#...#..#...#.#..#
|
||||
.....##........#...#....#...#..
|
||||
....#...##..#........#....##.#.
|
||||
...............#.....#......##.
|
||||
..##.....#.....#.#.............
|
||||
.....#.#...........##.#.....#..
|
||||
.#..##..#.##.#...##.#....#....#
|
||||
.##.....#.##......#....#..#..#.
|
||||
.......#.##......#....#...#.#..
|
||||
.#........#......#...##.#....#.
|
||||
.........#..........#.......###
|
||||
#.#.........#..#..#....#...#...
|
||||
.......#.........#......#.#.#..
|
||||
.......#...........#....#....#.
|
||||
.###...##.#.#..........#...#..#
|
||||
....#.....#...#..#.............
|
||||
.......##........#..#.......#..
|
||||
....##..#.#....#....#..#...#..#
|
||||
..#.####.....#.........#.#....#
|
||||
..............#.#..#.....#...#.
|
||||
.....#.............#..........#
|
||||
..##.#...#.....#....#.#....##..
|
||||
.#...#.......#..####..#..#...#.
|
||||
#..........#................##.
|
||||
......##.....#.................
|
||||
..##...#.#..........##.#...#...
|
||||
....#.#.#.#...##...#...#...####
|
||||
.............##..#.###...#.....
|
||||
#.#....#.#..#..##........#..##.
|
||||
.....#.#...............#.......
|
||||
...#..##......#..##...........#
|
||||
#..#....#...........##..#......
|
||||
.##....#.#....###.......#..#...
|
||||
.....#..#.#....##...#......#...
|
||||
.#.........#####......#...#...#
|
||||
.......#.#.....#.....#.......#.
|
||||
#....#.......###.......#..#....
|
||||
#......##.###...#.......#......
|
||||
.......#...#......#....#..#....
|
||||
.#.####.......#...#.##.........
|
||||
................##.#......#....
|
||||
......##....#.#......#......#..
|
||||
....##...##....#.........#.....
|
||||
......#.#..............##.#...#
|
||||
....#.#......#.#.............#.
|
||||
.#.#..####...#................#
|
||||
....#.#.#.#......##...##......#
|
||||
.....#.#..#......#....#......#.
|
||||
..........#.#.....#.......#...#
|
||||
..##......##.#...##.#......#..#
|
||||
...#............#..#...###.....
|
||||
.#.#..###..#.......##...#.....#
|
||||
.#....#.#.......#.....##....#..
|
||||
#.............###...##.#.#...#.
|
||||
#........#.#........#.#...#.#.#
|
||||
##..#.................#....#...
|
||||
...#.#...#..#.#..##....#...#...
|
||||
#.....#.......#..............#.
|
||||
.......###...##..#.....#.......
|
||||
#.#.........#..#.#.........#...
|
||||
.#.#............#.....##.....#.
|
||||
........#....#....#.......#....
|
||||
...#.#....#..#.##....#.#......#
|
||||
.#.....#.#..#...........#.#.#..
|
||||
#......#..#......##.#.#.#.#..#.
|
||||
.......#.#..#......#.#.#..#.#.#
|
||||
..........#...#..........#.##..
|
||||
.#.#..####.......#..........#..
|
||||
......#.#.....#..#..#..#.....#.
|
||||
.....##..#.#.#..#..#...#.....##
|
||||
............#.#....#.#....#....
|
||||
..............#..#...#...#.....
|
||||
.....#......#.......#.....#....
|
||||
..##....#..#...........#..##...
|
||||
###...#.##..#.#...####....###..
|
||||
..#.#.....#.........#....#..###
|
||||
##...........##.............#..
|
||||
....##..............#.........#
|
||||
...#...##....#.#..#...##.....#.
|
||||
..#..##...#.......#..#..#.....#
|
||||
...#...#....####........##.#...
|
||||
....#........#..#.#.........#..
|
||||
.#..........#...#..#.#.#......#
|
||||
....#.#.....#.........#....#...
|
||||
...#....#...##.......#...#.....
|
||||
....#..#.......#.##.##.##...#..
|
||||
##....##........#........##....
|
||||
.#.#..#...........#.....#...#..
|
||||
...#.##...##..#...#...##.......
|
||||
.....#..###................#.#.
|
||||
...#........##.#....##.....#.##
|
||||
...#...#..##...#...#.#...#.....
|
||||
.#......#...#..#.##.......#...#
|
||||
.....#.......###.##...#........
|
||||
#.....#..#........##.##.#.##..#
|
||||
....#..............##.##...#...
|
||||
#..........#..................#
|
||||
..##.......#..........#..#..##.
|
||||
.#....###.#..#.........###....#
|
||||
.#....#.##..............#.##.##
|
||||
.#.##.#....#.......#.#......#..
|
||||
.#............#.#.....#........
|
||||
..#......#.......#.............
|
||||
#.#...#........##...#.#......#.
|
||||
....#.........#........##..#...
|
||||
..........##.....#.#......#....
|
||||
.##.#..#....#.......#...#...##.
|
||||
.#................#...#.##.....
|
||||
....###.......#..#..#.........#
|
||||
.#.....#..##...###......#.....#
|
||||
.#.##..........#..#..#........#
|
||||
.......#.##..............#...##
|
||||
#...#.#.#.......#..#......#.##.
|
||||
.#....#.#......#...#..........#
|
||||
.....#........##....#.##.....#.
|
||||
.#....................#..#.#.#.
|
||||
.....#.........#....#.......#.#
|
||||
.....#.#..##..#.....#..#.......
|
||||
...#..#..#...#.....#....#....#.
|
||||
#.....#.#.#..........#..#.#.#..
|
||||
.....##..##.....#.#..#.........
|
||||
#.#..##....##......##...#.##..#
|
||||
..##..#.....#..#..........##...
|
||||
......#.#...#..#.......##.....#
|
||||
..#.#.......#.#......#.........
|
||||
.....#........##..#.....####.#.
|
||||
.#.....#........#.......#..##..
|
||||
......#...#....#.##...#.......#
|
||||
..##..................#..#.....
|
||||
.....###.#..##...#.............
|
||||
...##...##...#......#....#....#
|
||||
#........#.#..........##..#....
|
||||
#........#....#..........#...#.
|
||||
...##.#.##..#...##......#......
|
||||
#........##....#.#..##.....#..#
|
||||
...####......#..#......#.#.....
|
||||
.#......#...#...#.#.....##....#
|
||||
.....###..##..#...#..........##
|
||||
##.##....#...#.................
|
||||
...##.#.......#.###......#..#..
|
||||
.....#.#.#.......#.......#..#.#
|
||||
#...#...#.##..#....###.......#.
|
||||
.#.#..##.....#....#...##.......
|
||||
.....#..........#....#...#.##..
|
||||
..........#....#...#...........
|
||||
.#....#..#...#...#.......#....#
|
||||
#..#..............#.....####.##
|
||||
.......#....###....#....#.#.#..
|
||||
###.#........##.#.......#......
|
||||
#..#...#..#......#.............
|
||||
#...###..#...#..#..##.#.###.#..
|
||||
..#..#...##......##............
|
||||
.#..#.......#..###..##...#.....
|
||||
....#..#..##.#.#.....##...#.#.#
|
||||
....#....#.....#..#....#.......
|
||||
..##..#....#.#...##..#.........
|
||||
.....#....#...........#.#......
|
||||
...#........#.#..#..#......#..#
|
||||
.#...##....#....#.#.##......#.#
|
||||
..#...........#..###.##.....#..
|
||||
.#.######.#..##.......#..#.....
|
||||
.....#..#......##.#.#...#......
|
||||
....#....#..#.....#.......#.#.#
|
||||
.....#........##.....#.....#.##
|
||||
........#....#...#...#.#.#...#.
|
||||
...#.#.....#...........#.....#.
|
||||
#.#.#...###......#.....#.....#.
|
||||
.#..........#.....#.......##...
|
||||
#................#.#.....#.####
|
||||
.#......#......#.#..##.#.##....
|
||||
..........#....#...........###.
|
||||
.##....#..####..#####..........
|
||||
##.......##............#.....#.
|
||||
...#.....#...#....#.......#....
|
||||
.#....##......#.#...#....#.....
|
||||
....#............##..........#.
|
||||
.#....#....#.....#.#...........
|
||||
.............##.#.##...#.#.#...
|
||||
..#............#.#..##.#....##.
|
||||
#.....#...##..........#.#.#...#
|
||||
......#............#..........#
|
||||
..##..#.....#........#.##..#..#
|
||||
#..#.#..##.#.....##.#..........
|
||||
#..#...#.#..#......##.......##.
|
||||
.##......#...........##.....#..
|
||||
...#.....#.....#..#....#.......
|
||||
.....#...............#........#
|
||||
.......#.....##..#..##..#.#.#..
|
||||
#.#.....#..#..........##...#...
|
||||
#..#......#.................#.#
|
||||
.##...#....#...#...#.......#...
|
||||
.#........##........#..........
|
||||
........#..........#.........#.
|
||||
.....#.##..#.......#........#..
|
||||
..##..#..#...##..#.#....#......
|
||||
......#........#.##.....#.#....
|
||||
.#...#.#.........#..#.#.#.#..#.
|
||||
.#..#.#...#............#.#..#..
|
||||
....#.................#...#..##
|
||||
.........##.....#.#.#......####
|
||||
...............#....##.#.#.....
|
||||
....##..#....#......#....#.....
|
||||
....##.#...#....#.#..#...#..#..
|
||||
..##......#.#..#........#.#.#..
|
||||
.........#.#................##.
|
||||
##.....#.....##..##.#........#.
|
||||
###....#..#..#..#..#.##..##.#..
|
||||
.....##..#...........##..#.#...
|
||||
....#..#..#..#....#...#.#....#.
|
||||
#....#............#..#....###..
|
||||
....#..#.............#....##.#.
|
||||
...#.................#...#.....
|
||||
.##...#....#..#..#........#....
|
||||
...#.#..#...#.#......#....#....
|
||||
...#.......##..........#...#.#.
|
||||
...##..#.......#........#...#..
|
||||
.....#.#.#....#..##......##...#
|
||||
....##......#........##....##..
|
||||
..#..........#.#.##.....#......
|
||||
..................#..#..#..###.
|
||||
.#..............#.#..#.#..#.###
|
||||
..#....#....#......#..##..#...#
|
||||
#.........#..#..#...........#..
|
|
@ -0,0 +1,105 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Position struct {
|
||||
X, Y int
|
||||
}
|
||||
|
||||
type Spot bool
|
||||
|
||||
const (
|
||||
Tree Spot = true
|
||||
Open = false
|
||||
)
|
||||
|
||||
type Map [][]Spot
|
||||
|
||||
func ReadMapFromFile(file string) *Game {
|
||||
f, err := os.Open(file)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer f.Close()
|
||||
r := bufio.NewReader(f)
|
||||
m := Map{}
|
||||
for {
|
||||
line, err := r.ReadString('\n')
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
line = strings.TrimSpace(line)
|
||||
row := []Spot{}
|
||||
for _, c := range line {
|
||||
switch c {
|
||||
case '.':
|
||||
row = append(row, Open)
|
||||
case '#':
|
||||
row = append(row, Tree)
|
||||
default:
|
||||
panic("wrong character")
|
||||
}
|
||||
}
|
||||
m = append(m, row)
|
||||
}
|
||||
return &Game{Map: m}
|
||||
}
|
||||
|
||||
func (m Map) DY() int {
|
||||
return len(m)
|
||||
}
|
||||
|
||||
func (m Map) DX() int {
|
||||
maxX := 0
|
||||
for i := 0; i < len(m); i++ {
|
||||
if len(m[i]) > maxX {
|
||||
maxX = len(m[i])
|
||||
}
|
||||
}
|
||||
return maxX
|
||||
}
|
||||
|
||||
type Game struct {
|
||||
Map Map
|
||||
Position Position
|
||||
}
|
||||
|
||||
func (g *Game) GetCurrentSpot() Spot {
|
||||
return g.Map[g.Position.Y%g.Map.DY()][g.Position.X%g.Map.DX()]
|
||||
}
|
||||
|
||||
func (g *Game) MoveRight(d int) {
|
||||
g.Position.X += d
|
||||
}
|
||||
|
||||
func (g *Game) MoveDown(d int) {
|
||||
g.Position.Y += d
|
||||
}
|
||||
|
||||
func (g *Game) Move() {
|
||||
g.MoveRight(3)
|
||||
g.MoveDown(1)
|
||||
}
|
||||
|
||||
func main() {
|
||||
game := ReadMapFromFile("input")
|
||||
treesEncountered := 0
|
||||
|
||||
for game.Position.Y < game.Map.DY() {
|
||||
game.Move()
|
||||
if game.GetCurrentSpot() == Tree {
|
||||
treesEncountered++
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("%d trees encountered", treesEncountered)
|
||||
}
|
|
@ -0,0 +1,129 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Position struct {
|
||||
X, Y int
|
||||
}
|
||||
|
||||
type Spot bool
|
||||
|
||||
const (
|
||||
Tree Spot = true
|
||||
Open = false
|
||||
)
|
||||
|
||||
type Map [][]Spot
|
||||
|
||||
func ReadMapFromFile(file string) *Game {
|
||||
f, err := os.Open(file)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
defer f.Close()
|
||||
r := bufio.NewReader(f)
|
||||
m := Map{}
|
||||
for {
|
||||
line, err := r.ReadString('\n')
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
line = strings.TrimSpace(line)
|
||||
row := []Spot{}
|
||||
for _, c := range line {
|
||||
switch c {
|
||||
case '.':
|
||||
row = append(row, Open)
|
||||
case '#':
|
||||
row = append(row, Tree)
|
||||
default:
|
||||
panic("wrong character")
|
||||
}
|
||||
}
|
||||
m = append(m, row)
|
||||
}
|
||||
return &Game{Map: m}
|
||||
}
|
||||
|
||||
func (m Map) DY() int {
|
||||
return len(m)
|
||||
}
|
||||
|
||||
func (m Map) DX() int {
|
||||
maxX := 0
|
||||
for i := 0; i < len(m); i++ {
|
||||
if len(m[i]) > maxX {
|
||||
maxX = len(m[i])
|
||||
}
|
||||
}
|
||||
return maxX
|
||||
}
|
||||
|
||||
type Game struct {
|
||||
Map Map
|
||||
Position Position
|
||||
}
|
||||
|
||||
func (g *Game) GetCurrentSpot() Spot {
|
||||
return g.Map[g.Position.Y%g.Map.DY()][g.Position.X%g.Map.DX()]
|
||||
}
|
||||
|
||||
func (g *Game) MoveRight(d int) {
|
||||
g.Position.X += d
|
||||
}
|
||||
|
||||
func (g *Game) MoveDown(d int) {
|
||||
g.Position.Y += d
|
||||
}
|
||||
|
||||
func main() {
|
||||
game := ReadMapFromFile("input")
|
||||
|
||||
moveRuleSet := [][]int{
|
||||
{1, 1},
|
||||
{3, 1},
|
||||
{5, 1},
|
||||
{7, 1},
|
||||
{1, 2},
|
||||
}
|
||||
|
||||
results := []int{}
|
||||
|
||||
for _, ruleSet := range moveRuleSet {
|
||||
treesEncountered := 0
|
||||
|
||||
dx := ruleSet[0]
|
||||
dy := ruleSet[1]
|
||||
|
||||
game.Position.X = 0
|
||||
game.Position.Y = 0
|
||||
|
||||
for game.Position.Y < game.Map.DY() {
|
||||
if game.GetCurrentSpot() == Tree {
|
||||
treesEncountered++
|
||||
}
|
||||
game.MoveRight(dx)
|
||||
game.MoveDown(dy)
|
||||
}
|
||||
|
||||
results = append(results, treesEncountered)
|
||||
fmt.Printf("%d trees encountered\n", treesEncountered)
|
||||
}
|
||||
|
||||
product := results[0]
|
||||
fmt.Printf("%d\n", product)
|
||||
for i := 1; i < len(results); i++ {
|
||||
product *= results[i]
|
||||
fmt.Printf(" * %d = %d\n", results[i], product)
|
||||
}
|
||||
fmt.Printf(" = %d\n", product)
|
||||
}
|
Loading…
Reference in New Issue