2024 Day 6 Complete!
This commit is contained in:
parent
b852b3951a
commit
cf6c7f34f4
130
2024/day06/input
Normal file
130
2024/day06/input
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
......#...........#..............................#..............................#...........................##...............#....
|
||||||
|
.............#..............#........#......##...................................................#............##...#..........#...
|
||||||
|
...#..................#..............#.........#...#.........................................................................#..#.
|
||||||
|
.....#..........#...................#.....................#..........#...........#......#..#...................#..................
|
||||||
|
...#...............................................##..................#............#.....#...................#...................
|
||||||
|
.#.#..#...................#.##.................#..........#................................#......#.........##..................#.
|
||||||
|
....................#...................#....#.........#....................#....................................................#
|
||||||
|
..........#......#...................................................................................................#....#.......
|
||||||
|
.#...............#.........#...........#...............#...................#......#...............................................
|
||||||
|
............#...........#........#..##.......#........#.....#................................##...................................
|
||||||
|
...................#.#.............###.................##.................#.......................#.....#..............##.........
|
||||||
|
.........................#...#............................#......#.......................#........................................
|
||||||
|
.....................#..............................................#.......#......##......................................#......
|
||||||
|
............................#.#............................................................................#.................#....
|
||||||
|
.#.....#.......................................................#..........#.......................................................
|
||||||
|
..............#..............................#.....#....#........#....................#....#.#...........#.#..................#...
|
||||||
|
........................#...#...##......#...........................#.............#............................#..................
|
||||||
|
...#........................................................#...#...........................#...#...............#........#........
|
||||||
|
.........#..#..........#.....................................#..................................................................#.
|
||||||
|
...........................................#.........#....#........................................#..#...........#...............
|
||||||
|
..#..........#...........................................................................................#..............#.........
|
||||||
|
...#.......#......................................#...............#...............................................................
|
||||||
|
.#........#......#.#....................................#...#...........#..........#........#.#.......#.......................#...
|
||||||
|
......................#...........#......##....................#..................#......#..............................#.......#.
|
||||||
|
..............#......................#..............#...#.#............................................................#.#........
|
||||||
|
..............#..................#...#..................#...#.....#...#...............#...........................................
|
||||||
|
.............#............................##..#...#...............................................................##..............
|
||||||
|
..#............................#.......#.#....................................#...................................................
|
||||||
|
.......#.....#..........#......#.....#...................................#...........................#......#....#..............#.
|
||||||
|
.#.................#.............................................#................#.............#.....#....................#......
|
||||||
|
..............#.........#..#.....#...........#..............................#.................................#............#......
|
||||||
|
....#.#............#............................................................#..........#......................................
|
||||||
|
.........................................#.......#......#....................................#.....................#...#......#...
|
||||||
|
....#.............................#....................................#..........#................................#..............
|
||||||
|
.........#..#......#..............................................................#....................#..........................
|
||||||
|
.......................................................##...#........#......................................................#.#..#
|
||||||
|
..........................#.......##..##................................................................................#.........
|
||||||
|
..................................##..................................................................#..........................#
|
||||||
|
.#..................................................#..............#.....................#.....#..................................
|
||||||
|
.......##........................#......................................................#..........#..............................
|
||||||
|
.........#....#....#.........#.#........................#...#.....................................................#.....#.........
|
||||||
|
....#.............................#....#....................#.....................#.....#......#.....................#..........#.
|
||||||
|
............................................................................................#..........#......#...................
|
||||||
|
..................................................................................#..........................#.#.....#.........#..
|
||||||
|
..................................................#...................................................#......#.....#............#.
|
||||||
|
..........................................^#................................................................................#.....
|
||||||
|
...............#..........#.............................................#.....#....#...................#................#.........
|
||||||
|
#..#....#........#........#.........#.......#.................#.......................#.#.............#...................#.......
|
||||||
|
..#................................................................#......................................#.......................
|
||||||
|
........#......................#.....................##.#..........#.............................#.............................#..
|
||||||
|
....#..........#........................#.........................................................................................
|
||||||
|
......#...#.#.#.........#.................#.....#.....#...#......#..................................................##........#...
|
||||||
|
...#....#....................#...................................................................#......#...............#.........
|
||||||
|
..#.......#.........................#..........#........#............................#......#....................#................
|
||||||
|
.................................#.......................................#....................................................#..#
|
||||||
|
......................#...#........................#.......................#.............#........................................
|
||||||
|
......#.......#...................................................................................................#...............
|
||||||
|
.............#............#......#............................#...........................................##......................
|
||||||
|
..........................#.....................................................................................#.................
|
||||||
|
....#..............................#......................#........................................#....#...........#.............
|
||||||
|
................#.......#.........................................................................................................
|
||||||
|
.............#............#........#.....#.........#.#.#............................#..........#..............#....#.......#.....#
|
||||||
|
..#.....#...............................................................................................#...............#.........
|
||||||
|
.......#...........#............#................#.......................................#..........................#......#......
|
||||||
|
..........#........................................#......................#............#....................................#..#..
|
||||||
|
.......#......#..............................#........................................................#.#.................#.......
|
||||||
|
.#.................#..#.....................................................................................#...........##........
|
||||||
|
#...................................#........................................#..............#.##........#..#.#.............#......
|
||||||
|
......#...............#........#....#.........#.........#...#.......................#...........................#............#....
|
||||||
|
...#...................................................................................#.......................................#..
|
||||||
|
.....#.......................................#................#...............................................................#...
|
||||||
|
.#................................................##................................#....................#...............#........
|
||||||
|
.................................................#..#..................#.......#........................#...............#.....#...
|
||||||
|
.....##.#.............................#.....................#................................................................#...#
|
||||||
|
...........#....................#...........#...............#.................................................#.......#.......#..#
|
||||||
|
........#....................................................#.....#....#.........................................#.....#.#.......
|
||||||
|
...............#..........................#............#.#.................................................#......................
|
||||||
|
...........#......#.....................#...................................................................#.#..............#....
|
||||||
|
......#...#.........................#..........................................................#..................................
|
||||||
|
.....................#................................................#..#........................................................
|
||||||
|
..............#.................#............#....................#.#.......................................#............#........
|
||||||
|
............#.....................#................#......#..........................#.#.........#............#...................
|
||||||
|
........................................................................#.....................#...................................
|
||||||
|
.............................#....................................................................................................
|
||||||
|
.........................#...#..........................................#............................................#............
|
||||||
|
..#...............................#.....#.....#.............#.......#..#.................##.#.......................#.........#.#.
|
||||||
|
......................................#...........................................................................................
|
||||||
|
...........#.....................................#................#...#.........................#........................#........
|
||||||
|
..#...#..#..........................#.......#....#......................................................#................#........
|
||||||
|
.....................................#...#.#........#...............#..#......#.....................................#...#.........
|
||||||
|
.#..............#..............................................................#.........................##......................#
|
||||||
|
..........#..................................#....#.........#...#.#..........#...#...................................##...........
|
||||||
|
...............#.....................................................................................................#............
|
||||||
|
.#.......#....................#...#..........................#.#...............#......................#........#.................#
|
||||||
|
.............#....................#........................#..................#......#....#....#..................................
|
||||||
|
........#..............................................................#.....................#....................................
|
||||||
|
.......................#..............#.............#......#.........................................#.........................#..
|
||||||
|
.......#.......#.#........#.......................#..#.......................................................#.#..................
|
||||||
|
...............#..#....#.......................#.....#..............................#..................#.....................#....
|
||||||
|
......#..............#...........................#............................##...........................#......................
|
||||||
|
.......................................#........#................................#..........................#.....................
|
||||||
|
.#.....................................#............#.............................................................#..#............
|
||||||
|
..................#..................#.........................#............#..........#.........................#...#............
|
||||||
|
.......................................................#..............#..........................................................#
|
||||||
|
...#....#..#...#..#...................##....................#.....................#...................#.....#..........#..........
|
||||||
|
.......................#........#....................##.................#.......................................................#.
|
||||||
|
........#.......#.......................#.#......##...##........#..##.........................................#...............##..
|
||||||
|
....#..........................#.........##..#......#...........................#........#........#...#...........................
|
||||||
|
...#..........................#.....#.....................................#.......................................................
|
||||||
|
....................................##.......#..............................#.............#...#......#.............#..............
|
||||||
|
.#..............................#...............................................................................................#.
|
||||||
|
.....#................................................................................##.....#..............#.#...................
|
||||||
|
...........................................................................................#....#................#................
|
||||||
|
...#..#...................................................#....#.......#.......#.................................#........#.......
|
||||||
|
.#....#....................#..............................................................................#.............#.......#.
|
||||||
|
.........#.................#.......................................#...........#......#.......#............#............#.........
|
||||||
|
........................................#...............................#.........................................................
|
||||||
|
..............#....#......................#..........#........#.....................................#...........#..........#......
|
||||||
|
......##....#.............#..........#......................#.........................................##..........................
|
||||||
|
....................#.............................#.....................##.#..........#..#......................###.........#.....
|
||||||
|
.#.......................................##........................#.....#.....#..#...............................................
|
||||||
|
..............................#............................#.......................................................##.............
|
||||||
|
.........#.............................#..............#......#.....#..............#.#............................#........#....#..
|
||||||
|
............#..............#.............................#..........................#.............................#...............
|
||||||
|
.................#...........#..............#.....#..............................#.............#................#.....#...........
|
||||||
|
........#.....................#........#.....................................#..........................#......#.#................
|
||||||
|
.....................................................#..#........................#.##..#.........#................................
|
||||||
|
......#..............................................#..........................#...............................#..........#......
|
||||||
|
.................................................#.................##.......................#...................................#.
|
||||||
|
....................#.....#.......#.............#................................#..........#...#.................................
|
148
2024/day06/main.go
Normal file
148
2024/day06/main.go
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
inp := h.StdinToCoordMap()
|
||||||
|
cp := inp.Copy()
|
||||||
|
m := part1(inp)
|
||||||
|
part2(*cp, m.FindAll('X'))
|
||||||
|
}
|
||||||
|
|
||||||
|
var debug = false
|
||||||
|
|
||||||
|
func part1(m h.CoordByteMap) h.CoordByteMap {
|
||||||
|
init, err := m.FindFirst('^')
|
||||||
|
h.CheckErr(err)
|
||||||
|
for moveGuard(m) {
|
||||||
|
if debug {
|
||||||
|
fmt.Println(h.CLEAR_SCREEN)
|
||||||
|
fmt.Println(m)
|
||||||
|
guard := m.FindAll('^', '>', 'v', '<')[0]
|
||||||
|
fmt.Println(guard)
|
||||||
|
time.Sleep(time.Second / 10)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
fmt.Println("# Part 1")
|
||||||
|
fmt.Printf("Guard moved into %d positions.\n", m.Count('X'))
|
||||||
|
fmt.Println()
|
||||||
|
m.Put(init, '^')
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
|
func part2(clean h.CoordByteMap, p []h.Coordinate) {
|
||||||
|
// m should have all of the 'X' spots where the guard moved in part 1
|
||||||
|
init, err := clean.FindFirst('^')
|
||||||
|
h.CheckErr(err)
|
||||||
|
var obstacles []h.Coordinate
|
||||||
|
for i := range p {
|
||||||
|
fmt.Println(h.CLEAR_SCREEN)
|
||||||
|
fmt.Print("Progress: ")
|
||||||
|
h.PrintProgress(i, len(p))
|
||||||
|
fmt.Printf(" %d/%d\n", i, len(p))
|
||||||
|
m := *clean.Copy()
|
||||||
|
// Try putting an obstacle at p[i]
|
||||||
|
m.Put(p[i], 'O')
|
||||||
|
history := make(map[h.Coordinate][]string)
|
||||||
|
guard := m.FindAll('^', '>', 'v', '<')[0]
|
||||||
|
tst := m.Get(guard)
|
||||||
|
history[guard] = append(history[guard], string(tst))
|
||||||
|
var foundLoop bool
|
||||||
|
for moveGuard(m) && !foundLoop {
|
||||||
|
// fmt.Print(".")
|
||||||
|
if debug {
|
||||||
|
fmt.Println(h.CLEAR_SCREEN)
|
||||||
|
fmt.Println(m)
|
||||||
|
guard := m.FindAll('^', '>', 'v', '<')[0]
|
||||||
|
fmt.Printf("Guard: %s - Testing Obstacle: %s\n", guard, p[i])
|
||||||
|
fmt.Println(obstacles)
|
||||||
|
fmt.Println(history)
|
||||||
|
time.Sleep(time.Second / 10)
|
||||||
|
}
|
||||||
|
guard := m.FindAll('^', '>', 'v', '<')[0]
|
||||||
|
bt := m.Get(guard)
|
||||||
|
// Check if we already have this position/orientation in our history
|
||||||
|
for j := range history[guard] {
|
||||||
|
if history[guard][j] == string(bt) {
|
||||||
|
if !contains(obstacles, p[i]) {
|
||||||
|
obstacles = append(obstacles, p[i])
|
||||||
|
foundLoop = true
|
||||||
|
if debug {
|
||||||
|
fmt.Println("Found Loop:", string(history[guard][j]), "==", string(bt))
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
history[guard] = append(history[guard], string(bt))
|
||||||
|
}
|
||||||
|
m.Put(p[i], '.')
|
||||||
|
m.Put(init, '^')
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
fmt.Println("# Part 2")
|
||||||
|
fmt.Printf("Obstacle positions to create a loop: %d\n", len(obstacles))
|
||||||
|
// 583 is too low
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkForLoop(m h.CoordByteMap) {
|
||||||
|
}
|
||||||
|
|
||||||
|
func contains(sl []h.Coordinate, c h.Coordinate) bool {
|
||||||
|
for i := range sl {
|
||||||
|
if sl[i].Equals(c) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func turn(g byte) byte {
|
||||||
|
switch g {
|
||||||
|
case '^':
|
||||||
|
return '>'
|
||||||
|
case '>':
|
||||||
|
return 'v'
|
||||||
|
case 'v':
|
||||||
|
return '<'
|
||||||
|
default:
|
||||||
|
return '^'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func nextPos(guard h.Coordinate, m h.CoordByteMap) h.Coordinate {
|
||||||
|
switch m.Get(guard) {
|
||||||
|
case '>':
|
||||||
|
return guard.East()
|
||||||
|
case 'v':
|
||||||
|
return guard.South()
|
||||||
|
case '<':
|
||||||
|
return guard.West()
|
||||||
|
}
|
||||||
|
return guard.North()
|
||||||
|
}
|
||||||
|
|
||||||
|
func moveGuard(m h.CoordByteMap) bool {
|
||||||
|
guard := m.FindAll('^', '>', 'v', '<')[0]
|
||||||
|
currBt := m.Get(guard)
|
||||||
|
turn := turn(currBt)
|
||||||
|
next := nextPos(guard, m)
|
||||||
|
if !m.ContainsCoord(next) {
|
||||||
|
m.Put(guard, 'X')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
tst := m.Get(next)
|
||||||
|
if tst == '#' || tst == 'O' {
|
||||||
|
m.Put(guard, turn)
|
||||||
|
return moveGuard(m)
|
||||||
|
}
|
||||||
|
m.Put(guard, 'X')
|
||||||
|
m.Put(next, currBt)
|
||||||
|
return true
|
||||||
|
}
|
170
2024/day06/problem
Normal file
170
2024/day06/problem
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
[1]Advent of Code
|
||||||
|
|
||||||
|
• [2][About]
|
||||||
|
• [3][Events]
|
||||||
|
• [4][Shop]
|
||||||
|
• [5][Settings]
|
||||||
|
• [6][Log Out]
|
||||||
|
|
||||||
|
br0xen [7](AoC++) 10*
|
||||||
|
|
||||||
|
{ʼyearʼ:[8]2024}
|
||||||
|
|
||||||
|
• [9][Calendar]
|
||||||
|
• [10][AoC++]
|
||||||
|
• [11][Sponsors]
|
||||||
|
• [12][Leaderboard]
|
||||||
|
• [13][Stats]
|
||||||
|
|
||||||
|
Our [14]sponsors help make Advent of Code possible:
|
||||||
|
[15]Jane Street - Weʼre a research-driven trading firm where curious
|
||||||
|
people work together to solve the puzzle of global markets. Will our next
|
||||||
|
great idea come from you? Our largest offices are in NYC, London, Hong
|
||||||
|
Kong, and Singapore.
|
||||||
|
|
||||||
|
--- Day 6: Guard Gallivant ---
|
||||||
|
|
||||||
|
The Historians use their fancy [16]device again, this time to whisk you
|
||||||
|
all away to the North Pole prototype suit manufacturing lab... in the year
|
||||||
|
[17]1518! It turns out that having direct access to history is very
|
||||||
|
convenient for a group of historians.
|
||||||
|
|
||||||
|
You still have to be careful of time paradoxes, and so it will be
|
||||||
|
important to avoid anyone from 1518 while The Historians search for the
|
||||||
|
Chief. Unfortunately, a single guard is patrolling this part of the lab.
|
||||||
|
|
||||||
|
Maybe you can work out where the guard will go ahead of time so that The
|
||||||
|
Historians can search safely?
|
||||||
|
|
||||||
|
You start by making a map (your puzzle input) of the situation. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
The map shows the current position of the guard with ^ (to indicate the
|
||||||
|
guard is currently facing up from the perspective of the map). Any
|
||||||
|
obstructions - crates, desks, alchemical reactors, etc. - are shown as #.
|
||||||
|
|
||||||
|
Lab guards in 1518 follow a very strict patrol protocol which involves
|
||||||
|
repeatedly following these steps:
|
||||||
|
|
||||||
|
• If there is something directly in front of you, turn right 90 degrees.
|
||||||
|
• Otherwise, take a step forward.
|
||||||
|
|
||||||
|
Following the above protocol, the guard moves up several times until she
|
||||||
|
reaches an obstacle (in this case, a pile of failed suit prototypes):
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....^....#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#........
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Because there is now an obstacle in front of the guard, she turns right
|
||||||
|
before continuing straight in her new facing direction:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
........>#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#........
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
Reaching another obstacle (a spool of several very long polymers), she
|
||||||
|
turns right again and continues downward:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#......v.
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
||||||
|
|
||||||
|
This process continues for a while, but the guard eventually leaves the
|
||||||
|
mapped area (after walking past a tank of universal solvent):
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#........
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#v..
|
||||||
|
|
||||||
|
By predicting the guard's route, you can determine which specific
|
||||||
|
positions in the lab will be in the patrol path. Including the guard's
|
||||||
|
starting position, the positions visited by the guard before leaving the
|
||||||
|
area are marked with an X:
|
||||||
|
|
||||||
|
....#.....
|
||||||
|
....XXXXX#
|
||||||
|
....X...X.
|
||||||
|
..#.X...X.
|
||||||
|
..XXXXX#X.
|
||||||
|
..X.X.X.X.
|
||||||
|
.#XXXXXXX.
|
||||||
|
.XXXXXXX#.
|
||||||
|
#XXXXXXX..
|
||||||
|
......#X..
|
||||||
|
|
||||||
|
In this example, the guard will visit 41 distinct positions on your map.
|
||||||
|
|
||||||
|
Predict the path of the guard. How many distinct positions will the guard
|
||||||
|
visit before leaving the mapped area?
|
||||||
|
|
||||||
|
To begin, [18]get your puzzle input.
|
||||||
|
|
||||||
|
Answer: [19]_____________________ [20][ [Submit] ]
|
||||||
|
|
||||||
|
You can also [Shareon [21]Bluesky [22]Twitter [23]Mastodon] this puzzle.
|
||||||
|
|
||||||
|
References
|
||||||
|
|
||||||
|
Visible links
|
||||||
|
1. https://adventofcode.com/
|
||||||
|
2. https://adventofcode.com/2024/about
|
||||||
|
3. https://adventofcode.com/2024/events
|
||||||
|
4. https://cottonbureau.com/people/advent-of-code
|
||||||
|
5. https://adventofcode.com/2024/settings
|
||||||
|
6. https://adventofcode.com/2024/auth/logout
|
||||||
|
7. Advent of Code Supporter
|
||||||
|
https://adventofcode.com/2024/support
|
||||||
|
8. https://adventofcode.com/2024
|
||||||
|
9. https://adventofcode.com/2024
|
||||||
|
10. https://adventofcode.com/2024/support
|
||||||
|
11. https://adventofcode.com/2024/sponsors
|
||||||
|
12. https://adventofcode.com/2024/leaderboard
|
||||||
|
13. https://adventofcode.com/2024/stats
|
||||||
|
14. https://adventofcode.com/2024/sponsors
|
||||||
|
15. https://adventofcode.com/2024/sponsors/redirect?url=https%3A%2F%2Fwww%2Ejanestreet%2Ecom%2F
|
||||||
|
16. https://adventofcode.com/2024/day/4
|
||||||
|
17. https://adventofcode.com/2018/day/5
|
||||||
|
18. https://adventofcode.com/2024/day/6/input
|
||||||
|
21. https://bsky.app/intent/compose?text=%22Guard+Gallivant%22+%2D+Day+6+%2D+Advent+of+Code+2024+%23AdventOfCode+https%3A%2F%2Fadventofcode%2Ecom%2F2024%2Fday%2F6
|
||||||
|
22. https://twitter.com/intent/tweet?text=%22Guard+Gallivant%22+%2D+Day+6+%2D+Advent+of+Code+2024&url=https%3A%2F%2Fadventofcode%2Ecom%2F2024%2Fday%2F6&related=ericwastl&hashtags=AdventOfCode
|
||||||
|
23. javascript:void(0);
|
10
2024/day06/testinput
Normal file
10
2024/day06/testinput
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
....#.....
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
..#.......
|
||||||
|
.......#..
|
||||||
|
..........
|
||||||
|
.#..^.....
|
||||||
|
........#.
|
||||||
|
#.........
|
||||||
|
......#...
|
@ -34,6 +34,21 @@ func NewCoordByteMap() CoordByteMap {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *CoordByteMap) Copy() *CoordByteMap {
|
||||||
|
c := CoordByteMap{
|
||||||
|
Field: make(map[Coordinate]byte),
|
||||||
|
TLX: m.TLX,
|
||||||
|
TLY: m.TLY,
|
||||||
|
BRX: m.BRX,
|
||||||
|
BRY: m.BRY,
|
||||||
|
StringEmptyByte: m.StringEmptyByte,
|
||||||
|
}
|
||||||
|
for i := range m.Field {
|
||||||
|
c.Field[i] = m.Field[i]
|
||||||
|
}
|
||||||
|
return &c
|
||||||
|
}
|
||||||
|
|
||||||
func StringSliceToCoordByteMap(input []string) CoordByteMap {
|
func StringSliceToCoordByteMap(input []string) CoordByteMap {
|
||||||
ret := CoordByteMap{
|
ret := CoordByteMap{
|
||||||
Field: make(map[Coordinate]byte),
|
Field: make(map[Coordinate]byte),
|
||||||
@ -259,7 +274,7 @@ func (m *CoordByteMap) FindLast(b byte) (Coordinate, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Coordinate{}, errors.New("Not Found")
|
return Coordinate{}, errors.New("not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *CoordByteMap) FindAll(b ...byte) []Coordinate {
|
func (m *CoordByteMap) FindAll(b ...byte) []Coordinate {
|
||||||
|
@ -31,6 +31,12 @@ const (
|
|||||||
SHRUG = "¯\\_(ツ)_/¯"
|
SHRUG = "¯\\_(ツ)_/¯"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func CheckErr(err error) {
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Fact returns the factorial of the given int
|
// Fact returns the factorial of the given int
|
||||||
func Fact(x int) int {
|
func Fact(x int) int {
|
||||||
var ret int
|
var ret int
|
||||||
@ -402,6 +408,7 @@ func SliceMin(sl []int) int {
|
|||||||
return Min(sl[0], sl[1], sl[2:]...)
|
return Min(sl[0], sl[1], sl[2:]...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Min(v1, v2 int, vrest ...int) int {
|
func Min(v1, v2 int, vrest ...int) int {
|
||||||
min := v2
|
min := v2
|
||||||
if v1 < v2 {
|
if v1 < v2 {
|
||||||
@ -440,3 +447,17 @@ func Sum(l, h int) int {
|
|||||||
func ManhattanDistance(x1, y1, x2, y2 int) int {
|
func ManhattanDistance(x1, y1, x2, y2 int) int {
|
||||||
return AbsInt(x1-x2) + AbsInt(y1-y2)
|
return AbsInt(x1-x2) + AbsInt(y1-y2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PromptUser(text string, required bool) string {
|
||||||
|
var resp string
|
||||||
|
fmt.Print(text + ": ")
|
||||||
|
scanner := bufio.NewScanner(os.Stdin)
|
||||||
|
if scanner.Scan() {
|
||||||
|
resp = scanner.Text()
|
||||||
|
}
|
||||||
|
if resp == "" && required {
|
||||||
|
fmt.Println("Non-empty response is required")
|
||||||
|
return PromptUser(text, required)
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(resp)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user