Day 11: Part 1 and 2

It isn’t pretty but it works

Signed-off-by: James Griffin <james.griffin-allwood@agilebits.com>
This commit is contained in:
James Griffin
2020-12-11 11:54:36 -04:00
parent 9bf150623e
commit 6029eed213
5 changed files with 698 additions and 3 deletions

545
eleven/day_eleven.go Normal file
View File

@@ -0,0 +1,545 @@
package eleven
import (
"bufio"
"fmt"
"os"
)
const (
empty = "L"
occupied = "#"
floor = "."
)
type waitingArea struct {
seats [][]string
rows, width int
}
func waitingRoom(filename string) *waitingArea {
w := &waitingArea{}
w.load(filename)
return w
}
func (w *waitingArea) load(filename string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
if w.rows == 0 {
w.width = len(scanner.Text())
}
row := make([]string, w.width)
for position, option := range scanner.Text() {
row[position] = string(option)
}
w.seats = append(w.seats, row)
w.rows++
}
return nil
}
func (w *waitingArea) print() string {
layout := ""
for i := 0; i < w.rows; i++ {
for j := 0; j < w.width; j++ {
layout += w.seats[i][j]
}
layout += "\n"
}
return layout
}
func (w *waitingArea) seat(visibility bool) bool {
changed := false
new := w.cloneSeats()
for i := 0; i < w.rows; i++ {
for j := 0; j < w.width; j++ {
switch w.seats[i][j] {
case empty:
if visibility {
if w.shouldSeatVisibly(i, j) {
new[i][j] = occupied
changed = true
}
} else {
if w.shouldSeat(i, j) {
new[i][j] = occupied
changed = true
}
}
case occupied:
if visibility {
if w.shouldLeaveVisibly(i, j) {
new[i][j] = empty
changed = true
}
} else {
if w.shouldLeave(i, j) {
new[i][j] = empty
changed = true
}
}
case floor:
continue
}
}
}
w.seats = new
return changed
}
func (w *waitingArea) shouldSeat(i, j int) bool {
okay := true
ahead := i - 1
behind := i + 1
left := j - 1
right := j + 1
// The row ahead of the seat
if ahead > -1 {
if left > -1 {
if w.seats[ahead][left] == occupied {
okay = false
}
}
if w.seats[ahead][j] == occupied {
okay = false
}
if right < w.width {
if w.seats[ahead][right] == occupied {
okay = false
}
}
}
// The current row
if left > -1 {
if w.seats[i][left] == occupied {
okay = false
}
}
if right < w.width {
if w.seats[i][right] == occupied {
okay = false
}
}
// The row behind a seat
if behind < w.rows {
if left > -1 {
if w.seats[behind][left] == occupied {
okay = false
}
}
if w.seats[behind][j] == occupied {
okay = false
}
if right < w.width {
if w.seats[behind][right] == occupied {
okay = false
}
}
}
return okay
}
func (w *waitingArea) shouldSeatVisibly(i, j int) bool {
okay := true
search := true
ahead := i - 1
behind := i + 1
left := j - 1
right := j + 1
// The row ahead of the seat
if ahead > -1 {
leftDiagonalAhead := ahead
leftDiagonalLeft := left
search = true
for search && leftDiagonalLeft > -1 && leftDiagonalAhead > -1 {
switch w.seats[leftDiagonalAhead][leftDiagonalLeft] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
leftDiagonalAhead--
leftDiagonalLeft--
}
}
straightAhead := ahead
search = true
for search && straightAhead > -1 {
switch w.seats[straightAhead][j] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
straightAhead--
}
}
rightDiagonalAhead := ahead
rightDiagonalRight := right
search = true
for search && rightDiagonalRight < w.width && rightDiagonalAhead > -1 {
switch w.seats[rightDiagonalAhead][rightDiagonalRight] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
rightDiagonalAhead--
rightDiagonalRight++
}
}
}
// The current row
currentLeft := left
search = true
for search && currentLeft > -1 {
switch w.seats[i][currentLeft] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
currentLeft--
}
}
currentRight := right
search = true
for search && currentRight < w.width {
switch w.seats[i][currentRight] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
currentRight++
}
}
// The row behind a seat
if behind < w.rows {
leftDiagonalBehind := behind
leftDiagonalLeft := left
search = true
for search && leftDiagonalLeft > -1 && leftDiagonalBehind < w.rows {
switch w.seats[leftDiagonalBehind][leftDiagonalLeft] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
leftDiagonalBehind++
leftDiagonalLeft--
}
}
straightBehind := behind
search = true
for search && straightBehind < w.rows {
switch w.seats[straightBehind][j] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
straightBehind++
}
}
rightDiagonalBehind := behind
rightDiagonalRight := right
search = true
for search && rightDiagonalRight < w.width && rightDiagonalBehind < w.rows {
switch w.seats[rightDiagonalBehind][rightDiagonalRight] {
case occupied:
okay = false
search = false
case empty:
search = false
case floor:
rightDiagonalBehind++
rightDiagonalRight++
}
}
}
return okay
}
func (w *waitingArea) shouldLeave(i, j int) bool {
ahead := i - 1
behind := i + 1
left := j - 1
right := j + 1
occupiedSeats := 0
// The row ahead of the seat
if ahead > -1 {
if left > -1 {
if w.seats[ahead][left] == occupied {
occupiedSeats++
}
}
if w.seats[ahead][j] == occupied {
occupiedSeats++
}
if right < w.width {
if w.seats[ahead][right] == occupied {
occupiedSeats++
}
}
}
// The current row
if left > -1 {
if w.seats[i][left] == occupied {
occupiedSeats++
}
}
if right < w.width {
if w.seats[i][right] == occupied {
occupiedSeats++
}
}
// The row behind a seat
if behind < w.rows {
if left > -1 {
if w.seats[behind][left] == occupied {
occupiedSeats++
}
}
if w.seats[behind][j] == occupied {
occupiedSeats++
}
if right < w.width {
if w.seats[behind][right] == occupied {
occupiedSeats++
}
}
}
return occupiedSeats >= 4
}
func (w *waitingArea) shouldLeaveVisibly(i, j int) bool {
ahead := i - 1
behind := i + 1
left := j - 1
right := j + 1
search := true
occupiedSeats := 0
// The row ahead of the seat
if ahead > -1 {
leftDiagonalAhead := ahead
leftDiagonalLeft := left
search = true
for search && leftDiagonalLeft > -1 && leftDiagonalAhead > -1 {
switch w.seats[leftDiagonalAhead][leftDiagonalLeft] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
leftDiagonalAhead--
leftDiagonalLeft--
}
}
straightAhead := ahead
search = true
for search && straightAhead > -1 {
switch w.seats[straightAhead][j] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
straightAhead--
}
}
rightDiagonalAhead := ahead
rightDiagonalRight := right
search = true
for search && rightDiagonalRight < w.width && rightDiagonalAhead > -1 {
switch w.seats[rightDiagonalAhead][rightDiagonalRight] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
rightDiagonalAhead--
rightDiagonalRight++
}
}
}
// The current row
currentLeft := left
search = true
for search && currentLeft > -1 {
switch w.seats[i][currentLeft] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
currentLeft--
}
}
currentRight := right
search = true
for search && currentRight < w.width {
switch w.seats[i][currentRight] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
currentRight++
}
}
// The row behind a seat
if behind < w.rows {
leftDiagonalBehind := behind
leftDiagonalLeft := left
search = true
for search && leftDiagonalLeft > -1 && leftDiagonalBehind < w.rows {
switch w.seats[leftDiagonalBehind][leftDiagonalLeft] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
leftDiagonalBehind++
leftDiagonalLeft--
}
}
straightBehind := behind
search = true
for search && straightBehind < w.rows {
switch w.seats[straightBehind][j] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
straightBehind++
}
}
rightDiagonalBehind := behind
rightDiagonalRight := right
search = true
for search && rightDiagonalRight < w.width && rightDiagonalBehind < w.rows {
switch w.seats[rightDiagonalBehind][rightDiagonalRight] {
case occupied:
occupiedSeats++
search = false
case empty:
search = false
case floor:
rightDiagonalBehind++
rightDiagonalRight++
}
}
}
return occupiedSeats >= 5
}
func (w *waitingArea) simulate(visible bool) int {
// fmt.Println(w.print())
for w.seat(visible) {
// fmt.Println(w.print())
}
count := 0
for i := 0; i < w.rows; i++ {
for j := 0; j < w.width; j++ {
if w.seats[i][j] == occupied {
count++
}
}
}
return count
}
func (w *waitingArea) cloneSeats() [][]string {
new := make([][]string, w.rows)
for i, row := range w.seats {
new[i] = make([]string, w.width)
for j, seat := range row {
new[i][j] = seat
}
}
return new
}
// PartOne How many seats are occupied in a stable seating arrangement
func PartOne() string {
w := waitingRoom("eleven/input.txt")
return fmt.Sprintf("A stable seating arrangement has %d seats", w.simulate(false))
}
// PartTwo How many seats are occupied in a stable seating arrangement based on visibility
func PartTwo() string {
w := waitingRoom("eleven/input.txt")
return fmt.Sprintf("A stable seating arrangement has %d seats", w.simulate(true))
}

39
eleven/day_eleven_test.go Normal file
View File

@@ -0,0 +1,39 @@
package eleven
import "testing"
func Test_seat_load(t *testing.T) {
w := waitingRoom("sample.txt")
if w.width != 10 {
t.Logf("Expected row width of 10, got %d", w.width)
t.FailNow()
}
if w.rows != 10 {
t.Logf("Expected 10 rows, got %d", w.rows)
t.FailNow()
}
}
func Test_seating_stabilization(t *testing.T) {
w := waitingRoom("sample.txt")
occupied := w.simulate(false)
if occupied != 37 {
t.Logf("Expected 37 occupied seats, found %d", occupied)
t.FailNow()
}
}
func Test_visible_seating_stabilization(t *testing.T) {
w := waitingRoom("sample.txt")
occupied := w.simulate(true)
if occupied != 26 {
t.Logf("Expected 26 occupied seats, found %d", occupied)
t.FailNow()
}
}

97
eleven/input.txt Normal file
View File

@@ -0,0 +1,97 @@
LL.LL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLL
.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LL.LLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLL.LLLLL.LLLLLLLL
.LLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLL..LLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL
L.L.....LL....LLLL....L.L.L...L..L..L.LL.LL.LL.L......L.L..L...L..L.L....LL.......LLL.LL.L.
LLLLL.LLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLL.
LLLLLLLL.LLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL
LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
.L........LL.L.....L.L..LLLL.LL.L........L...L.L.L......L.........L..LLLLL.......L...LL....
LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.
LLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LL.LLLLLL.LLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLL.L.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLLLL.LLLLLL.LLLLLLLL.LLLLLLL.L.LLLLLLL.LLLLLLLL
LLLLLLL.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LL.LLLLLLL.LLLLLLLLL...LLLLLL
LLLLL.LLLLLL..LLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLL.LLLLLLLLL.LLLL.LLL
.....L.......LL..LL....LLL.LL.LL.L.......LL.L....L.L.L.L.L.L..L......L........L...L..L...L.
LLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.L.LLLLLLL.LLL.LLLL
LLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLL.LLL.LLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLL.LLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLL.LL.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLL
...L.L...L.L....LL.L.........L.....LLL....L..L..L..L.LLL....L.LL.L.L..L.L..L..LL..L..L..LL.
LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLL.LLLLLLLLL.LL.LLLLL
LLLLL.LLLLLLLLLLLLL..LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLL.LLLLLL.LLLL.L..LLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLL..LLLLLLLLLLLLLLLLL
LLLLL.L.LLLL.LLLLLL.LLLLL.LLL.LLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLL.L.LLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL
L.LL.L....L....LL.L...LL..........L.......L.LL...LL.LLLLL.....LLL..L.L..L......L..LL..L...L
LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL
L.LLL.LLLLLL.LLLLLL.LLLLL.LLL.LLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLLLLLL
L.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL
..L.LLL.L.L.....L...LL....L......L.L.LL..L..L.L..L....LL........LLL.L.LL.......L...L...L..L
LLLLLLL.LLLL.LL.LLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLL.LLL.LL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL
.LLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLL
LLLLL.LLLLLL..LL..LLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LL.LLLLL
LLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLL.L.LLLL.LLL
.......L.......L.LL...L..L....L.L...L..LL.LLLL.L.L....LLL.L.LL.LL.........LL.L..L...L...L.L
LLLL.LLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.L.LLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLL.LL.LLL.LLLLLL.LLLLL.L.LLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
..L...L...LLLLLLLL..L.LL...LL.L.....L.L.....L.....L...L....L.L..........L.L.....L..L..L....
LLLLL.LLLLLL.LLLLLLLLLLLL.L.LLLLL.LLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL.
LLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LL.LLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL..LLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LL.LLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLL.L.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
.LL..L.......L...L.L.L......L....L.....L......L........L.L...LLLL...L.L...LLLL.......L.L...
LLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LL.LLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL..LLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LL.L.LLLLLLLL.LLLLLLL..LLLLLLLLLLLLLLLLL.LLLLLLLL
LL.LL.LLLLLLLLLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLL.L.LLLLL.LL.LLLLLLL.LLLLLLLLL.LLLLLLL.
LLLLL.LLLLLL.LLLLLL..LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LL.LLLLLL.LLLLLLLL
LLLLL..LLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLL.L.LLLLLLLLL..LL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLL.LL
L...L.L..L..L..L...LLL........LLLL.LL..LL.......LLLLL.L.L..L.L.L...L.L.....LL.....LLLL..L..
LLLLL.LLL..LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL..LL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LL.LLLLLLLL
LLLLL.LLLL.L.LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLLL.L.LLLLLL.LLLLLLLLLLL
LLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LL.LL.LLLLLL.LL.LLL.LLLLLLLLLLL.L.LLLLLLL.LLLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL.LL.LLL.LLLLLL.LLLLL.LLLLLLL.L.LLLLLLLLLL.LLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
LLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLL.LLL.LLLLLLL.LLLLLLLLLLLL.LLLLL
....L.L.L......LLL....L..L.L...........L.L......LLL.LL.LL.L.LL.....L.LLLL......L...L.LL.LL.
LLLLL.LLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLL.LL.LLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL
LLLLL.L.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLL.LLLLLLLL.LLLLL.LL.LLLLLLL.LL.LLLLLL.LLLLLLLL
LLLLLLLLLLLLLLLLL.L.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLL.LLLLLLLLLLLLL.LLLLLLLLLL.LL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LLLLLLLL
LLLLL.LLLLLL.L.LLLL.LLLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.L
....L........L.....LLL....L......LL.L...LLLL.LLL.L.LL.......L.L.L.L......LL..L.LLLL....LL.L
LLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLL..LLLLLLLL.LLLLLLLLLLL
LLLLL.LLL.LL.LLLLLL.LLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLL.LLL.LL..LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL
LLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLL
LLLLL.LLLLLL.LLLLLL.LLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLL.LLLLLL.LLLLL.LLLLLLL.LLLLLLLLLL.L.LLLLLLLL.LLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL

10
eleven/sample.txt Normal file
View File

@@ -0,0 +1,10 @@
L.LL.LL.LL
LLLLLLL.LL
L.L.L..L..
LLLL.LL.LL
L.LL.LL.LL
L.LLLLL.LL
..L.L.....
LLLLLLLLLL
L.LLLLLL.L
L.LLLLL.LL

10
main.go
View File

@@ -3,7 +3,7 @@ package main
import ( import (
"fmt" "fmt"
"github.com/thatguygriff/aoc2020/ten" "github.com/thatguygriff/aoc2020/eleven"
) )
func main() { func main() {
@@ -44,6 +44,10 @@ func main() {
// fmt.Println(nine.PartTwo()) // fmt.Println(nine.PartTwo())
// Day 10 // Day 10
fmt.Println(ten.PartOne()) // fmt.Println(ten.PartOne())
fmt.Println(ten.PartTwo()) // fmt.Println(ten.PartTwo())
// Day 11
fmt.Println(eleven.PartOne())
fmt.Println(eleven.PartTwo())
} }