Compare commits
18 Commits
ed95f875ad
...
main
Author | SHA1 | Date | |
---|---|---|---|
42aecb2071 | |||
8bbc7bf653 | |||
e0cd4c3f98 | |||
d229aa44d9 | |||
e1cf0cf53f | |||
96fab0b0a7 | |||
0e22e82652 | |||
355f5f6628 | |||
f2caf1d0cb | |||
64fd4e99c4 | |||
1fd835c142 | |||
5bb3392691 | |||
5b3a5d829d | |||
e04df4b548 | |||
577da4ab52 | |||
4bda83476c | |||
849fc74a15 | |||
c604a4074f |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
**/target/
|
458
2020/day20.go
Normal file
458
2020/day20.go
Normal file
@ -0,0 +1,458 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
|
"git.annabunch.es/annabunches/adventofcode/2020/lib/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
MATCH_NONE = iota
|
||||||
|
MATCH_TOP
|
||||||
|
MATCH_BOTTOM
|
||||||
|
MATCH_LEFT
|
||||||
|
MATCH_RIGHT
|
||||||
|
)
|
||||||
|
|
||||||
|
type Tile struct {
|
||||||
|
id int
|
||||||
|
data []string
|
||||||
|
rotation int
|
||||||
|
flippedX bool
|
||||||
|
flippedY bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewTile() *Tile {
|
||||||
|
return &Tile{
|
||||||
|
data: make([]string, 0),
|
||||||
|
rotation: 0,
|
||||||
|
flippedX: false,
|
||||||
|
flippedY: false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tile) print() {
|
||||||
|
for _, line := range t.data {
|
||||||
|
fmt.Println(line)
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tile) rotate() {
|
||||||
|
newData := make([]string, len(t.data))
|
||||||
|
for i := len(t.data) - 1; i >= 0; i-- {
|
||||||
|
for j, char := range t.data[i] {
|
||||||
|
newData[j] += string(char)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t.data = newData
|
||||||
|
|
||||||
|
t.rotation++
|
||||||
|
if t.rotation > 3 {
|
||||||
|
t.rotation = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tile) flipX() {
|
||||||
|
newData := make([]string, len(t.data))
|
||||||
|
|
||||||
|
for i := 0; i < len(newData); i++ {
|
||||||
|
newData[i] = t.data[len(t.data)-1-i]
|
||||||
|
}
|
||||||
|
|
||||||
|
t.data = newData
|
||||||
|
t.flippedX = !t.flippedX
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tile) flipY() {
|
||||||
|
newData := make([]string, len(t.data))
|
||||||
|
|
||||||
|
for i := 0; i < len(newData); i++ {
|
||||||
|
for j := 0; j < len(t.data[i]); j++ {
|
||||||
|
newData[i] += string(t.data[i][len(t.data)-1-j])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
t.data = newData
|
||||||
|
t.flippedY = !t.flippedY
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *Tile) reset() {
|
||||||
|
for t.rotation != 0 {
|
||||||
|
t.rotate()
|
||||||
|
}
|
||||||
|
|
||||||
|
if t.flippedX {
|
||||||
|
t.flipX()
|
||||||
|
}
|
||||||
|
if t.flippedY {
|
||||||
|
t.flipY()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseInput(input []string) map[int]*Tile {
|
||||||
|
tileMap := make(map[int]*Tile)
|
||||||
|
|
||||||
|
re := regexp.MustCompile("^Tile ([0-9]+):$")
|
||||||
|
id := 0
|
||||||
|
tile := NewTile()
|
||||||
|
for _, line := range input {
|
||||||
|
if re.MatchString(line) {
|
||||||
|
id = util.MustAtoi(re.FindStringSubmatch(line)[1])
|
||||||
|
tile.id = id
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if line == "" {
|
||||||
|
tileMap[id] = tile
|
||||||
|
tile = NewTile()
|
||||||
|
id = 0
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
tile.data = append(tile.data, line)
|
||||||
|
}
|
||||||
|
|
||||||
|
// if needed, add the last one (might be missing our final blank line)
|
||||||
|
if id != 0 {
|
||||||
|
tileMap[id] = tile
|
||||||
|
}
|
||||||
|
|
||||||
|
return tileMap
|
||||||
|
}
|
||||||
|
|
||||||
|
func matchTiles(oldTile, newTile *Tile) int {
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
check := subMatchTiles(oldTile, newTile)
|
||||||
|
if check != MATCH_NONE {
|
||||||
|
return check
|
||||||
|
}
|
||||||
|
newTile.rotate()
|
||||||
|
}
|
||||||
|
|
||||||
|
newTile.reset()
|
||||||
|
newTile.flipX()
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
check := subMatchTiles(oldTile, newTile)
|
||||||
|
if check != MATCH_NONE {
|
||||||
|
return check
|
||||||
|
}
|
||||||
|
newTile.rotate()
|
||||||
|
}
|
||||||
|
|
||||||
|
newTile.reset()
|
||||||
|
newTile.flipY()
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
check := subMatchTiles(oldTile, newTile)
|
||||||
|
if check != MATCH_NONE {
|
||||||
|
return check
|
||||||
|
}
|
||||||
|
newTile.rotate()
|
||||||
|
}
|
||||||
|
|
||||||
|
newTile.reset()
|
||||||
|
newTile.flipX()
|
||||||
|
newTile.flipY()
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
check := subMatchTiles(oldTile, newTile)
|
||||||
|
if check != MATCH_NONE {
|
||||||
|
return check
|
||||||
|
}
|
||||||
|
newTile.rotate()
|
||||||
|
}
|
||||||
|
|
||||||
|
return MATCH_NONE
|
||||||
|
}
|
||||||
|
|
||||||
|
func subMatchTiles(oldTile, newTile *Tile) int {
|
||||||
|
// check top
|
||||||
|
if oldTile.data[0] == newTile.data[0] {
|
||||||
|
return MATCH_TOP
|
||||||
|
}
|
||||||
|
// check bottom
|
||||||
|
if oldTile.data[len(oldTile.data)-1] == newTile.data[len(newTile.data)-1] {
|
||||||
|
return MATCH_BOTTOM
|
||||||
|
}
|
||||||
|
// check left
|
||||||
|
match := true
|
||||||
|
for i := 0; i < len(oldTile.data); i++ {
|
||||||
|
if oldTile.data[i][0] != newTile.data[i][0] {
|
||||||
|
match = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if match {
|
||||||
|
return MATCH_LEFT
|
||||||
|
}
|
||||||
|
|
||||||
|
// check right
|
||||||
|
match = true
|
||||||
|
for i := 0; i < len(oldTile.data); i++ {
|
||||||
|
if oldTile.data[i][len(oldTile.data)-1] != newTile.data[i][len(newTile.data)-1] {
|
||||||
|
match = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if match {
|
||||||
|
return MATCH_RIGHT
|
||||||
|
}
|
||||||
|
|
||||||
|
return MATCH_NONE
|
||||||
|
}
|
||||||
|
|
||||||
|
func arrangeTiles(tiles map[int]*Tile) map[[2]int]*Tile {
|
||||||
|
grid := make(map[[2]int]*Tile)
|
||||||
|
looseTiles := make([]*Tile, 0)
|
||||||
|
for _, v := range tiles {
|
||||||
|
looseTiles = append(looseTiles, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
// arbitrarily place a first tile
|
||||||
|
grid[[2]int{0, 0}] = looseTiles[0]
|
||||||
|
looseTiles = looseTiles[1:]
|
||||||
|
|
||||||
|
for len(looseTiles) > 0 {
|
||||||
|
for coord, tile := range grid {
|
||||||
|
if _, ok := grid[[2]int{coord[0] + 1, coord[1]}]; ok {
|
||||||
|
if _, ok := grid[[2]int{coord[0] - 1, coord[1]}]; ok {
|
||||||
|
if _, ok := grid[[2]int{coord[0], coord[1] + 1}]; ok {
|
||||||
|
if _, ok := grid[[2]int{coord[0], coord[1] - 1}]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, loose := range looseTiles {
|
||||||
|
matched := matchTiles(tile, loose)
|
||||||
|
// On a match, flip appropriately and set coords
|
||||||
|
// check for already present tiles as well - skip if that's the case
|
||||||
|
var newCoords [2]int
|
||||||
|
willFlipX := true
|
||||||
|
switch matched {
|
||||||
|
case MATCH_TOP:
|
||||||
|
newCoords = [2]int{coord[0], coord[1] + 1}
|
||||||
|
case MATCH_BOTTOM:
|
||||||
|
newCoords = [2]int{coord[0], coord[1] - 1}
|
||||||
|
case MATCH_LEFT:
|
||||||
|
newCoords = [2]int{coord[0] - 1, coord[1]}
|
||||||
|
willFlipX = false
|
||||||
|
case MATCH_RIGHT:
|
||||||
|
newCoords = [2]int{coord[0] + 1, coord[1]}
|
||||||
|
willFlipX = false
|
||||||
|
}
|
||||||
|
|
||||||
|
if matched != MATCH_NONE {
|
||||||
|
if _, ok := grid[newCoords]; ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if willFlipX {
|
||||||
|
loose.flipX()
|
||||||
|
} else {
|
||||||
|
loose.flipY()
|
||||||
|
}
|
||||||
|
|
||||||
|
grid[newCoords] = loose
|
||||||
|
|
||||||
|
if i == len(looseTiles)-1 {
|
||||||
|
looseTiles = looseTiles[:i]
|
||||||
|
} else {
|
||||||
|
looseTiles = append(looseTiles[:i], looseTiles[i+1:]...)
|
||||||
|
}
|
||||||
|
break // to avoid sequencing issues
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return grid
|
||||||
|
}
|
||||||
|
|
||||||
|
func findCorners(grid map[[2]int]*Tile) []*Tile {
|
||||||
|
corners := make([]*Tile, 0)
|
||||||
|
|
||||||
|
// min and max coord values
|
||||||
|
minX, minY, maxX, maxY := findLimits(grid)
|
||||||
|
|
||||||
|
corners = append(corners, grid[[2]int{minX, minY}])
|
||||||
|
corners = append(corners, grid[[2]int{maxX, minY}])
|
||||||
|
corners = append(corners, grid[[2]int{minX, maxY}])
|
||||||
|
corners = append(corners, grid[[2]int{maxX, maxY}])
|
||||||
|
return corners
|
||||||
|
}
|
||||||
|
|
||||||
|
func findLimits(grid map[[2]int]*Tile) (int, int, int, int) {
|
||||||
|
var minX, minY, maxX, maxY int
|
||||||
|
for coord, _ := range grid {
|
||||||
|
if coord[0] > maxX {
|
||||||
|
maxX = coord[0]
|
||||||
|
}
|
||||||
|
if coord[0] < minX {
|
||||||
|
minX = coord[0]
|
||||||
|
}
|
||||||
|
if coord[1] > maxY {
|
||||||
|
maxY = coord[1]
|
||||||
|
}
|
||||||
|
if coord[1] < minY {
|
||||||
|
minY = coord[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minX, minY, maxX, maxY
|
||||||
|
}
|
||||||
|
|
||||||
|
func stripBorder(tile *Tile) []string {
|
||||||
|
ret := make([]string, 0)
|
||||||
|
for i := 1; i < len(tile.data)-1; i++ {
|
||||||
|
ret = append(ret, tile.data[i][1:len(tile.data)-1])
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
func combineTiles(grid map[[2]int]*Tile) *Tile {
|
||||||
|
bigTile := NewTile()
|
||||||
|
minX, minY, maxX, maxY := findLimits(grid)
|
||||||
|
|
||||||
|
for j := maxY; j >= minY; j-- {
|
||||||
|
row := make([]string, 8)
|
||||||
|
for i := minX; i <= maxX; i++ {
|
||||||
|
var tile *Tile
|
||||||
|
tile, ok := grid[[2]int{i, j}]
|
||||||
|
if !ok {
|
||||||
|
log.Panicf("Couldn't find tile: %d, %d", i, j)
|
||||||
|
}
|
||||||
|
|
||||||
|
data := stripBorder(tile)
|
||||||
|
for i, line := range data {
|
||||||
|
row[i] = row[i] + line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bigTile.data = append(bigTile.data, row...)
|
||||||
|
}
|
||||||
|
|
||||||
|
return bigTile
|
||||||
|
}
|
||||||
|
|
||||||
|
var monsterPattern = []string{
|
||||||
|
" # ",
|
||||||
|
"# ## ## ###",
|
||||||
|
" # # # # # # ",
|
||||||
|
}
|
||||||
|
|
||||||
|
func subFilterMonsters(image *Tile) int {
|
||||||
|
numMonsters := 0
|
||||||
|
for i := 0; i < len(image.data)-2; i++ {
|
||||||
|
for j := 0; j < len(image.data[0])-19; j++ {
|
||||||
|
if monsterCheck(image, i, j) {
|
||||||
|
removeMonster(image, i, j)
|
||||||
|
numMonsters++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return numMonsters
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeMonster(image *Tile, i, j int) {
|
||||||
|
for y := 0; y < 3; y++ {
|
||||||
|
for x := 0; x < 20; x++ {
|
||||||
|
if monsterPattern[y][x] == '#' {
|
||||||
|
if j+x == len(image.data[i+y])-1 {
|
||||||
|
image.data[i+y] = image.data[i+y][:j+x] + "O"
|
||||||
|
} else {
|
||||||
|
image.data[i+y] = image.data[i+y][:j+x] + "O" + image.data[i+y][j+x+1:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func monsterCheck(image *Tile, i, j int) bool {
|
||||||
|
data := image.data
|
||||||
|
|
||||||
|
for y := 0; y < 3; y++ {
|
||||||
|
for x := 0; x < 20; x++ {
|
||||||
|
if data[i+y][j+x] == '.' && monsterPattern[y][x] == '#' {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func filterMonsters(image *Tile) int {
|
||||||
|
numMonsters := 0
|
||||||
|
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
numMonsters = subFilterMonsters(image)
|
||||||
|
if numMonsters > 0 {
|
||||||
|
return numMonsters
|
||||||
|
}
|
||||||
|
image.rotate()
|
||||||
|
}
|
||||||
|
|
||||||
|
image.reset()
|
||||||
|
image.flipX()
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
numMonsters = subFilterMonsters(image)
|
||||||
|
if numMonsters > 0 {
|
||||||
|
return numMonsters
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
image.reset()
|
||||||
|
image.flipY()
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
numMonsters = subFilterMonsters(image)
|
||||||
|
if numMonsters > 0 {
|
||||||
|
return numMonsters
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
image.reset()
|
||||||
|
image.flipX()
|
||||||
|
image.flipY()
|
||||||
|
for i := 0; i < 4; i++ {
|
||||||
|
numMonsters = subFilterMonsters(image)
|
||||||
|
if numMonsters > 0 {
|
||||||
|
return numMonsters
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return numMonsters
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
step := os.Args[1]
|
||||||
|
values := util.InputParserStrings(os.Args[2])
|
||||||
|
|
||||||
|
tileMap := parseInput(values)
|
||||||
|
grid := arrangeTiles(tileMap)
|
||||||
|
|
||||||
|
switch step {
|
||||||
|
case "1":
|
||||||
|
corners := findCorners(grid)
|
||||||
|
product := 1
|
||||||
|
for _, tile := range corners {
|
||||||
|
product *= tile.id
|
||||||
|
}
|
||||||
|
fmt.Println(product)
|
||||||
|
case "2":
|
||||||
|
image := combineTiles(grid)
|
||||||
|
monsters := filterMonsters(image)
|
||||||
|
if monsters == 0 {
|
||||||
|
log.Panicf("Found no monsters")
|
||||||
|
}
|
||||||
|
count := 0
|
||||||
|
for _, line := range image.data {
|
||||||
|
for _, char := range line {
|
||||||
|
if char == '#' {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println(count)
|
||||||
|
}
|
||||||
|
}
|
51
2020/day25.go
Normal file
51
2020/day25.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"git.annabunch.es/annabunches/adventofcode/2020/lib/util"
|
||||||
|
)
|
||||||
|
|
||||||
|
func findLoopSize(pubKey, subject int) int {
|
||||||
|
value := 1
|
||||||
|
for i := 0; ; i++ {
|
||||||
|
value *= subject
|
||||||
|
value %= 20201227
|
||||||
|
|
||||||
|
if value == pubKey {
|
||||||
|
return i + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func transformLoop(pubKey, loopSize int) int {
|
||||||
|
value := 1
|
||||||
|
for i := 0; i < loopSize; i++ {
|
||||||
|
value *= pubKey
|
||||||
|
value %= 20201227
|
||||||
|
}
|
||||||
|
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
step := os.Args[1]
|
||||||
|
values := util.InputParserInts(os.Args[2])
|
||||||
|
|
||||||
|
keyPub := values[0]
|
||||||
|
doorPub := values[1]
|
||||||
|
|
||||||
|
keyLoop := findLoopSize(keyPub, 7)
|
||||||
|
doorLoop := findLoopSize(doorPub, 7)
|
||||||
|
|
||||||
|
encryptionKey1 := transformLoop(keyPub, doorLoop)
|
||||||
|
encryptionKey2 := transformLoop(doorPub, keyLoop)
|
||||||
|
|
||||||
|
switch step {
|
||||||
|
case "1":
|
||||||
|
fmt.Println(encryptionKey1)
|
||||||
|
fmt.Println(encryptionKey2)
|
||||||
|
case "2":
|
||||||
|
}
|
||||||
|
}
|
16
2022/Cargo.lock
generated
Normal file
16
2022/Cargo.lock
generated
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aoc2022"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"sorted-vec",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sorted-vec"
|
||||||
|
version = "0.8.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c6734caf0b6f51addd5eeacca12fb39b2c6c14e8d4f3ac42f3a78955c0467458"
|
9
2022/Cargo.toml
Normal file
9
2022/Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "aoc2022"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
sorted-vec = "0.8.3"
|
2252
2022/input/day01.txt
Normal file
2252
2022/input/day01.txt
Normal file
File diff suppressed because it is too large
Load Diff
2500
2022/input/day02.txt
Normal file
2500
2022/input/day02.txt
Normal file
File diff suppressed because it is too large
Load Diff
300
2022/input/day03.txt
Executable file
300
2022/input/day03.txt
Executable file
@ -0,0 +1,300 @@
|
|||||||
|
FzQrhQpJtJMFzlpplrTWjTnTTrjVsVvvTnTs
|
||||||
|
mScqSqqgcfPCqGPZcfGNSvTNsVVNSjNvWSNsNz
|
||||||
|
fPcPGqgCcHgFzQpJJtHtJH
|
||||||
|
DZDqqlrjplDHrNCmnBcHBMCRcJzb
|
||||||
|
RQFLStFvdcBbzdJbJM
|
||||||
|
PThQtwftTPFvtTPhvtFtfFtpZZllwjRNlsqNqqZjwpGlrZ
|
||||||
|
pPwtqgwJZPJLgQqSFlqhFFlqMd
|
||||||
|
DBmCWBBDWTRGvcVRTCCnnfQlFSdlzfhfdMWQfjhhQz
|
||||||
|
drmBVVCRgprPtrZp
|
||||||
|
HznjQjvmzDMVrQnMLJMMlfWgPSlJGWWJPl
|
||||||
|
BdcqqhcdBRpFhhZBthhctdJSJJWfgGFlJCSFgbWPCDJS
|
||||||
|
NdRTZdNqBwqtthpRBTTRqdtZrsLQVzrrzjzDwDsnmrQrnsrr
|
||||||
|
HZFZCFzZWszqsRTBZTNMhmthVTmhDppmMQVPpm
|
||||||
|
wjvSbJddvrvlrvnJSJJvlJmhPlhVPVtGVpQDBVMpphQP
|
||||||
|
frbrfrcvvnvjfwbcJgrrCBRsCFsNzRgRCHCqssRH
|
||||||
|
dDFNqNqZqPLNqvqTTvCLSPdZssGHClJQJcRHJGHHcHBcsMsQ
|
||||||
|
lrjmWgWWrhjgrppQHHMQrsQRJGcBJc
|
||||||
|
lVlmnwjmdTTSvVFN
|
||||||
|
FWNFHvQPmLGwwwSHtswwln
|
||||||
|
RfMJcDdfdcfdddfZjdchrtZmSmCZVtqVnZmrnrtC
|
||||||
|
JMmJcfjjphcghpgjhRGzGzBBGPFGNBvPTpFL
|
||||||
|
cVPVwStmmcQPBQPpSCppwhHZNNqHszNBhsNRNjqHzj
|
||||||
|
MfWdDgvdbnvgMTWgvgZfzmsZJHzNhqjqjRhJ
|
||||||
|
MDWMWGndMgFDnFLDwQrPPCSrCSVrlmGS
|
||||||
|
QLZmPdRdWmMsMDWZmsLWWrhMHcHGzHvGzFcvrvzNrc
|
||||||
|
tplSbLVBlvHHcFNnSr
|
||||||
|
VqfgwLlCJWmWQTfW
|
||||||
|
nRWvlvRbtLvdMCPFGL
|
||||||
|
wrfsJNNGhNzGrTgDMDLgPMLPfq
|
||||||
|
wcVhJQhwhrrBpmVblBRGSG
|
||||||
|
HHHcggrZLcQQcQll
|
||||||
|
GzfzTRTzmmFMwSNSwdSJQtNLNB
|
||||||
|
TGbmLMFTzVVVTMzmFMfFPMHPZhnjZCpHnhgnZnPWCPZZ
|
||||||
|
MRwwpVMHRspqVqwmccDlDrcHBBZgBl
|
||||||
|
jQfQQQjWWFBgmcgDfcZg
|
||||||
|
hvvSQzSnQQSWWQWSjTZVTRMshwVCssppwV
|
||||||
|
pvrTvCvtFppCHMMZcdDFdcZM
|
||||||
|
wLjTQnqljjSnlwjqjRgLcHHHMBDMZhBMHgHcbBDh
|
||||||
|
mqjqlSNqRqwSRrWCvzGmtfTfzs
|
||||||
|
TWScDCqCQQVBWDqWHsHswwBgRJzRhhHp
|
||||||
|
dPttGrvFfGjMjnjvshsJgsJLgghRgH
|
||||||
|
rFMlGdtjPffNnnrffSNcVCDqQqCQRqQRRN
|
||||||
|
GmBRbVpPbmJcwggBBgWW
|
||||||
|
LjsTCNNtddjHqLLgWwccqgfq
|
||||||
|
nsjNjntNtjHCsDwZmwZZVmmGSvSD
|
||||||
|
bwDDgNFtMMDbFsMbFwWWVcRcSpcgjgQWhWSp
|
||||||
|
lfTJJlvdfCffccWppRjRlcSc
|
||||||
|
RnzGdJJmsMNnMFtM
|
||||||
|
bsBTFsqqTTmFZTsQBWWznWCRshlJNJlCVh
|
||||||
|
GjGnDvDjvjPppHwwpwgrPPClJhNVRCzhhzJWlWlhNlvJ
|
||||||
|
ffdgLrgdLrDjdfHPbbZbttcBbcbLmntn
|
||||||
|
TNTwwvTTHNtTHNLLVqtqTSZBJnrnhhbrFJjZjnVZgghF
|
||||||
|
cplWfRlzcWfRCZZhFrGjBfjZjn
|
||||||
|
pddzDsRpDcclzCQMWBvNSmTTSqdvPPvqwqtT
|
||||||
|
DQTttwwLtQtVSDMJDRmmSS
|
||||||
|
ffsWfvrBWrPvwJhPhPSMPMVn
|
||||||
|
WsvsggFvwNLgHtNQ
|
||||||
|
llBbVDMTlFVdFDTbVggSVsqZqZZZqqvNJZJRNRWgtv
|
||||||
|
HhpjcHHvjPsqCsWcNcsq
|
||||||
|
GfpvnPvwFDTTFFDw
|
||||||
|
GMmFGMGFFgVwQHQwwM
|
||||||
|
cJtZNtZTbThcZtcZJJtTZWJPllgNgpPvVgpjHvQpRpHQNg
|
||||||
|
hWcJZcnhcJznbcBZLqSLDfCmHqnqCLsD
|
||||||
|
zQpjLpnhnsHTnlQLrMCCHPFrvvCMPcHm
|
||||||
|
ZfgdSBtNqBwlgSDfZDwtqSFvJCvrPrVvFmwCJFvrmmFV
|
||||||
|
dfbRNZBqDtgRNBNNNljLLjhGRGGWGLGTRhjz
|
||||||
|
hhrnfBzhtzZgDgDnBfrfDZsRpMNCNNWjwCCfGQGGNGCGQC
|
||||||
|
lcdPmHLSPDSdFDpQMLjCQQQCRGpN
|
||||||
|
lJSSbmPdVdVvdHbvSDFHHPlZqgBnttzgTsssTrqgbZbsTT
|
||||||
|
FsdsShrgggLDdbSDsgrGrlWHTpfRpTjjfFTzRTRjBWWp
|
||||||
|
mPvqCmJCqJNnPvPNPCvvLTTVjHjzNWHHTWRBRVTWVz
|
||||||
|
wJLvqPZmJtccncvZmJqqrghDGQwbdSGdsgGgQgQr
|
||||||
|
zFwtNJGtNFlpnwHccZjZbcpprsmc
|
||||||
|
PWQfBWhBgQgTWQRLThBqMSVDSbbDRsVDmsmZsSZDjr
|
||||||
|
fvQfWBfLqfTqhLhCvNFttJlCwGrrCC
|
||||||
|
fNrGLNrfNrGjllRRRPmWVL
|
||||||
|
tbJdcFbSSssZSmmpFcsSbwDWVWBlllVPDnnjBFjDRnBF
|
||||||
|
ZZJcvZctgNmmvMGhQm
|
||||||
|
HhhjFRhgrcRTFLvWVJVQWJVHDHQJPP
|
||||||
|
GwCmwBfGzfSCzCfwtmtzzJVWSVJJZrbWQQQqJJDZVJ
|
||||||
|
mtfzpGdststtBmfmCwrGRFcTcvjngjFnRcLnpLLn
|
||||||
|
rrwjdwLgVmVwHrfPCJPQBCBGmPtt
|
||||||
|
ccNZqbNnMMblNpTlNpnhhBPSJsQhJtJtChPJqS
|
||||||
|
vTWvNcWNWTFvnnvcgjzDLVQLgHVwWDrW
|
||||||
|
jNPgbNHbfLJgLzfz
|
||||||
|
ShvhhFVVDShFVqMSSSvZfffvPLtBBBBJJlpfLJJv
|
||||||
|
DqhnShhMnZZwCSDCMhChrRnNrNdNQbHNNPmjmdHN
|
||||||
|
VQVZGQFnzFTSsBfgzgfs
|
||||||
|
rjlpjtDrtMLZPMtPtpPZPwCsgSHgMHCCmCTWsgBWSBmg
|
||||||
|
pjvDqLwrlDtwqtqNLvtjpPPwRNbQRncQVQddZhRhJQbJncbG
|
||||||
|
PsBSqnSdQsFhmmmnppFc
|
||||||
|
TRhNvrTCvNTHVcfHbJVTpc
|
||||||
|
rhtWvGWLrjRqdSqqLLqdld
|
||||||
|
vPhfqPJvrMrnffDDhvpMjdzGMLdLLQpllLGQ
|
||||||
|
mbmcFSScGbSCcQlzwQQlclsg
|
||||||
|
BSGVCmCTZWCGGvnvfZHqqrDhHN
|
||||||
|
GSRfrzGRhzsGChjTBBlqBgjgCTCn
|
||||||
|
wHQwtDVDHwHHDJcDWJZwzHZBqTnnBFlvjFgBqnljjvBdBZ
|
||||||
|
JNmVJpVmNtDHJWHrbfPLhbGhrzRbpr
|
||||||
|
WcWcbzNPbDwBNvWBwRMPQmJZQRQZftRZGP
|
||||||
|
LhVHFgggTHCFHhfMQQSMMGQRMLLM
|
||||||
|
qnrqppFVHphqfDsNbzjrzbrN
|
||||||
|
cwgDrdLSrBrvvhDzCljjTW
|
||||||
|
VHtVZpspQtMQsVRQppFVQVHtCdPTPTzdjvhTzTTPRvjjvWhn
|
||||||
|
QQZpMdJsQFJHtMHdScwLwLJGrSScSwqw
|
||||||
|
ZsjNflGfRfRPrZNRFcffLwJdwcLdDBnwzzzDznVn
|
||||||
|
CTGvhhTqbtbgTqLJWdDntzWWdnLw
|
||||||
|
phCMgmQGvvHCvMhbTQQFsNsNFPZSfZjffmNsll
|
||||||
|
CNpCJHLNhhSSHZPgrFlFFWgpFpmzjj
|
||||||
|
qQttDVDwQGdQGvqDQfwbcVrrlljjzzmzrVJgrr
|
||||||
|
nvMDsqqqQvfvsqDnRSZHJPPZHhLHLS
|
||||||
|
RNNrrPfDNRQwQhjscghMqs
|
||||||
|
WVZlHvnZqtlLVLvwjwhsggTstMhwTw
|
||||||
|
vGHWLJlVWlmLVqRCGCFFNfqqGf
|
||||||
|
MNzqCnvqvqvCVLBvvCVCpVcRssncrPSTWGrPSPdGTcrP
|
||||||
|
hmHwFmQjFlhtZmHwtZjjddSSGcsdPrrGcQQQRGPW
|
||||||
|
fHbbFjlhZwmtwhfjmmwmmLbpLqzqvBzLzCvLNRMbNB
|
||||||
|
tQfLrtQPrrfDSSCVlDfLSrmbBjGvWjjLmWWWpWNNppmv
|
||||||
|
wdHhRTTndnRThdvnBFGpNBMnpvvp
|
||||||
|
JdqTHTHHRdqzsJRRzTRHscJdDSGCfDlqQZqlfZrZZCffqSSQ
|
||||||
|
hQMWLsgGJMMhsCHggQWhgspDWFPzZvPvptDvzvmtdtdF
|
||||||
|
BrBlrTBrNRbfnjNQlZDztPvpmpppmzvfdd
|
||||||
|
jQlQlqQVbVcsMgMgChhJVs
|
||||||
|
MtFMCTWRFRRtCRTTRTMGJddjLdstHvBzBHzHVVpL
|
||||||
|
lZSDnbDlnZPrbHpzJJsdSVJpBL
|
||||||
|
nNghhPrlZlgDTFhCfMFJRMQF
|
||||||
|
RGpPFZPRQZPFRGvpPQPpjvpmhnnCMjhmhgBgVgMVWBVgVM
|
||||||
|
wLtfNdNHmrNthCBgCbhnngWd
|
||||||
|
srSfwHfszsNmtswlrqQDGQFDRPJGDvzRppRJ
|
||||||
|
GVFFGvVWZLFsmssFRNfVvmGGJPpJTTqDBvTpqlpDvqbBtTPl
|
||||||
|
gQhzzChzrMQhjpzlzWzJpPpBJb
|
||||||
|
ghgWjcCjMgCHWdQMhdjChCmfwmRRGZZGVHLZHRfmNwVs
|
||||||
|
DnDVhdnrfSfpcGGjQQGdJddJ
|
||||||
|
bPWPRbRsRMsHNzDqTZcGBcqZqmmN
|
||||||
|
HvwPvvzMPwDCChDVwS
|
||||||
|
vTCCvTfWFDTtRPMvfWFlDFHBqGLpLzbwBgWwqzGqbBbB
|
||||||
|
cQcSNchSJSZShVJNnZrhSqBpgwGHHtGwqtbwLbqpbr
|
||||||
|
JNnJVsJscNstNhQsjnVVNlFfMmTMFfCTfjFvfPRPPF
|
||||||
|
VLFBsgffNFNqRvbz
|
||||||
|
ChltjTdjDhHpHZvdpjjZhwCpbNrbSzzbrNGMTMMNSMbWWNSN
|
||||||
|
vQjpttQhHnLsBQVLsQ
|
||||||
|
mbzQgTzRVVbsVdQgzzVRddmztFGWNGNNWnGtFSGBsrCNWCrC
|
||||||
|
jfJjvPPwLDcHDPvDDPDppLCWCFBGWntCBnrtFcrFWTGn
|
||||||
|
wpJPLjvpTTDpwhfgzmVMbqhdhVRgzl
|
||||||
|
PlcqbWClLmnqZVLq
|
||||||
|
THwdrrhddhhfJJhwLJhpQnDVnznnmZQQnSpfpD
|
||||||
|
vrFdvGsGHhhhwHjFGrFGJHdMCCcNgbWMPccRRccMFLNPPP
|
||||||
|
tbppJqcNtJnZzRJbPFsFPHfZrrshFDjj
|
||||||
|
GdwgwlLgGCndsDFrhDHHFF
|
||||||
|
SSlLnmmvqWNqmcqb
|
||||||
|
ZPFPPTZpZSWzCMMSzPBsFvhtlQvJQQtJhsVs
|
||||||
|
dmNbmgbrwDNmbcDgwNdcwdLsnhlJlnvtsBJnhVQqqnstLB
|
||||||
|
bNGfDGgHHVwbwNwVfgmRMzCzzCSHjSRZSZCTRS
|
||||||
|
dDTffQdqQQLBLnVLLQvL
|
||||||
|
rrBHZZcgJcrLvNLtLgRLbN
|
||||||
|
cjjJhrFlhZwFFzwJzmTBBdmTsDPzDsBP
|
||||||
|
ClGrJJMNCrGQqlcPvWgnDP
|
||||||
|
ZBvbjHpSwBVVVcWjjjqQ
|
||||||
|
BLSbbwsHSTBHwmLHHLbBsSTFdrfvCrtmdzfGJzrdzGJddGfh
|
||||||
|
gljWRwmSjtJWjJtJjgjSZfVSTVVHGZSVHcVchZ
|
||||||
|
pBzLFQpPsFBGcGBTThfB
|
||||||
|
pFpQzFLPLpvQFQnLbsqqGddgjbmwRldwtWmlGWwj
|
||||||
|
PDQDMFQBMfWPvjdLLndLjrmsMj
|
||||||
|
qZqVzTRRqHtvZGGtVqTTzVjLLsrmJCddnLjrjHsrhdCr
|
||||||
|
GzwcZtqNzqvNqwzZVGRwSzbpWfFbWPlWFpNDBfQfFNNf
|
||||||
|
dfRszdzVdsjwdhLwCCqwGllHvPGPwG
|
||||||
|
SpJtBLFgcGqHQClqZF
|
||||||
|
JrttrtcTmSSLrmtBTrNgnBJjbNhhbhzRdsVdMhNjhMMhVd
|
||||||
|
MPFSCfSMqVSBGrtzlvccfQctzbzl
|
||||||
|
hZNjTHWWTZwshbLvmlWpBzmbmm
|
||||||
|
dRTTJNDNhjsJqBBMMgrJPVVr
|
||||||
|
WnVzDMjlDVWwwHgwhmgNhNNsJh
|
||||||
|
qfvrLNCcbLdvpcvbrPPqCsGhSJGTTBspTshBpTBBms
|
||||||
|
ZLvvZfrPfPCLbCFFzjVQzRnNNMVzDQ
|
||||||
|
nllbFTTpTFTBcnCjQPqQdZRQZhCb
|
||||||
|
tvWszrrztvSmzQQvrDmZRjjjPPDVqPRdZRdCPd
|
||||||
|
gfzvSsftgQHQHgQl
|
||||||
|
GVbHRRGRLpdmGWTm
|
||||||
|
gSPPltPlrlvccFccPlcJNCTpnnmpMCLMMmWfdRmMSS
|
||||||
|
FzNJRhhvPFRvQwzqjqzBHZZj
|
||||||
|
PhZSpFBPBFsNmjBVllltBj
|
||||||
|
JMGLnrrnbfffrdqRqPHnnqLDVTDDjgmRgwtmjDljlDVlwl
|
||||||
|
LHMqPqPnnqGLWJPMnndrGfSWppzvvFSChFFFvvzQSQZz
|
||||||
|
RSWWssbvnnCqZnWsRCnssWrTggNhgbNHBgQjhhQBgjNT
|
||||||
|
mcpzcppzczcDGVcPcDLLGLjmrMNTNtQNHhMHrQBQNTgN
|
||||||
|
LVpPfcjjWvsFFnFf
|
||||||
|
MpddpdCpJdJlbdMvBHMnnsHqSRvG
|
||||||
|
PWvZfFmZrrfmwWwFznBnqRRSGcsBVmVBRG
|
||||||
|
zjzzhQPQvzjLPQzwffrwrtlTCDtJDlgJLltpTTJlTl
|
||||||
|
TvTWjjzpznGttFFZccrrPrSZllcB
|
||||||
|
gNNSqHMqsMHQJHNZCDDCZDqLZdlZBD
|
||||||
|
SMQNSRNbRRHwhwhsRmtnvWVmmnbGnjmpGn
|
||||||
|
ccSVQjCQddTsFJcH
|
||||||
|
gLppBfgfmvCRFdsddTJJgb
|
||||||
|
WMLMmWGGBZWZLCtvDhlSSDGlwhSPSzSP
|
||||||
|
TpqVGVHFQGmqSqPZdccNCzzhdwCjNG
|
||||||
|
fffbbvftMrBMDDcCccCZCjlvhCCd
|
||||||
|
RLWMnbftDhnMRtfBftRJMtLMgFgHmmpmPmSmmQFPPLHHVTQS
|
||||||
|
nRvwQSDNcpVJJcJR
|
||||||
|
qZMjBhjhZMMBzLBGLGrjJbTPVTpbdPPdVbVb
|
||||||
|
ZZpmFFZlfGqfmmGMzlfmMmnWQDtHtSvnWWNSHSSstFtS
|
||||||
|
bFDGZjGDbbRSgLtN
|
||||||
|
CphJVfJWCTBgvfLHNRcwnt
|
||||||
|
WVhPWBTzzChzhhhBmrpPPCJZDQtdMlrjFQdrFqsjdrQsFG
|
||||||
|
ZBpVQHHVMMWWdmmLWw
|
||||||
|
lQhhrjcRttrqbvQLNwdDWzmNSDmStz
|
||||||
|
QbGqhcbvcsqvCCHnsCZHCnTn
|
||||||
|
tlWtQTTTJjTQtVnmrbnPWVShVC
|
||||||
|
MDMGGzsHcwFgGZBqrmmPSnbqVmNVGC
|
||||||
|
sZFPwHcMZDBRTlvQQJttTQTR
|
||||||
|
FhVRfGptMGMnZhRFBNRBCCNHHNvTNTRC
|
||||||
|
zmwrLLSjrbzmNlcvvrHvDPCN
|
||||||
|
JLwjQdSbjdbSdqJQFGVqFVMgnGHMfGVV
|
||||||
|
fffZWrJqZSHWTWHqSvrgDhggzRjttsDhpDgs
|
||||||
|
PGlBLcBBbnnbLLFbGLBjRgjFTFVzshtzpgsppz
|
||||||
|
TGCPnMPQlGnPmclPlnnQmbmHJvNvfHdqwddwvvZfCNHCfW
|
||||||
|
ClLwpspTPrTFZCdzFbZdbQ
|
||||||
|
RRMWfRgWVRMRQBZZScVczVGFbjNb
|
||||||
|
MfnvMqWmslvDhQPw
|
||||||
|
hdndSdqsTddBhdcmmNHFDcqHttPF
|
||||||
|
JjMzzMZQGwZGZJzMzZJQzGJFvPvNPtFmvmNmDvcFtvDHMv
|
||||||
|
gZwzQwJfGVJQJbGLBsSTSTdTbCWDBSnd
|
||||||
|
ZZCHZRzMZGRMhMMVVFNThrdd
|
||||||
|
SgsccSPmmgqssSlqsgcmscSqlhpFdVThjphNrdrhjdwdhFJN
|
||||||
|
vmttqTcqvLqqmPccmqSBbRWnWzQZZZZBHnQCzHDH
|
||||||
|
GgPnGdSPBpGsLTBL
|
||||||
|
rVNJjmwZqtZZshltFTtvRFsL
|
||||||
|
mqmWrZVqWjrqZMNwPMQQbsddgdsbsgPz
|
||||||
|
LZLVvjZrggHLJggSZDgrnPnQnRnppVRllntRdPFz
|
||||||
|
chMCzbqGmhNhhbBCMBdFnpfqFnltRRQnlPpQ
|
||||||
|
TChmWcMMTmBswJzZZrWrvzgg
|
||||||
|
gngRNBNRBsNFFBgfgbLLLnqdSLvLTcbLbd
|
||||||
|
GWtlChlVMllcZSDWSLbdZL
|
||||||
|
lljjGlhMGrGJpsFdRJfsfzfz
|
||||||
|
jVTdrnGQcQtTTTFQqBqsgHHFgsqf
|
||||||
|
ZZLbPLzDzPZCmsgqsBHt
|
||||||
|
wDzDlPblRDPLPvhvwtdnnhdrnrMGWMVGMThj
|
||||||
|
spjjpjvjpjmQjrpCMfSlfzrPBl
|
||||||
|
dHFntHWnnbRVFtnbcqHFzBCCCPzfPMlcCSlgllzc
|
||||||
|
RLbVWHnnSWtnHFbdbVRdNNtQsjsQTjDLwmGTmTssQwmLGJ
|
||||||
|
JbJJSLMhRMSLhNqqwFDwFNcFqL
|
||||||
|
GcpnGnznnpzpzGpffNTNTwTfwdDNNdTFdD
|
||||||
|
nllnlPGWQWHcGpzzQGGzGvHGJbVVtJSChQVbmtmVJrmrmbRm
|
||||||
|
GFsFrzwrflmtdtbltG
|
||||||
|
ggLPDngCJncNLJRDwgnllmJqjWMjhjhjWWmWjj
|
||||||
|
nBNRNPgpRgDLTgNwfsSHVBQHVHwsZr
|
||||||
|
WwvnvWvcFtwtSFSF
|
||||||
|
zBZZZRQSzMBSgSVJGjGTPTGFzCzmmj
|
||||||
|
fZDrpZZfRfMgSQDDBhgQghDHsnbrcNlWnnLWHLrHsWnllc
|
||||||
|
ZVncdPPwVPdhZngnqHWHNNvTHvlMvn
|
||||||
|
fSLjjLSGGBjTTHqvBqrMNT
|
||||||
|
RSSSDGRtSGZthTTctmtg
|
||||||
|
rtzrfJbgJHRfGRZLPR
|
||||||
|
hdVhlllmFlFPLwHmsRGGZP
|
||||||
|
nTWhRjTBTWlvNQgnJSSbrJtz
|
||||||
|
JgVTpBpfvgpTDDJFJvTgggtlFlNNMRLNNzNNZRNHMRCLlF
|
||||||
|
wbPWcSGbGqWDlnNWMMMCLMWZ
|
||||||
|
wrsGcbrcbcqwDwbcmGvQBQgTTsdVJgJsVdQf
|
||||||
|
mztrhgJtDrhgcrZmnhbnzbhcMTMPlBCPBGVGTMVGslCCPGDs
|
||||||
|
FLRQmjjFSQpQwLlPsMsCpvslvPCB
|
||||||
|
fNLLwSdSwWSWjwmrtczZhhrJzdzh
|
||||||
|
HHwCwJFmHZttZCfCSffSMHcVDMcPBRPcPRDhPghM
|
||||||
|
nvQLsTnLslnLvpzGTssnsRPDMhPgVPVgtcVMRPgVQQ
|
||||||
|
vnsTGWlTLsWTLLvNsGWlsZrwmZCJddjFmtJJNZFftj
|
||||||
|
hbjSTvSJTfcSwcPSPfTbfHszVVFpGnpJpsHFnHVVls
|
||||||
|
rtZrcQrRZZQrmZBQlCGppnppHzpVFCGR
|
||||||
|
WmLqmgNtcLNQWTbPvfPwbbdb
|
||||||
|
HzZgsdHglHlzdHsFtsNNJSlNcSpjcjlrrNVv
|
||||||
|
wqqWRPPqwmbcqPjQVvSPJJrVpv
|
||||||
|
qqBBqmWRhqRLqcBnhzzztgnTdDHnHsFsHn
|
||||||
|
rJPFVwwsrJwmdVrLWJvvRBWBvbzWlb
|
||||||
|
nDZcNGNpjTpHncvpZCDnTNZGhlWzQhWbpRRQlQhpWWSWLlQb
|
||||||
|
CDNntnCCHnvmqPfwtFdVqd
|
||||||
|
gqBwgBjCswwgqNBNCVDDTVdhlSDTDcZc
|
||||||
|
HvRRFMzRRRRMpHrtTllfhZHHSShHTf
|
||||||
|
PmlGLPrppMrrmFFmLMWRjbsjnsjwQNJWnbQjWgBN
|
||||||
|
pDggpFgRghZjBFPPnPPFrt
|
||||||
|
cwTfLwBVwCWbLcVTVVvrdndGjMHrnGJtnttdMC
|
||||||
|
NTVcWNvcBSpgNqspRQlN
|
||||||
|
DLDgFlDmNZfjfnJZSF
|
||||||
|
tctvttzvGGzvrHqtVVdwnJGSSnnjjZdWTdwW
|
||||||
|
zvpcrbpHpqJJsPbPlLlhmhglPQ
|
||||||
|
pvHHvssFCFZQNCftttdQdd
|
||||||
|
VgTGTTVGgLjDjlLGzgPVMTNwmcwQmMQfQtmdcmwMJwNm
|
||||||
|
TPjTDjfGWTLLljgzrWpZZbsqrFqhqbps
|
||||||
|
ppVLcfcwSLgpSLVLgWwtfshDNDqvWvGvlQZvDNHQHjqq
|
||||||
|
MPrzmdRrPPrCJFnMnMRRFRPdqqZQNQvjvZDGDlHhQvGNDG
|
||||||
|
BmBMBBJTMmPBJMMFCCFJRmrsTlVpVbpwLSVwLsgcwTVlVc
|
||||||
|
SSGzmFRzmRGLgSSmGMJFnvfvJnJVnJQnMl
|
||||||
|
cBpjHtjwNfcpNZtppHtCMlMPMlJBVlVQlvJPvJ
|
||||||
|
dNtNZwqWfqtqZWtHttsqHqrRrrdRTLbmmzSLmTGGmbrg
|
||||||
|
RrrddnrgnRbbgWdGrfnwgQwjDjDpvTpBQTwBPP
|
||||||
|
MHCStZJzSwvPjWQD
|
||||||
|
mcJWVHCCLcGLbdcn
|
||||||
|
PlMsdjPdGMjdPSrSjgddbLbmHHTszHZzpHmsTFvmpzZzmN
|
||||||
|
ntRJQVRfcQhcQWhnchBJWntTFTTTNTSpFtztmZFDTpDZ
|
||||||
|
hQfcfCBSwCccVJhSJnrPPGLqPlbPLCrqldgb
|
||||||
|
vgvWDMZvGpcqgqsP
|
||||||
|
tSdtjLHLQLHjdFdDddQSQhwlsGqwQlqqqhQsPhGc
|
||||||
|
tbRjtTLFRvTZDBrMrV
|
1000
2022/input/day04.txt
Executable file
1000
2022/input/day04.txt
Executable file
File diff suppressed because it is too large
Load Diff
512
2022/input/day05.txt
Executable file
512
2022/input/day05.txt
Executable file
@ -0,0 +1,512 @@
|
|||||||
|
[B] [L] [J]
|
||||||
|
[B] [Q] [R] [D] [T]
|
||||||
|
[G] [H] [H] [M] [N] [F]
|
||||||
|
[J] [N] [D] [F] [J] [H] [B]
|
||||||
|
[Q] [F] [W] [S] [V] [N] [F] [N]
|
||||||
|
[W] [N] [H] [M] [L] [B] [R] [T] [Q]
|
||||||
|
[L] [T] [C] [R] [R] [J] [W] [Z] [L]
|
||||||
|
[S] [J] [S] [T] [T] [M] [D] [B] [H]
|
||||||
|
1 2 3 4 5 6 7 8 9
|
||||||
|
|
||||||
|
move 5 from 4 to 5
|
||||||
|
move 2 from 5 to 8
|
||||||
|
move 2 from 9 to 1
|
||||||
|
move 2 from 9 to 1
|
||||||
|
move 1 from 5 to 3
|
||||||
|
move 10 from 5 to 8
|
||||||
|
move 1 from 4 to 7
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 5 from 3 to 7
|
||||||
|
move 1 from 2 to 8
|
||||||
|
move 21 from 8 to 5
|
||||||
|
move 13 from 5 to 7
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 5 from 1 to 4
|
||||||
|
move 1 from 5 to 7
|
||||||
|
move 2 from 2 to 7
|
||||||
|
move 1 from 3 to 2
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 7 from 5 to 9
|
||||||
|
move 16 from 7 to 4
|
||||||
|
move 7 from 9 to 3
|
||||||
|
move 1 from 7 to 5
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 3 from 2 to 7
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 3 from 3 to 6
|
||||||
|
move 21 from 4 to 9
|
||||||
|
move 1 from 5 to 7
|
||||||
|
move 4 from 4 to 9
|
||||||
|
move 8 from 6 to 3
|
||||||
|
move 6 from 7 to 1
|
||||||
|
move 12 from 9 to 8
|
||||||
|
move 6 from 7 to 2
|
||||||
|
move 3 from 6 to 5
|
||||||
|
move 1 from 6 to 9
|
||||||
|
move 4 from 8 to 6
|
||||||
|
move 3 from 8 to 5
|
||||||
|
move 4 from 1 to 8
|
||||||
|
move 4 from 6 to 1
|
||||||
|
move 2 from 1 to 3
|
||||||
|
move 1 from 5 to 8
|
||||||
|
move 2 from 2 to 8
|
||||||
|
move 5 from 8 to 3
|
||||||
|
move 4 from 2 to 7
|
||||||
|
move 5 from 8 to 1
|
||||||
|
move 2 from 1 to 7
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 2 from 1 to 7
|
||||||
|
move 11 from 9 to 2
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 3 from 9 to 5
|
||||||
|
move 2 from 5 to 1
|
||||||
|
move 6 from 5 to 8
|
||||||
|
move 2 from 4 to 2
|
||||||
|
move 1 from 5 to 6
|
||||||
|
move 7 from 1 to 8
|
||||||
|
move 2 from 2 to 7
|
||||||
|
move 13 from 8 to 1
|
||||||
|
move 16 from 3 to 1
|
||||||
|
move 3 from 2 to 1
|
||||||
|
move 12 from 7 to 6
|
||||||
|
move 15 from 1 to 8
|
||||||
|
move 2 from 3 to 8
|
||||||
|
move 16 from 1 to 2
|
||||||
|
move 24 from 2 to 8
|
||||||
|
move 1 from 1 to 5
|
||||||
|
move 1 from 5 to 8
|
||||||
|
move 3 from 6 to 7
|
||||||
|
move 26 from 8 to 3
|
||||||
|
move 20 from 3 to 9
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 16 from 9 to 3
|
||||||
|
move 14 from 3 to 1
|
||||||
|
move 13 from 1 to 6
|
||||||
|
move 3 from 3 to 4
|
||||||
|
move 3 from 9 to 4
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 5 from 8 to 2
|
||||||
|
move 8 from 8 to 5
|
||||||
|
move 18 from 6 to 1
|
||||||
|
move 4 from 8 to 5
|
||||||
|
move 6 from 4 to 1
|
||||||
|
move 2 from 2 to 5
|
||||||
|
move 5 from 3 to 8
|
||||||
|
move 5 from 8 to 7
|
||||||
|
move 2 from 5 to 8
|
||||||
|
move 5 from 5 to 4
|
||||||
|
move 3 from 2 to 8
|
||||||
|
move 22 from 1 to 2
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 5 from 8 to 2
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 5 from 5 to 2
|
||||||
|
move 1 from 9 to 8
|
||||||
|
move 5 from 4 to 1
|
||||||
|
move 6 from 6 to 9
|
||||||
|
move 3 from 1 to 9
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 8 from 9 to 6
|
||||||
|
move 6 from 7 to 1
|
||||||
|
move 5 from 6 to 5
|
||||||
|
move 27 from 2 to 1
|
||||||
|
move 4 from 5 to 7
|
||||||
|
move 9 from 1 to 5
|
||||||
|
move 1 from 9 to 1
|
||||||
|
move 3 from 6 to 2
|
||||||
|
move 9 from 2 to 1
|
||||||
|
move 2 from 7 to 2
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 10 from 5 to 9
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 25 from 1 to 8
|
||||||
|
move 6 from 7 to 4
|
||||||
|
move 11 from 1 to 7
|
||||||
|
move 3 from 8 to 1
|
||||||
|
move 3 from 2 to 6
|
||||||
|
move 3 from 8 to 9
|
||||||
|
move 11 from 8 to 6
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 12 from 6 to 4
|
||||||
|
move 13 from 4 to 5
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 3 from 7 to 5
|
||||||
|
move 5 from 8 to 7
|
||||||
|
move 1 from 7 to 1
|
||||||
|
move 5 from 1 to 6
|
||||||
|
move 3 from 6 to 4
|
||||||
|
move 3 from 8 to 6
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 12 from 5 to 9
|
||||||
|
move 5 from 6 to 2
|
||||||
|
move 2 from 5 to 9
|
||||||
|
move 6 from 4 to 9
|
||||||
|
move 11 from 7 to 3
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 1 from 5 to 7
|
||||||
|
move 1 from 7 to 1
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 2 from 4 to 7
|
||||||
|
move 2 from 6 to 8
|
||||||
|
move 5 from 3 to 6
|
||||||
|
move 2 from 7 to 2
|
||||||
|
move 2 from 2 to 9
|
||||||
|
move 1 from 2 to 9
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 35 from 9 to 7
|
||||||
|
move 2 from 8 to 7
|
||||||
|
move 3 from 3 to 8
|
||||||
|
move 5 from 2 to 4
|
||||||
|
move 3 from 3 to 7
|
||||||
|
move 2 from 4 to 7
|
||||||
|
move 4 from 6 to 5
|
||||||
|
move 4 from 5 to 9
|
||||||
|
move 3 from 4 to 5
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 4 from 9 to 8
|
||||||
|
move 1 from 9 to 6
|
||||||
|
move 38 from 7 to 2
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 4 from 7 to 3
|
||||||
|
move 3 from 6 to 1
|
||||||
|
move 22 from 2 to 7
|
||||||
|
move 1 from 5 to 8
|
||||||
|
move 7 from 8 to 4
|
||||||
|
move 8 from 2 to 8
|
||||||
|
move 3 from 5 to 1
|
||||||
|
move 4 from 3 to 9
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 2 from 2 to 3
|
||||||
|
move 5 from 8 to 9
|
||||||
|
move 3 from 9 to 1
|
||||||
|
move 2 from 1 to 7
|
||||||
|
move 6 from 2 to 3
|
||||||
|
move 6 from 3 to 1
|
||||||
|
move 2 from 3 to 6
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 14 from 7 to 2
|
||||||
|
move 4 from 1 to 6
|
||||||
|
move 8 from 1 to 3
|
||||||
|
move 4 from 3 to 6
|
||||||
|
move 3 from 9 to 5
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 8 to 4
|
||||||
|
move 9 from 7 to 1
|
||||||
|
move 8 from 2 to 4
|
||||||
|
move 4 from 2 to 9
|
||||||
|
move 2 from 2 to 1
|
||||||
|
move 3 from 5 to 8
|
||||||
|
move 1 from 8 to 6
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 3 from 9 to 5
|
||||||
|
move 2 from 9 to 5
|
||||||
|
move 4 from 3 to 9
|
||||||
|
move 3 from 6 to 3
|
||||||
|
move 3 from 6 to 9
|
||||||
|
move 9 from 4 to 1
|
||||||
|
move 1 from 9 to 8
|
||||||
|
move 3 from 3 to 6
|
||||||
|
move 2 from 7 to 4
|
||||||
|
move 4 from 8 to 5
|
||||||
|
move 7 from 5 to 6
|
||||||
|
move 19 from 1 to 9
|
||||||
|
move 5 from 9 to 3
|
||||||
|
move 2 from 1 to 6
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 4 from 3 to 2
|
||||||
|
move 21 from 9 to 7
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 1 from 9 to 1
|
||||||
|
move 1 from 1 to 8
|
||||||
|
move 16 from 7 to 6
|
||||||
|
move 24 from 6 to 5
|
||||||
|
move 7 from 4 to 5
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 2 from 2 to 8
|
||||||
|
move 31 from 5 to 8
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 2 from 6 to 9
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 3 from 7 to 9
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 2 from 3 to 5
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 24 from 8 to 6
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 30 from 6 to 1
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 1 from 6 to 9
|
||||||
|
move 6 from 9 to 7
|
||||||
|
move 1 from 6 to 4
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 23 from 1 to 3
|
||||||
|
move 21 from 3 to 4
|
||||||
|
move 4 from 2 to 6
|
||||||
|
move 3 from 6 to 1
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 4 from 1 to 9
|
||||||
|
move 3 from 9 to 6
|
||||||
|
move 8 from 1 to 6
|
||||||
|
move 4 from 8 to 5
|
||||||
|
move 2 from 7 to 5
|
||||||
|
move 7 from 4 to 3
|
||||||
|
move 3 from 4 to 9
|
||||||
|
move 9 from 3 to 9
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 6 from 5 to 8
|
||||||
|
move 14 from 6 to 2
|
||||||
|
move 4 from 8 to 4
|
||||||
|
move 7 from 4 to 5
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 6 from 4 to 3
|
||||||
|
move 13 from 2 to 6
|
||||||
|
move 5 from 3 to 7
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 1 from 8 to 2
|
||||||
|
move 4 from 8 to 3
|
||||||
|
move 6 from 6 to 4
|
||||||
|
move 2 from 2 to 8
|
||||||
|
move 5 from 4 to 7
|
||||||
|
move 3 from 7 to 5
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 2 from 3 to 9
|
||||||
|
move 3 from 7 to 3
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 3 from 4 to 1
|
||||||
|
move 6 from 6 to 1
|
||||||
|
move 2 from 7 to 5
|
||||||
|
move 1 from 3 to 5
|
||||||
|
move 11 from 9 to 4
|
||||||
|
move 9 from 4 to 5
|
||||||
|
move 3 from 3 to 4
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 2 from 8 to 1
|
||||||
|
move 9 from 1 to 8
|
||||||
|
move 22 from 5 to 8
|
||||||
|
move 2 from 1 to 3
|
||||||
|
move 3 from 4 to 6
|
||||||
|
move 14 from 8 to 9
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 19 from 9 to 3
|
||||||
|
move 3 from 9 to 4
|
||||||
|
move 2 from 7 to 2
|
||||||
|
move 1 from 4 to 6
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 8 from 3 to 1
|
||||||
|
move 2 from 9 to 6
|
||||||
|
move 1 from 2 to 5
|
||||||
|
move 3 from 4 to 9
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 20 from 8 to 3
|
||||||
|
move 4 from 9 to 5
|
||||||
|
move 1 from 4 to 2
|
||||||
|
move 26 from 3 to 5
|
||||||
|
move 1 from 8 to 3
|
||||||
|
move 8 from 1 to 4
|
||||||
|
move 1 from 3 to 7
|
||||||
|
move 1 from 2 to 1
|
||||||
|
move 1 from 1 to 6
|
||||||
|
move 1 from 6 to 7
|
||||||
|
move 4 from 5 to 3
|
||||||
|
move 3 from 4 to 2
|
||||||
|
move 5 from 5 to 3
|
||||||
|
move 2 from 2 to 6
|
||||||
|
move 3 from 3 to 5
|
||||||
|
move 2 from 4 to 8
|
||||||
|
move 5 from 3 to 9
|
||||||
|
move 5 from 9 to 8
|
||||||
|
move 19 from 5 to 9
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 2 from 7 to 1
|
||||||
|
move 1 from 1 to 7
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 13 from 9 to 3
|
||||||
|
move 8 from 6 to 2
|
||||||
|
move 10 from 3 to 5
|
||||||
|
move 14 from 5 to 4
|
||||||
|
move 7 from 8 to 4
|
||||||
|
move 1 from 6 to 2
|
||||||
|
move 6 from 3 to 8
|
||||||
|
move 4 from 9 to 7
|
||||||
|
move 2 from 9 to 8
|
||||||
|
move 1 from 7 to 1
|
||||||
|
move 3 from 2 to 7
|
||||||
|
move 1 from 5 to 3
|
||||||
|
move 7 from 8 to 6
|
||||||
|
move 5 from 6 to 2
|
||||||
|
move 8 from 4 to 5
|
||||||
|
move 3 from 5 to 8
|
||||||
|
move 3 from 8 to 6
|
||||||
|
move 5 from 7 to 9
|
||||||
|
move 5 from 3 to 6
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 17 from 4 to 7
|
||||||
|
move 1 from 8 to 1
|
||||||
|
move 12 from 7 to 8
|
||||||
|
move 3 from 1 to 4
|
||||||
|
move 2 from 4 to 6
|
||||||
|
move 8 from 6 to 1
|
||||||
|
move 4 from 6 to 3
|
||||||
|
move 1 from 7 to 8
|
||||||
|
move 5 from 5 to 8
|
||||||
|
move 4 from 7 to 1
|
||||||
|
move 3 from 2 to 6
|
||||||
|
move 2 from 5 to 1
|
||||||
|
move 6 from 1 to 6
|
||||||
|
move 4 from 3 to 5
|
||||||
|
move 4 from 5 to 3
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 3 from 3 to 2
|
||||||
|
move 17 from 8 to 4
|
||||||
|
move 6 from 6 to 3
|
||||||
|
move 14 from 4 to 9
|
||||||
|
move 1 from 3 to 8
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 3 from 8 to 3
|
||||||
|
move 5 from 2 to 5
|
||||||
|
move 6 from 1 to 7
|
||||||
|
move 2 from 6 to 4
|
||||||
|
move 4 from 5 to 7
|
||||||
|
move 1 from 1 to 5
|
||||||
|
move 1 from 6 to 3
|
||||||
|
move 10 from 7 to 4
|
||||||
|
move 1 from 5 to 4
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 15 from 4 to 5
|
||||||
|
move 3 from 3 to 1
|
||||||
|
move 6 from 2 to 6
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 2 from 4 to 7
|
||||||
|
move 2 from 7 to 8
|
||||||
|
move 1 from 4 to 2
|
||||||
|
move 2 from 1 to 7
|
||||||
|
move 1 from 7 to 2
|
||||||
|
move 12 from 9 to 1
|
||||||
|
move 4 from 9 to 5
|
||||||
|
move 4 from 6 to 2
|
||||||
|
move 1 from 7 to 3
|
||||||
|
move 6 from 2 to 4
|
||||||
|
move 1 from 8 to 5
|
||||||
|
move 2 from 4 to 2
|
||||||
|
move 11 from 1 to 7
|
||||||
|
move 3 from 1 to 4
|
||||||
|
move 17 from 5 to 6
|
||||||
|
move 15 from 6 to 4
|
||||||
|
move 1 from 8 to 9
|
||||||
|
move 10 from 4 to 1
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 2 from 6 to 5
|
||||||
|
move 1 from 2 to 6
|
||||||
|
move 4 from 5 to 6
|
||||||
|
move 4 from 1 to 2
|
||||||
|
move 6 from 6 to 7
|
||||||
|
move 2 from 2 to 6
|
||||||
|
move 9 from 4 to 9
|
||||||
|
move 6 from 1 to 2
|
||||||
|
move 3 from 4 to 1
|
||||||
|
move 10 from 9 to 8
|
||||||
|
move 4 from 2 to 1
|
||||||
|
move 1 from 1 to 2
|
||||||
|
move 5 from 8 to 6
|
||||||
|
move 1 from 2 to 7
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 2 from 6 to 9
|
||||||
|
move 13 from 7 to 2
|
||||||
|
move 5 from 7 to 5
|
||||||
|
move 2 from 5 to 2
|
||||||
|
move 1 from 4 to 5
|
||||||
|
move 4 from 8 to 4
|
||||||
|
move 17 from 2 to 6
|
||||||
|
move 3 from 4 to 6
|
||||||
|
move 2 from 9 to 1
|
||||||
|
move 7 from 6 to 8
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 1 from 4 to 1
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 1 from 3 to 9
|
||||||
|
move 4 from 3 to 7
|
||||||
|
move 2 from 8 to 5
|
||||||
|
move 3 from 7 to 5
|
||||||
|
move 10 from 5 to 8
|
||||||
|
move 2 from 2 to 4
|
||||||
|
move 6 from 1 to 2
|
||||||
|
move 4 from 6 to 3
|
||||||
|
move 8 from 2 to 6
|
||||||
|
move 1 from 7 to 4
|
||||||
|
move 5 from 4 to 5
|
||||||
|
move 7 from 6 to 7
|
||||||
|
move 5 from 3 to 5
|
||||||
|
move 5 from 5 to 2
|
||||||
|
move 4 from 8 to 1
|
||||||
|
move 6 from 1 to 6
|
||||||
|
move 3 from 3 to 2
|
||||||
|
move 22 from 6 to 2
|
||||||
|
move 1 from 9 to 7
|
||||||
|
move 8 from 8 to 6
|
||||||
|
move 1 from 7 to 6
|
||||||
|
move 2 from 5 to 7
|
||||||
|
move 4 from 8 to 5
|
||||||
|
move 7 from 6 to 7
|
||||||
|
move 2 from 6 to 4
|
||||||
|
move 14 from 2 to 1
|
||||||
|
move 7 from 1 to 3
|
||||||
|
move 12 from 7 to 3
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 2 from 5 to 8
|
||||||
|
move 2 from 8 to 1
|
||||||
|
move 1 from 4 to 3
|
||||||
|
move 6 from 2 to 9
|
||||||
|
move 6 from 9 to 2
|
||||||
|
move 2 from 2 to 7
|
||||||
|
move 6 from 7 to 5
|
||||||
|
move 13 from 3 to 5
|
||||||
|
move 5 from 2 to 6
|
||||||
|
move 5 from 6 to 1
|
||||||
|
move 2 from 3 to 6
|
||||||
|
move 1 from 6 to 5
|
||||||
|
move 1 from 6 to 1
|
||||||
|
move 3 from 1 to 9
|
||||||
|
move 6 from 2 to 7
|
||||||
|
move 1 from 2 to 3
|
||||||
|
move 24 from 5 to 2
|
||||||
|
move 7 from 3 to 7
|
||||||
|
move 13 from 7 to 9
|
||||||
|
move 4 from 1 to 9
|
||||||
|
move 4 from 1 to 6
|
||||||
|
move 1 from 5 to 6
|
||||||
|
move 16 from 9 to 5
|
||||||
|
move 1 from 6 to 4
|
||||||
|
move 1 from 5 to 2
|
||||||
|
move 5 from 1 to 3
|
||||||
|
move 11 from 2 to 1
|
||||||
|
move 4 from 9 to 6
|
||||||
|
move 1 from 4 to 7
|
||||||
|
move 2 from 3 to 4
|
||||||
|
move 6 from 6 to 9
|
||||||
|
move 1 from 1 to 3
|
||||||
|
move 2 from 9 to 4
|
||||||
|
move 1 from 7 to 9
|
||||||
|
move 4 from 2 to 9
|
||||||
|
move 8 from 9 to 2
|
||||||
|
move 3 from 3 to 2
|
||||||
|
move 1 from 9 to 4
|
||||||
|
move 5 from 1 to 7
|
||||||
|
move 1 from 4 to 8
|
||||||
|
move 2 from 1 to 9
|
||||||
|
move 1 from 8 to 7
|
||||||
|
move 6 from 5 to 3
|
||||||
|
move 1 from 5 to 1
|
||||||
|
move 5 from 2 to 3
|
||||||
|
move 4 from 1 to 5
|
||||||
|
move 4 from 7 to 1
|
||||||
|
move 8 from 5 to 8
|
1
2022/input/day06.txt
Executable file
1
2022/input/day06.txt
Executable file
@ -0,0 +1 @@
|
|||||||
|
rnttlvtttmnmpmhpmmzvmmhpmmnrntnnsnrnndvnddmbbtptssjcczmmbwmbmwwmmflfggwzzhjjgppwrwdwqwbbbmwbwgggqccmlmdmgdgqgpqgpgzzndddgdbbsvvfsfppwjwzjjcnjccwrwrprgppbpddnccjggfrggqngqgdqgddvsshqhmqqfvqvlvwvnwwmccrpcczvcczzgsgwwlggqsggmdgglblpblltbbzrbzzcscgccwssbddsmddzzvvhjjwjwrjwrwfftmttplldnllqttdhddmvdmmhsmsmqsqwqpqbpqppqdppbnpnhhppjbbrzrbrggdbddnrdrzrdrpdppzzfzrzgzllwlwzlllwtltslttlmtmqqbbzmzhmmjjwrjrrnzrzhzmmtbbrppmmfddjhdjdsdllrbbpfphpzpwwjvwwdpwpzwwzrrfnfwwfbbpttzjtjptpvvsfvvljjrzzmdmsddpvpgvvdcdwcwhwghwggrjjhdjhddzhhwbhwbwwbrwwrfrmfrfvrfftzzqrzqrqtrqtrqtrqttgctclcwlwwvqqnlnqlnnndmnmggznzhzqzggzrzbbrwbrwrvvscvvmvhmvvbsbjsjfjpfpqpbbbbjtjptpprnndpnnrsswffmnnjhhpqhqwhhbwhbhgbbfrbrjjpmjmzzdzjdjffcvvtwttrrcscvcncqcfcwwpgpfptpcpspllcfcssgbglgdllcdcmcpcqclctcvtvvbhbbdhhczhzshzhbhchzchchlcllwswqqmpmbbqwwzgzhggczgzffsgggjjlcjjpnjjfqjfjvfvrfrlrvvpfpcfcbffnmfmbmbgggplldblddvcvjcvvmbmmmrvrvvnhhqttgdgvdgdqgddcsclljplpbbsvbsbfsffshsgslsllzztggttfccctwtswwrvwvnnfbnnvjnvvlgvvfppmvpmmvpmmcttjffgsffcllncntcncfclcgcppvdvpvrvbrrnnvrvhrvrzvrvnrvrdrnrqrnngsshqhcqqbfqqzmmmzjzqztznttjffqzfqfbqqsggclgclcddtqqdppbjppqvpqvvmqmqnqcnqcqcqvqjqzqbzzbrrgfgddgtgnnpjjbzjjbbtstzszwswggfffmnnpllfvvnwnpwpqwqwlllqlmmzcmcrcmrcmrcrffnrnssjjrdjjwwqgwqgqdggwzwjzzbfbpptctchthbbbqsqggrllldwdffvwwlrwwljwjnncmmjmvjmmqnnmrrgjgvvpqqbppqlpqllqnqdndwwlppcjcdjjcnnmddffgjjrwjrwjjhvhqvhhfssrtsrsgrrwjwhhbqqpzzrdrhrqhrqrprqqmllsszhzllcdllpmpbbmsmjjmwmssvlslwwmtwmmgvgcvggzcgzgddsjsjfsssftfcchhfmfcmcpcpvcppqggjddljjbttwrrhghqggpghgngzngznnzqnnssqlqmqbmmmqdqqhttnqqjhhphrhccbggmjjpwpbwpprdrvvjzvvtctzzmpphwpwdpdvvhbvvdvsdsjdjbdjdljjstswttnhhbfffmnngddlglqggvzvlzvzqqvbqbvbjbnjjsvjjwpjjzshrdtrjttvqnbltrfpvnztrwzrtgjpzgqdjfglqgjrgdzbhqpghdbfhlfjhbfjfjppfgljmgwljlsbmltgztthnzvdrgqlgddvqhzctdgcphfqvnpjjgzwqfvnhvzdrwtpgfdjpqnfshslqmplcprdntnhqqbqptwzvdddhcjcqrfhjqnjvpnhttblwgjwlfwntdchgfjmdbgtqtdgnzbqwzzcltwtmtqtdbvjtfvlzpcvgmrfqwfhwqmhvwhftzgmhshffnjwqbvztszsrrglqvhfpqmbnqjsfnwdwgdtmztbvqrmztfctmvptbwnfzfgdztjgnqsrsqqqnrpgzsqszzwwwgqnnnrdzhzdbqjgbvncprzcjqchzfgnclbrmphbsdwwpvwjwlbshhgjfbhjjtdqrmrcjfnrrhqrpsbglthzpvfglqspttdpwlljhnlrjpzchbrqcgtmcscjnwvpztfjdcwbnbgmbpgdthgnhbrtwftnscbsrndghbslflpcpjwbcjnhzcwdcslmzqbtrlnzmntlpjcsctnsqwtbffqlhfgcsflvfwnmczvsbflnnnzpfjfrcwhhcbtbjcbghtcwcgdbrwrgfgvpwtcwlwcmnmrtcrjbwtwlrfstztsghfvrfjzzpswpqfqpvqstvbhqfjlgmtdlhqrhwzqpnqpllnlgzwptbgftmblqcwfcllbwfzdhrndfrvdvwzqvhnghlzvhldnnvrgqvlpfdnpmcgddjmstzsqfvzwftflrwtzqwjbbqhjpfbdztdfsgsztvvrvslgspgpdcmwszdfsddqhpzpsjgqmgzqvhchlgrmcmzwzbtwfphvgcdmhfdczhffgmqpncdjszzgwfvwsqddvbcgngbjwhmphjsmjthvbthhfwdtqmjctcmdpqpsdrnrzdgzgzctbhwsgvtjgwjbsnnjmpmqgwrnqfqbpnrpddjsrsvmcshhthwfrwmqsrjhlsrgfzvwmdzhwrvchppqldghgzflrnwqnvntmtdwmrpgbdbzvcmnqstzntvllcgzsnvrhqzsfncznhgrggmvrmgsqmhbdsjbsqqhzppfcwdrgdvfjdscrvpwtsdmcnczwbbjhvddprwtzfwslcfdcrqfszcgmhtdfvlqzqtvwngzvmmqcrqpzwzhggjnphsrmnctnfhtppglspnvzrsqfgzdfrrwbzbqwvbvbnzgmdrqrnsvdpvlgcmnggsbmbtfwrvdjrtgtgcqscnfpgswgsngdqnnscffdcnlrcpdpcbpzvqcrtjhlwvgnfhhqmprthrtcvcjjwgprqqdwfbgmzlwttjpvcjzfwbdhvngsjpgtqsvbldbcvhjhzbjzblqtqhlnbzzqfcpnzdhbplztcgvzhbgshqbccgwzhftqvtwzbwmnfrsgphhhgtsmwlqhlcchtbtggqwmbdthhmqqjtfdvfpddfdrtfjbpmwtcbfnrhwcnpdqrdtsfdmjfzdwwgnftnwpssgqtlpdbwhnzcnfmppclsswbhcdghpnslwjznqszgdtrnpncsqsnbrplrfwpbnfnvttlzcjtvhzcpzmhfsfzfjlzqqnprpdvwbfthmrswqrcqqwrnwzmgjqqsnqdblssmhngjjvprmqbswtgzzvprwhrgjqshvmwzgrgfmzlgrtzbmdlzncwqdftfsndvdfmmplswdbjtbcbvcvtpjvrqpghczpqvvpqwfbfhllbpvrrfsmsjhqbldcrwvzvcvzfffqvplbfbdbwctbjsljlfwtbcnpsbtpmcqgdvltmztvrcfsprbnvwplwhncgsdnrdmqnmcvpvvrlmlwtgvrnwvzsfctdlcfvtgqmpnbwcbwvfpmqnbjvwffpjtvvgflhrnlngrzhhttdtdbvscftsqtvbrgzfgsjvwhzjcbsqcttlgwmhhvjhwhgmmdtflfdbvnhgcblqmwjfsqnngjqfbvdnsfbgwjfhpgdgvhpbvlrtpcpvhrbtqpbffzcqrvbqwvqmmrcwtnvcgwvsqzvrwdbcnjshbnbftmmvrmjvgfdwbsjvqfdwnnvqqhbmshcrclrwhfhbtnwqvmrrvdwgcwcsrhdbqndsthmrmbjhttjtzmlflbrmhlcgsbdjcjcvwcjffnqrntpflrgfcngpchtrzpnflwjvcgbwtsnjfqsggwmwhdvbzdpjmtwlmrslnjsndjtgjmmwmdgtnfrztppzqvqhbfzqpsdhvsshddlzwcmsndrpqhndsrjnngnmgmzrvchwlqgdnbssbhpbpgwpsrcnbphpslvqplhpgdhmrnwwjmhvnsfjmrfwtvjjrmgptvjffhbgpmfgmgrcjrwqhccssrqjpljbpwcvsfdtmbhzsmsjsgblgpcqszsttfclrjcnsslmngmbmwqfhddbvmbvwmrmvglsl
|
5
2022/readme.md
Normal file
5
2022/readme.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
## Advent of Code 2022
|
||||||
|
|
||||||
|
These problems were actually solved in early 2024 as part of a Rust study group.
|
||||||
|
|
||||||
|
For the most part, each day's solution was left "as-is" and feedback from the study group was not incorporated until subsequent days, in an attempt to document my attempt to learn the language.
|
42
2022/src/day01.rs
Normal file
42
2022/src/day01.rs
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
use std::fs::File;
|
||||||
|
use sorted_vec::SortedVec;
|
||||||
|
|
||||||
|
fn read_lines(filename: &str) -> io::Result<io::Lines<io::BufReader<File>>> {
|
||||||
|
let file = File::open(filename)?;
|
||||||
|
Ok(io::BufReader::new(file).lines())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn update_max(max: &mut SortedVec<i32>, current: i32) {
|
||||||
|
if max.is_empty() {
|
||||||
|
max.insert(current);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if current <= max[0] { return }
|
||||||
|
|
||||||
|
max.insert(current);
|
||||||
|
if max.len() > 3 { max.remove_index(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn execute() -> Result<(), io::Error> {
|
||||||
|
let mut max: SortedVec<i32> = SortedVec::new();
|
||||||
|
let mut current = 0;
|
||||||
|
|
||||||
|
for line in read_lines("input/day01.txt")? {
|
||||||
|
let text = line?;
|
||||||
|
current = match text.parse::<i32>() {
|
||||||
|
Ok(value) => current + value,
|
||||||
|
Err(_) => {
|
||||||
|
update_max(&mut max, current);
|
||||||
|
0
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(x) = max.iter().last() {
|
||||||
|
println!("Step 1 solution: {x}");
|
||||||
|
}
|
||||||
|
println!("Step 2 solution: {}", max.iter().fold(0i32, |sum, i| sum + (*i as i32)));
|
||||||
|
Ok(())
|
||||||
|
}
|
58
2022/src/day02.rs
Normal file
58
2022/src/day02.rs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
use std::fs::File;
|
||||||
|
|
||||||
|
fn read_lines(filename: &str) -> io::Result<io::Lines<io::BufReader<File>>> {
|
||||||
|
let file = File::open(filename)?;
|
||||||
|
Ok(io::BufReader::new(file).lines())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn print_step(step: i8, value: u64) {
|
||||||
|
println!("Step {} solution: {}", step, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn execute() -> Result<(), io::Error> {
|
||||||
|
let mut score1: u64 = 0;
|
||||||
|
let mut score2: u64 = 0;
|
||||||
|
|
||||||
|
for line in read_lines("input/day02.txt")? {
|
||||||
|
let text = line?;
|
||||||
|
let opp = parse_move(text.chars().nth(0).unwrap());
|
||||||
|
|
||||||
|
score1 += step1(opp, text.chars().nth(2).unwrap());
|
||||||
|
score2 += step2(opp, text.chars().nth(2).unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
print_step(1, score1);
|
||||||
|
print_step(2, score2);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn step1(opp: i8, text: char) -> u64 {
|
||||||
|
let me = parse_move(text);
|
||||||
|
return match me - opp {
|
||||||
|
1 | -2 => me + 6,
|
||||||
|
0 => me + 3,
|
||||||
|
-1 | 2 => me,
|
||||||
|
_ => panic!("Received impossible result in a match."),
|
||||||
|
} as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn step2(opp: i8, text: char) -> u64 {
|
||||||
|
return match text {
|
||||||
|
'X' => ((opp + 4) % 3) + 1,
|
||||||
|
'Y' => opp + 3,
|
||||||
|
'Z' => (opp % 3) + 7,
|
||||||
|
_ => panic!("Received impossible strategy code."),
|
||||||
|
} as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parses the second command in the input incorrectly.
|
||||||
|
fn parse_move(x: char) -> i8 {
|
||||||
|
return match x {
|
||||||
|
'A' | 'X' => 1,
|
||||||
|
'B' | 'Y' => 2,
|
||||||
|
'C' | 'Z' => 3,
|
||||||
|
_ => 0,
|
||||||
|
};
|
||||||
|
}
|
53
2022/src/day03.rs
Normal file
53
2022/src/day03.rs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::vec::Vec;
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
pub fn execute() -> Result<(), io::Error> {
|
||||||
|
let mut score = 0;
|
||||||
|
let mut sacks: Vec<HashSet<u8>> = Vec::new();
|
||||||
|
|
||||||
|
for line in utils::read_lines("input/day03.txt")? {
|
||||||
|
let text = line?;
|
||||||
|
let (text1, text2) = text.split_at(text.len() / 2);
|
||||||
|
let mut pouch1 = HashSet::new();
|
||||||
|
let mut pouch2 = HashSet::new();
|
||||||
|
for i in 0..text1.len() {
|
||||||
|
pouch1.insert(text1.as_bytes()[i]);
|
||||||
|
pouch2.insert(text2.as_bytes()[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
let intersect: HashSet<_> = pouch1.intersection(&pouch2).cloned().collect();
|
||||||
|
score += get_score(&intersect);
|
||||||
|
|
||||||
|
sacks.push(pouch1.union(&pouch2).cloned().collect());
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut score2 = 0;
|
||||||
|
for group in sacks.chunks(3) {
|
||||||
|
let mut intersect: HashSet<u8> = group[0].intersection(&group[1]).cloned().collect();
|
||||||
|
intersect = intersect.intersection(&group[2]).cloned().collect();
|
||||||
|
score2 += get_score(&intersect);
|
||||||
|
}
|
||||||
|
|
||||||
|
utils::print_step(1, &score);
|
||||||
|
utils::print_step(2, &score2);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_score(intersect: &HashSet<u8>) -> u64 {
|
||||||
|
if intersect.len() > 1 {
|
||||||
|
panic!("More than one overlapping item.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(item) = intersect.iter().next() {
|
||||||
|
if *item > 0x60 {
|
||||||
|
return (*item - 0x60) as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((*item - 0x40) + 26) as u64;
|
||||||
|
}
|
||||||
|
|
||||||
|
panic!("No items in intersection.");
|
||||||
|
}
|
52
2022/src/day04.rs
Normal file
52
2022/src/day04.rs
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::vec::Vec;
|
||||||
|
|
||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
struct Assignment {
|
||||||
|
min: u32,
|
||||||
|
max: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn execute() -> Result<(), io::Error> {
|
||||||
|
let mut subsets = 0;
|
||||||
|
let mut overlaps = 0;
|
||||||
|
|
||||||
|
for line in utils::read_lines("input/day04.txt")? {
|
||||||
|
let text = line?;
|
||||||
|
let inputs: Vec<_> = text.split(',').collect();
|
||||||
|
let ass1 = parse_assignment(inputs[0]);
|
||||||
|
let ass2 = parse_assignment(inputs[1]);
|
||||||
|
|
||||||
|
if (ass2.max >= ass1.max && ass2.min <= ass1.min) ||
|
||||||
|
(ass1.max >= ass2.max && ass1.min <= ass2.min) {
|
||||||
|
subsets += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ass2.max >= ass1.min && ass2.min <= ass1.max) ||
|
||||||
|
(ass1.max >= ass2.min && ass1.min <= ass2.max) {
|
||||||
|
overlaps += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
utils::print_step(1, &subsets);
|
||||||
|
utils::print_step(2, &overlaps);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_assignment(input: &str) -> Assignment {
|
||||||
|
let values: Vec<_> = input.split('-').collect();
|
||||||
|
|
||||||
|
let Ok(min) = values[0].parse::<u32>() else {
|
||||||
|
panic!("Min value {} is non-numeric.", values[0])
|
||||||
|
};
|
||||||
|
|
||||||
|
let Ok(max) = values[1].parse::<u32>() else {
|
||||||
|
panic!("Max value {} is non-numeric.", values[1])
|
||||||
|
};
|
||||||
|
|
||||||
|
Assignment {
|
||||||
|
min: min,
|
||||||
|
max: max,
|
||||||
|
}
|
||||||
|
}
|
63
2022/src/day05.rs
Normal file
63
2022/src/day05.rs
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::vec::Vec;
|
||||||
|
|
||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
pub fn execute() -> Result<(), io::Error> {
|
||||||
|
let mut stacks1: [Vec<char>; 9] = Default::default();
|
||||||
|
let mut stacks2: [Vec<char>; 9] = Default::default();
|
||||||
|
|
||||||
|
for line in utils::read_lines("input/day05.txt")? {
|
||||||
|
let text = line?;
|
||||||
|
|
||||||
|
match text {
|
||||||
|
x if x.contains("[") => {
|
||||||
|
initialize_stacks(&mut stacks1, &x);
|
||||||
|
initialize_stacks(&mut stacks2, &x);
|
||||||
|
},
|
||||||
|
x if x.contains("move") => {
|
||||||
|
move_stacks(&mut stacks1, &x, 1);
|
||||||
|
move_stacks(&mut stacks2, &x, 2);
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
utils::print_step(1, &stacks1.iter().map(|x| x.last().unwrap()).collect::<String>());
|
||||||
|
utils::print_step(1, &stacks2.iter().map(|x| x.last().unwrap()).collect::<String>());
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn initialize_stacks(stacks: &mut [Vec<char>], text: &str) {
|
||||||
|
let mut iter = text.chars();
|
||||||
|
iter.next(); // discard the first value
|
||||||
|
for (i, stack) in iter.step_by(4).zip(stacks) {
|
||||||
|
if i.is_alphabetic() { stack.insert(0, i); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn move_stacks(stacks: &mut [Vec<char>], text: &str, step: u8) {
|
||||||
|
let fields = text.split(' ').collect::<Vec<_>>();
|
||||||
|
let count = fields[1].parse::<usize>().unwrap();
|
||||||
|
let start = fields[3].parse::<usize>().unwrap();
|
||||||
|
let end = fields[5].parse::<usize>().unwrap();
|
||||||
|
let mut crane = vec![];
|
||||||
|
|
||||||
|
for _ in 0..count {
|
||||||
|
let item = stacks[start-1].pop().unwrap();
|
||||||
|
match step {
|
||||||
|
1 => stacks[end-1].push(item),
|
||||||
|
2 => crane.push(item),
|
||||||
|
_ => panic!("Bad step provided to function."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we're doing step 1, we're done
|
||||||
|
if crane.is_empty() { return; }
|
||||||
|
|
||||||
|
// step 2 logic
|
||||||
|
while let Some(item) = crane.pop() {
|
||||||
|
stacks[end-1].push(item);
|
||||||
|
}
|
||||||
|
}
|
30
2022/src/day06.rs
Normal file
30
2022/src/day06.rs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::fs;
|
||||||
|
use std::collections::HashSet;
|
||||||
|
|
||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
pub fn execute() -> Result<(), io::Error> {
|
||||||
|
let data = fs::read_to_string("input/day06.txt")?;
|
||||||
|
|
||||||
|
let packet_marker = find_uniq_index(&data, 4);
|
||||||
|
let message_marker = find_uniq_index(&data, 14);
|
||||||
|
|
||||||
|
utils::print_step(1, &packet_marker);
|
||||||
|
utils::print_step(2, &message_marker);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the (1-indexed) position where the first sequence of unique characters of `length`
|
||||||
|
// ends in `data`
|
||||||
|
fn find_uniq_index(data: &str, length: usize) -> usize {
|
||||||
|
for (i, substr) in data.as_bytes().windows(length).enumerate() {
|
||||||
|
let mut uniq = HashSet::new();
|
||||||
|
if substr.iter().all(|x| uniq.insert(x)) {
|
||||||
|
return i+length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
panic!("No unique string of length '{length}' found.")
|
||||||
|
}
|
74
2022/src/main.rs
Normal file
74
2022/src/main.rs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
use std::env;
|
||||||
|
use std::io;
|
||||||
|
mod utils;
|
||||||
|
|
||||||
|
const LATEST: u8 = 6;
|
||||||
|
|
||||||
|
mod day01;
|
||||||
|
mod day02;
|
||||||
|
mod day03;
|
||||||
|
mod day04;
|
||||||
|
mod day05;
|
||||||
|
mod day06;
|
||||||
|
// mod day07;
|
||||||
|
// mod day08;
|
||||||
|
// mod day09;
|
||||||
|
// mod day10;
|
||||||
|
// mod day11;
|
||||||
|
// mod day12;
|
||||||
|
// mod day13;
|
||||||
|
// mod day14;
|
||||||
|
// mod day15;
|
||||||
|
// mod day16;
|
||||||
|
// mod day17;
|
||||||
|
// mod day18;
|
||||||
|
// mod day19;
|
||||||
|
// mod day20;
|
||||||
|
// mod day21;
|
||||||
|
// mod day22;
|
||||||
|
// mod day23;
|
||||||
|
// mod day24;
|
||||||
|
// mod day25;
|
||||||
|
|
||||||
|
fn main() -> io::Result<()> {
|
||||||
|
let day = determine_day(LATEST);
|
||||||
|
match day {
|
||||||
|
1 => day01::execute(),
|
||||||
|
2 => day02::execute(),
|
||||||
|
3 => day03::execute(),
|
||||||
|
4 => day04::execute(),
|
||||||
|
5 => day05::execute(),
|
||||||
|
6 => day06::execute(),
|
||||||
|
// 7 => day07::execute(),
|
||||||
|
// 8 => day08::execute(),
|
||||||
|
// 9 => day09::execute(),
|
||||||
|
// 10 => day10::execute(),
|
||||||
|
// 11 => day11::execute(),
|
||||||
|
// 12 => day12::execute(),
|
||||||
|
// 13 => day13::execute(),
|
||||||
|
// 14 => day14::execute(),
|
||||||
|
// 15 => day15::execute(),
|
||||||
|
// 16 => day16::execute(),
|
||||||
|
// 17 => day17::execute(),
|
||||||
|
// 18 => day18::execute(),
|
||||||
|
// 19 => day19::execute(),
|
||||||
|
// 20 => day20::execute(),
|
||||||
|
// 21 => day21::execute(),
|
||||||
|
// 22 => day22::execute(),
|
||||||
|
// 23 => day23::execute(),
|
||||||
|
// 24 => day24::execute(),
|
||||||
|
// 25 => day25::execute(),
|
||||||
|
_ => panic!("Couldn't execute day {day}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn determine_day(latest: u8) -> u8 {
|
||||||
|
let mut day = latest;
|
||||||
|
for arg in env::args() {
|
||||||
|
if let Ok(x) = arg.parse::<u8>() {
|
||||||
|
day = x;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return day;
|
||||||
|
}
|
11
2022/src/template.rs
Normal file
11
2022/src/template.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
use std::io;
|
||||||
|
|
||||||
|
use crate::utils;
|
||||||
|
|
||||||
|
pub fn execute() -> Result<(), io::Error> {
|
||||||
|
for line in utils::read_lines("input/dayXX.txt")? {
|
||||||
|
let text = line?;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
14
2022/src/utils.rs
Normal file
14
2022/src/utils.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
|
// Returns the contents of a file as an iterator over strings.
|
||||||
|
pub fn read_lines(filename: &str) -> io::Result<impl Iterator<Item = io::Result<String>>> {
|
||||||
|
let file = File::open(filename)?;
|
||||||
|
Ok(io::BufReader::new(file).lines())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn print_step<T: Display>(step: i8, value: &T) {
|
||||||
|
println!("Step {step} solution: {value}");
|
||||||
|
}
|
Reference in New Issue
Block a user