Compare commits
30 Commits
1ff50f072e
...
main
Author | SHA1 | Date | |
---|---|---|---|
fe8e901212
|
|||
4a62be948b
|
|||
ac6082f993
|
|||
632868f7f3
|
|||
7326d17948
|
|||
a786262683
|
|||
e70e71b068
|
|||
c7e8bf103e
|
|||
2239760ce2
|
|||
07ac0b2fc5
|
|||
f6fa8e6b6a
|
|||
5780588903
|
|||
40053ef992
|
|||
dac98f99b5
|
|||
ae1b714614
|
|||
365e67056b
|
|||
aeb51d7c68
|
|||
c4db5fad8d
|
|||
7f201a614b
|
|||
5052110cb1
|
|||
6ffaa01033
|
|||
1104d568d0
|
|||
ab1d21241b
|
|||
ec5a7feb3f
|
|||
984ae73600
|
|||
d751bc64f8
|
|||
b2afe310b4
|
|||
cba675a2b2
|
|||
93f1c73fbf
|
|||
3dd2188f11
|
@ -18,7 +18,15 @@ let package = Package(
|
|||||||
.executable(name: "06", targets: ["06"]),
|
.executable(name: "06", targets: ["06"]),
|
||||||
.executable(name: "07", targets: ["07"]),
|
.executable(name: "07", targets: ["07"]),
|
||||||
.executable(name: "08", targets: ["08"]),
|
.executable(name: "08", targets: ["08"]),
|
||||||
.executable(name: "09", targets: ["09"])
|
.executable(name: "09", targets: ["09"]),
|
||||||
|
.executable(name: "10", targets: ["10"]),
|
||||||
|
.executable(name: "11", targets: ["11"]),
|
||||||
|
.executable(name: "12", targets: ["12"]),
|
||||||
|
.executable(name: "13", targets: ["13"]),
|
||||||
|
.executable(name: "14", targets: ["14"]),
|
||||||
|
.executable(name: "15", targets: ["15"]),
|
||||||
|
.executable(name: "16", targets: ["16"]),
|
||||||
|
.executable(name: "17", targets: ["17"])
|
||||||
],
|
],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
// Dependencies declare other packages that this package depends on.
|
// Dependencies declare other packages that this package depends on.
|
||||||
@ -80,6 +88,46 @@ let package = Package(
|
|||||||
.executableTarget(
|
.executableTarget(
|
||||||
name: "09",
|
name: "09",
|
||||||
dependencies: [.targetItem(name: "Runner", condition: nil)]
|
dependencies: [.targetItem(name: "Runner", condition: nil)]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "10",
|
||||||
|
dependencies: [
|
||||||
|
.targetItem(name: "Runner", condition: nil),
|
||||||
|
.product(name: "Collections", package: "swift-collections"),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "11",
|
||||||
|
dependencies: [ .targetItem(name: "Runner", condition: nil) ]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "12",
|
||||||
|
dependencies: [
|
||||||
|
.targetItem(name: "Runner", condition: nil),
|
||||||
|
.product(name: "Collections", package: "swift-collections")
|
||||||
|
]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "13",
|
||||||
|
dependencies: [ .targetItem(name: "Runner", condition: nil) ]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "14",
|
||||||
|
dependencies: [ .targetItem(name: "Runner", condition: nil) ]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "15",
|
||||||
|
dependencies: [ .targetItem(name: "Runner", condition: nil),
|
||||||
|
.product(name: "Collections", package: "swift-collections")]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "16",
|
||||||
|
dependencies: [ .targetItem(name: "Runner", condition: nil) ]
|
||||||
|
),
|
||||||
|
.executableTarget(
|
||||||
|
name: "17",
|
||||||
|
dependencies: [ .targetItem(name: "Runner", condition: nil),
|
||||||
|
.product(name: "Collections", package: "swift-collections")]
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@ -7,9 +7,8 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
import Runner
|
import Runner
|
||||||
import Collections
|
|
||||||
|
|
||||||
struct Coord {
|
struct Coord: Hashable {
|
||||||
let row: Int
|
let row: Int
|
||||||
let col: Int
|
let col: Int
|
||||||
|
|
||||||
@ -33,31 +32,34 @@ struct Coord {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct Field:Sequence, IteratorProtocol {
|
struct Field:Sequence, IteratorProtocol {
|
||||||
|
typealias Element = Coord
|
||||||
let numbers: [[Int]]
|
let numbers: [[Int]]
|
||||||
let numCols: Int
|
let numCols: Int
|
||||||
let numRows: Int
|
let numRows: Int
|
||||||
|
|
||||||
|
var neighbors = [Coord:[Coord]]()
|
||||||
|
|
||||||
var current: Coord? = Coord(row: 0, col: 0)
|
var current: Coord? = Coord(row: 0, col: 0)
|
||||||
|
|
||||||
init(numbers: [[Int]]) {
|
init(numbers: [[Int]]) {
|
||||||
self.numbers = numbers
|
self.numbers = numbers
|
||||||
numCols = numbers.first!.count
|
numCols = numbers.first?.count ?? 0
|
||||||
numRows = numbers.count
|
numRows = numbers.count
|
||||||
}
|
}
|
||||||
|
|
||||||
func getNeighborsCoordsFor(coord: Coord) -> [Coord] {
|
mutating func getNeighborsCoordsFor(coord: Coord) -> [Coord] {
|
||||||
return [coord.getAbove(), coord.getRight(), coord.getBelow(), coord.getLeft()]
|
let n = neighbors[coord] ?? [coord.getAbove(), coord.getRight(), coord.getBelow(), coord.getLeft()]
|
||||||
.compactMap { $0 }
|
.compactMap { $0 }
|
||||||
.filter { $0.row < numRows && $0.col < numCols }
|
.filter { $0.row < numRows && $0.col < numCols }
|
||||||
|
neighbors[coord] = n
|
||||||
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func lowPointValueAt(coord: Coord) -> Int? {
|
mutating func isLowPointAt(coord: Coord) -> Bool {
|
||||||
let value = numbers[coord.row][coord.col]
|
let value = self[coord]
|
||||||
return getNeighborsCoordsFor(coord: coord)
|
return getNeighborsCoordsFor(coord: coord)
|
||||||
.map { numbers[$0.row][$0.col] }
|
.map { numbers[$0.row][$0.col] }
|
||||||
.allSatisfy { $0 > value }
|
.allSatisfy { $0 > value }
|
||||||
? value
|
|
||||||
: nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func getNextCoord() -> Coord? {
|
private func getNextCoord() -> Coord? {
|
||||||
@ -79,19 +81,59 @@ struct Field:Sequence, IteratorProtocol {
|
|||||||
}
|
}
|
||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subscript(index: Coord) -> Int {
|
||||||
|
get {
|
||||||
|
numbers[index.row][index.col]
|
||||||
|
}/*
|
||||||
|
set(newValue) {
|
||||||
|
// Perform a suitable setting action here.
|
||||||
|
}*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Day09: Runnable {
|
class Day09: Runnable {
|
||||||
let inputPath: String
|
let inputPath: String
|
||||||
|
var lowestNeighbors = [Coord: Coord]()
|
||||||
|
var lowPoints = Set<Coord>()
|
||||||
|
var field = Field(numbers: [[Int]]())
|
||||||
|
|
||||||
func run() {
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
let input = try! String(contentsOfFile: inputPath)
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
let entries = input
|
let entries = input
|
||||||
.trimmingCharacters(in: .newlines)
|
.trimmingCharacters(in: .newlines)
|
||||||
.components(separatedBy: .newlines)
|
.components(separatedBy: .newlines)
|
||||||
.map { line in line.map { $0.wholeNumberValue! } }
|
.map { line in line.map { $0.wholeNumberValue! } }
|
||||||
let field = Field(numbers: entries)
|
field = Field(numbers: entries)
|
||||||
let sum = field.compactMap { field.lowPointValueAt(coord: $0) }.reduce(0, { $0 + $1 + 1 })
|
lowPoints = Set(field.filter { field.isLowPointAt(coord: $0) })
|
||||||
|
|
||||||
|
//Part 1
|
||||||
|
let sum = lowPoints.map { field[$0] }.reduce(0, +) + lowPoints.count
|
||||||
print(sum)
|
print(sum)
|
||||||
|
|
||||||
|
// Part 2:
|
||||||
|
var basinSize = [Coord: Int]()
|
||||||
|
for coord in field {
|
||||||
|
guard field[coord] != 9 else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
let bl = basinLocation(for: coord)
|
||||||
|
basinSize[bl, default: 0] += 1
|
||||||
|
}
|
||||||
|
let result = basinSize.values.sorted(by: >)[0..<3].reduce(1, *)
|
||||||
|
print(result)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func basinLocation(for coord: Coord) -> Coord {
|
||||||
|
guard !lowPoints.contains(coord) else {
|
||||||
|
return coord
|
||||||
|
}
|
||||||
|
let closestNeighbor = lowestNeighbors[coord] ?? field.getNeighborsCoordsFor(coord: coord).min(by: { field[$0] < field[$1] })!
|
||||||
|
lowestNeighbors[coord] = closestNeighbor
|
||||||
|
return basinLocation(for: closestNeighbor)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,5 +8,5 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import Runner
|
import Runner
|
||||||
|
|
||||||
Runner(target: Day09.self, day: "09", isTest: true).run()
|
//Runner(target: Day09.self, day: "09", isTest: true).run()
|
||||||
//Runner(target: Day09.self, day: "09", isTest: false).run()
|
Runner(target: Day09.self, day: "09", isTest: false).run()
|
||||||
|
106
Sources/10/10.swift
Normal file
106
Sources/10/10.swift
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 05.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
import Collections
|
||||||
|
|
||||||
|
|
||||||
|
struct Day10: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
let lines = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
var s = Deque<String.Element>()
|
||||||
|
var illegalCharacters = [String.Element]()
|
||||||
|
var syntaxScore = 0
|
||||||
|
var autocompleteScores = [Int]()
|
||||||
|
for line in lines {
|
||||||
|
s = Deque<String.Element>()
|
||||||
|
var isIllegalLine = false
|
||||||
|
for char in line {
|
||||||
|
if char.isClosing {
|
||||||
|
guard let popped = s.popFirst() else {
|
||||||
|
fatalError()
|
||||||
|
}
|
||||||
|
guard let shouldBeClosedBy = popped.closedBy else {
|
||||||
|
fatalError()
|
||||||
|
}
|
||||||
|
if shouldBeClosedBy == char {
|
||||||
|
continue // Valid chunk
|
||||||
|
}
|
||||||
|
//print("Line: \(lineNumber): Expected \(shouldBeClosedBy), but found \(char) instead")
|
||||||
|
syntaxScore += char.score!
|
||||||
|
isIllegalLine = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
s.prepend(char)
|
||||||
|
}
|
||||||
|
if !isIllegalLine {
|
||||||
|
var lineScore = 0
|
||||||
|
while let last = s.popFirst() {
|
||||||
|
let charValue = last.closedBy!.autocompleteScore!
|
||||||
|
lineScore = lineScore * 5 + charValue
|
||||||
|
}
|
||||||
|
autocompleteScores.append(lineScore)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print(syntaxScore)
|
||||||
|
print(autocompleteScores.sorted()[autocompleteScores.count / 2])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension String.Element {
|
||||||
|
var isClosing: Bool { self == "]" || self == ")" || self == ">" || self == "}" }
|
||||||
|
var closedBy: String.Element? {
|
||||||
|
switch self {
|
||||||
|
case "[":
|
||||||
|
return "]"
|
||||||
|
case "(":
|
||||||
|
return ")"
|
||||||
|
case "{":
|
||||||
|
return "}"
|
||||||
|
case "<":
|
||||||
|
return ">"
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var score: Int? {
|
||||||
|
switch self {
|
||||||
|
case ")":
|
||||||
|
return 3
|
||||||
|
case "]":
|
||||||
|
return 57
|
||||||
|
case "}":
|
||||||
|
return 1197
|
||||||
|
case ">":
|
||||||
|
return 25137
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var autocompleteScore: Int? {
|
||||||
|
switch self {
|
||||||
|
case ")":
|
||||||
|
return 1
|
||||||
|
case "]":
|
||||||
|
return 2
|
||||||
|
case "}":
|
||||||
|
return 3
|
||||||
|
case ">":
|
||||||
|
return 4
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
Sources/10/main.swift
Normal file
12
Sources/10/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 05.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day10.self, day: "10", isTest: true).run()
|
||||||
|
Runner(target: Day10.self, day: "10", isTest: false).run()
|
109
Sources/11/11.swift
Normal file
109
Sources/11/11.swift
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 11.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
struct Coord: Hashable {
|
||||||
|
let row: Int
|
||||||
|
let col: Int
|
||||||
|
|
||||||
|
var left: Coord { Coord(row: row, col: col - 1) }
|
||||||
|
var right: Coord { Coord(row: row, col: col + 1) }
|
||||||
|
var top: Coord { Coord(row: row - 1, col: col) }
|
||||||
|
var bottom: Coord { Coord(row: row + 1, col: col) }
|
||||||
|
|
||||||
|
var topLeft: Coord { Coord(row: row - 1, col: col - 1) }
|
||||||
|
var topRight: Coord { Coord(row: row - 1, col: col + 1) }
|
||||||
|
var bottomLeft: Coord { Coord(row: row + 1, col: col - 1) }
|
||||||
|
var bottomRight: Coord { Coord(row: row + 1, col: col + 1) }
|
||||||
|
|
||||||
|
var neighbors: [Coord] {
|
||||||
|
[topLeft, top, topRight, left, right, bottomLeft, bottom, bottomRight]
|
||||||
|
.filter {coord in coord.col >= 0 && coord.col < 10 && coord.row >= 0 && coord.row < 10}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Day11: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
var octopuses = [[Int]]()
|
||||||
|
var flashed = Set<Coord>()
|
||||||
|
let numRows = 10
|
||||||
|
let numCols = 10
|
||||||
|
var numFlashes = 0
|
||||||
|
|
||||||
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
octopuses = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.map { Array($0) }
|
||||||
|
.map { ar in ar.map {c in Int(c.description)!} }
|
||||||
|
|
||||||
|
var step = 0
|
||||||
|
while(flashed.count < numRows * numCols) {
|
||||||
|
flashed = Set<Coord>()
|
||||||
|
for row in octopuses.indices {
|
||||||
|
for col in octopuses[row].indices {
|
||||||
|
octopuses[row][col] += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for row in octopuses.indices {
|
||||||
|
for col in octopuses[row].indices {
|
||||||
|
let coord = Coord(row: row, col: col)
|
||||||
|
checkAndFlash(at: coord)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for flash in flashed {
|
||||||
|
octopuses[flash] = 0
|
||||||
|
}
|
||||||
|
step += 1
|
||||||
|
if step == 100 {
|
||||||
|
print(numFlashes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print("All flashing at step: \(step)")
|
||||||
|
}
|
||||||
|
|
||||||
|
func checkAndFlash(at coord: Coord) {
|
||||||
|
if octopuses[coord] <= 9 || flashed.contains(coord) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
flashed.insert(coord)
|
||||||
|
numFlashes += 1
|
||||||
|
for neighbor in coord.neighbors.filter({!flashed.contains($0)}) {
|
||||||
|
octopuses[neighbor] += 1
|
||||||
|
checkAndFlash(at: neighbor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Array where Element == Array<Int> {
|
||||||
|
subscript(coord: Coord) -> Int {
|
||||||
|
get { self[coord.row][coord.col] }
|
||||||
|
set(newValue) {
|
||||||
|
self[coord.row][coord.col] = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func fieldDescription(flashed: Set<Coord>) -> String {
|
||||||
|
var desc = ""
|
||||||
|
for row in indices {
|
||||||
|
for col in self[row].indices {
|
||||||
|
let c = flashed.contains(Coord(row: row, col: col)) ? " X" : String(format: "%02d", self[row][col])
|
||||||
|
desc.append("\(c),")
|
||||||
|
}
|
||||||
|
desc.append("\n")
|
||||||
|
}
|
||||||
|
return desc
|
||||||
|
}
|
||||||
|
}
|
12
Sources/11/main.swift
Normal file
12
Sources/11/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 05.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day11.self, day: "11", isTest: true).run()
|
||||||
|
Runner(target: Day11.self, day: "11", isTest: false).run()
|
155
Sources/12/12.swift
Normal file
155
Sources/12/12.swift
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 12.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
import Collections
|
||||||
|
|
||||||
|
class Cave: Hashable, CustomStringConvertible, CustomDebugStringConvertible {
|
||||||
|
static func == (lhs: Cave, rhs: Cave) -> Bool { lhs.name == rhs.name }
|
||||||
|
|
||||||
|
func hash(into hasher: inout Hasher) {
|
||||||
|
hasher.combine(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
var description: String { name }
|
||||||
|
var debugDescription: String { name }
|
||||||
|
|
||||||
|
let name: String
|
||||||
|
var connectedCaves = [Cave]()
|
||||||
|
var isBigCave: Bool
|
||||||
|
var isEnd: Bool
|
||||||
|
var isStart: Bool
|
||||||
|
|
||||||
|
required init(name: String) {
|
||||||
|
self.name = name
|
||||||
|
self.isBigCave = name.first!.isUppercase
|
||||||
|
self.isEnd = name == "end"
|
||||||
|
self.isStart = name == "start"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Path: Hashable, CustomStringConvertible {
|
||||||
|
var parts: [Cave]
|
||||||
|
var visitedSmallCaveTwice = false
|
||||||
|
var description: String
|
||||||
|
|
||||||
|
func contains(cave: Cave) -> Bool { parts.contains(cave) }
|
||||||
|
|
||||||
|
func appending(cave: Cave) -> Path {
|
||||||
|
var newParts = parts
|
||||||
|
newParts.append(cave)
|
||||||
|
return Path(
|
||||||
|
parts: newParts,
|
||||||
|
visitedSmallCaveTwice: visitedSmallCaveTwice || !cave.isBigCave && contains(cave: cave))
|
||||||
|
}
|
||||||
|
|
||||||
|
static func == (lhs: Path, rhs: Path) -> Bool { lhs.description == rhs.description }
|
||||||
|
|
||||||
|
func hash(into hasher: inout Hasher) {
|
||||||
|
hasher.combine(description)
|
||||||
|
}
|
||||||
|
|
||||||
|
init(parts: [Cave], visitedSmallCaveTwice: Bool = false) {
|
||||||
|
self.parts = parts
|
||||||
|
self.visitedSmallCaveTwice = visitedSmallCaveTwice
|
||||||
|
self.description = (visitedSmallCaveTwice ? "*" : "") + parts.map {$0.description}.joined(separator: "->")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Day12: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
var caves = [String:Cave]()
|
||||||
|
|
||||||
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
caves = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.reduce(into: [String:Cave](), { caves, line in
|
||||||
|
let caveConnection = line.components(separatedBy: "-")
|
||||||
|
let caveFromName = caveConnection.first!
|
||||||
|
let caveToName = caveConnection.last!
|
||||||
|
let from = caves[caveFromName] ?? Cave(name: caveFromName)
|
||||||
|
let to = caves[caveToName] ?? Cave(name: caveToName)
|
||||||
|
from.connectedCaves.append(to)
|
||||||
|
to.connectedCaves.append(from)
|
||||||
|
caves[caveFromName] = from
|
||||||
|
caves[caveToName] = to
|
||||||
|
|
||||||
|
})
|
||||||
|
runA()
|
||||||
|
runB()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func runA() {
|
||||||
|
var queue = Deque<Path>(minimumCapacity: 10000)
|
||||||
|
var visited = Set<Path>(minimumCapacity: 10000)
|
||||||
|
var numFinished = 0
|
||||||
|
|
||||||
|
var cave: Path? = Path(parts: [caves["start"]!])
|
||||||
|
queue.append(cave!)
|
||||||
|
|
||||||
|
while !queue.isEmpty {
|
||||||
|
cave = queue.popFirst()
|
||||||
|
if visited.contains(cave!) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
visited.insert(cave!)
|
||||||
|
|
||||||
|
cave!.parts.last!.connectedCaves
|
||||||
|
.filter { $0.isBigCave || !cave!.contains(cave: $0) }
|
||||||
|
.forEach {
|
||||||
|
if $0.isEnd {
|
||||||
|
numFinished += 1
|
||||||
|
//print("Finished: \(cave!.parts)->end")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var newParts = cave!.parts
|
||||||
|
newParts.append($0)
|
||||||
|
queue.append(Path(parts: newParts))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print(numFinished)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runB() {
|
||||||
|
var queue = Deque<Path>(minimumCapacity: 1000000)
|
||||||
|
var visited = Set<Path>(minimumCapacity: 1000000)
|
||||||
|
var numFinished = 0
|
||||||
|
|
||||||
|
var cave: Path? = Path(parts: [caves["start"]!])
|
||||||
|
queue.append(cave!)
|
||||||
|
|
||||||
|
while !queue.isEmpty {
|
||||||
|
cave = queue.popFirst()
|
||||||
|
if visited.contains(cave!) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
visited.insert(cave!)
|
||||||
|
cave!.parts.last!.connectedCaves
|
||||||
|
.forEach {
|
||||||
|
if $0.isStart || (cave!.visitedSmallCaveTwice && !$0.isBigCave && cave!.contains(cave: $0)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if $0.isEnd {
|
||||||
|
numFinished += 1
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var newParts = cave!.parts
|
||||||
|
newParts.append($0)
|
||||||
|
queue.append(cave!.appending(cave: $0))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print(numFinished)
|
||||||
|
}
|
||||||
|
}
|
12
Sources/12/main.swift
Normal file
12
Sources/12/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 05.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day12.self, day: "12", isTest: true).run()
|
||||||
|
Runner(target: Day12.self, day: "12", isTest: false).run()
|
113
Sources/13/13.swift
Normal file
113
Sources/13/13.swift
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 12.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
struct Coord: Hashable {
|
||||||
|
var x: Int
|
||||||
|
var y: Int
|
||||||
|
|
||||||
|
init(x: Int, y: Int) {
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
}
|
||||||
|
|
||||||
|
init(line: String) {
|
||||||
|
let parts = line.split(separator: ",").map { Int($0)! }
|
||||||
|
x = parts.first!
|
||||||
|
y = parts.last!
|
||||||
|
}
|
||||||
|
|
||||||
|
func foldingUp(by y: Int) -> Coord {
|
||||||
|
guard self.y > y else {
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
return Coord(x: x, y: y - (self.y - y))
|
||||||
|
}
|
||||||
|
|
||||||
|
func foldingLeft(by x: Int) -> Coord {
|
||||||
|
guard self.x > x else {
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
return Coord(x: x - (self.x - x), y: y)
|
||||||
|
}
|
||||||
|
|
||||||
|
func folding(by instruction: FoldingInstruction) -> Coord {
|
||||||
|
switch instruction {
|
||||||
|
case .up(let y):
|
||||||
|
return foldingUp(by: y)
|
||||||
|
case .left(let x):
|
||||||
|
return foldingLeft(by: x)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum FoldingInstruction {
|
||||||
|
case up(y: Int)
|
||||||
|
case left(x: Int)
|
||||||
|
|
||||||
|
init?(line: String) {
|
||||||
|
let i = line.split(separator: " ").last!.split(separator: "=")
|
||||||
|
let coord = Int(i.last!)!
|
||||||
|
switch i.first {
|
||||||
|
case "x":
|
||||||
|
self = .left(x: coord)
|
||||||
|
case "y":
|
||||||
|
self = .up(y: coord)
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Day13: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
|
||||||
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
let parts = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
.components(separatedBy: "\n\n")
|
||||||
|
var dots = parts.first!
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.map(Coord.init)
|
||||||
|
let instructions = parts.last!
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.map { FoldingInstruction(line: $0)! }
|
||||||
|
|
||||||
|
var isFirst = true
|
||||||
|
for instruction in instructions {
|
||||||
|
dots = dots.map { $0.folding(by: instruction) }
|
||||||
|
if isFirst {
|
||||||
|
print(Set(dots).count)
|
||||||
|
isFirst = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printDots(dots: dots)
|
||||||
|
}
|
||||||
|
|
||||||
|
func printDots(dots:[Coord]) {
|
||||||
|
let maxX = dots.map {$0.x}.max()!
|
||||||
|
let maxY = dots.map {$0.y}.max()!
|
||||||
|
let uniqueDots = Set(dots)
|
||||||
|
var s = ""
|
||||||
|
for y in 0...maxY {
|
||||||
|
for x in 0...maxX {
|
||||||
|
s += uniqueDots.contains(Coord(x: x, y: y)) ? "#" : " "
|
||||||
|
}
|
||||||
|
s += "\n"
|
||||||
|
}
|
||||||
|
print(s)
|
||||||
|
}
|
||||||
|
}
|
12
Sources/13/main.swift
Normal file
12
Sources/13/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 05.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day13.self, day: "13", isTest: true).run()
|
||||||
|
Runner(target: Day13.self, day: "13", isTest: false).run()
|
82
Sources/14/14.swift
Normal file
82
Sources/14/14.swift
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 14.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
struct Pair: Hashable {
|
||||||
|
let first: String.Element
|
||||||
|
let second: String.Element
|
||||||
|
|
||||||
|
init(_ str: String) {
|
||||||
|
first = str.first!
|
||||||
|
second = str.last!
|
||||||
|
}
|
||||||
|
|
||||||
|
init(first: String.Element, second: String.Element) {
|
||||||
|
self.first = first
|
||||||
|
self.second = second
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Day14: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
|
||||||
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
let parts = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
.components(separatedBy: "\n\n")
|
||||||
|
let startingPolymer = parts.first!
|
||||||
|
let replacements = parts.last!
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.map {$0.components(separatedBy: " -> ")}
|
||||||
|
.reduce(into: [Pair:String.Element](), {
|
||||||
|
$0[Pair($1.first!)] = $1.last!.first!
|
||||||
|
})
|
||||||
|
|
||||||
|
var pairCounts = [Pair:Int]()
|
||||||
|
var charCount = [String.Element:Int](minimumCapacity: 26)
|
||||||
|
for i in startingPolymer.indices {
|
||||||
|
let firstCharacter = startingPolymer[i]
|
||||||
|
charCount[firstCharacter, default: 0] += 1
|
||||||
|
let next = startingPolymer.index(i, offsetBy: 1)
|
||||||
|
guard next != startingPolymer.endIndex else {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
pairCounts[Pair(first: firstCharacter, second: startingPolymer[next]), default: 0] += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
for step in 1...40 {
|
||||||
|
let tmpPairCounts = pairCounts
|
||||||
|
tmpPairCounts.forEach { pairCount in
|
||||||
|
let pair = pairCount.key
|
||||||
|
let replacement = replacements[pair]!
|
||||||
|
pairCounts[pair]! -= pairCount.value
|
||||||
|
pairCounts[Pair(first: pair.first, second: replacement), default: 0] += pairCount.value
|
||||||
|
pairCounts[Pair(first: replacement, second: pair.second), default: 0] += pairCount.value
|
||||||
|
charCount[replacement, default: 0] += pairCount.value
|
||||||
|
}
|
||||||
|
if step == 10 {
|
||||||
|
printResult(charCount: charCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printResult(charCount: charCount)
|
||||||
|
}
|
||||||
|
|
||||||
|
func printResult(charCount: [String.Element:Int]) {
|
||||||
|
// Sort instead of min/max so we need to only go through the dict once
|
||||||
|
let sorted = charCount.sorted(by: {$0.value > $1.value })
|
||||||
|
let maxC = sorted.first!
|
||||||
|
let minC = sorted.last!
|
||||||
|
print(maxC.value - minC.value)
|
||||||
|
}
|
||||||
|
}
|
12
Sources/14/main.swift
Normal file
12
Sources/14/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 14.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day14.self, day: "14", isTest: true).run()
|
||||||
|
Runner(target: Day14.self, day: "14", isTest: false).run()
|
152
Sources/15/15.swift
Normal file
152
Sources/15/15.swift
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 15s.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
import Collections
|
||||||
|
|
||||||
|
typealias ThreatLevel = Int
|
||||||
|
|
||||||
|
struct Coord: Hashable, CustomStringConvertible {
|
||||||
|
let row: Int
|
||||||
|
let col: Int
|
||||||
|
|
||||||
|
var description: String { "(\(row), \(col))" }
|
||||||
|
|
||||||
|
func neighbors() -> [Coord] {
|
||||||
|
[
|
||||||
|
Coord(row: row-1, col: col),
|
||||||
|
Coord(row: row, col: col+1),
|
||||||
|
Coord(row: row+1, col: col),
|
||||||
|
Coord(row: row, col: col-1)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Day15: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
var lastRow: Int = 0
|
||||||
|
var lastCol: Int = 0
|
||||||
|
var parts = [[ThreatLevel]]()
|
||||||
|
var neighbors = [Coord: [Coord]]()
|
||||||
|
|
||||||
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
private func expandMap() {
|
||||||
|
var tmpParts = parts
|
||||||
|
for (rowNum, row) in tmpParts.enumerated() {
|
||||||
|
let newRow = [Int](0...4).flatMap { cr in
|
||||||
|
row.map { rv in cr + rv }.map { $0 > 9 ? $0 - 9 : $0 }
|
||||||
|
}
|
||||||
|
parts[rowNum] = newRow
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpParts = parts
|
||||||
|
for num in 1...4 {
|
||||||
|
for i in tmpParts.indices {
|
||||||
|
let tr = tmpParts[i]
|
||||||
|
let ntr = tr.map { $0 + num }.map { $0 > 9 ? $0 - 9 : $0 }
|
||||||
|
parts.append(ntr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lastRow = parts.count - 1
|
||||||
|
lastCol = (parts.first?.count ?? 0) - 1
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
parts = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
.components(separatedBy: .newlines)
|
||||||
|
.map { Array($0) }
|
||||||
|
.map { ar in ar.map {c in ThreatLevel(c.description)!} }
|
||||||
|
lastRow = parts.count - 1
|
||||||
|
lastCol = (parts.first?.count ?? 0) - 1
|
||||||
|
|
||||||
|
calculateSafestPath()
|
||||||
|
expandMap()
|
||||||
|
neighbors = [Coord: [Coord]]()
|
||||||
|
calculateSafestPath()
|
||||||
|
}
|
||||||
|
|
||||||
|
private func calculateSafestPath() {
|
||||||
|
// Distances to startNode
|
||||||
|
var totalThreatLevel = [Coord: ThreatLevel]()
|
||||||
|
|
||||||
|
var unvisited = Set(parts.enumerated().flatMap {row in
|
||||||
|
row.element.indices.map { col in
|
||||||
|
Coord(row: row.offset, col: col)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
/* Keep a seperate dictionary, to calculate which coordinates have a set threat level
|
||||||
|
* a.k.a total distance to start
|
||||||
|
* This allows to find the next coordinate to check fairly quickly, by just
|
||||||
|
* looking at the minmum key in this.
|
||||||
|
* I initially tried a PriorityQueue, but my implementation was pretty slow and it spent too much time sorting
|
||||||
|
*/
|
||||||
|
var threatLevelDistrubution = [ThreatLevel: Set<Coord>]()
|
||||||
|
let startNode = Coord(row: 0, col: 0)
|
||||||
|
totalThreatLevel[startNode] = 0
|
||||||
|
threatLevelDistrubution[Int.max] = unvisited
|
||||||
|
threatLevelDistrubution[Int.max]!.remove(startNode)
|
||||||
|
threatLevelDistrubution[0] = Set([startNode])
|
||||||
|
|
||||||
|
while let threatLevel = threatLevelDistrubution.keys.min() {
|
||||||
|
let currentNode = threatLevelDistrubution[threatLevel]!.first!
|
||||||
|
unvisited.remove(currentNode)
|
||||||
|
threatLevelDistrubution[threatLevel]!.remove(currentNode)
|
||||||
|
|
||||||
|
// Remove key from dictionary if not coords are left for a specific threat level
|
||||||
|
if threatLevelDistrubution[threatLevel]!.isEmpty {
|
||||||
|
threatLevelDistrubution.removeValue(forKey: threatLevel)
|
||||||
|
}
|
||||||
|
|
||||||
|
if neighbors[currentNode] == nil {
|
||||||
|
neighbors[currentNode] = currentNode
|
||||||
|
.neighbors()
|
||||||
|
.filter {
|
||||||
|
$0.col >= 0 && $0.col <= lastCol && $0.row >= 0 && $0.row <= lastRow
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var adjacent = neighbors[currentNode]!
|
||||||
|
neighbors[currentNode] = adjacent
|
||||||
|
adjacent = adjacent
|
||||||
|
.filter {
|
||||||
|
unvisited.contains($0)
|
||||||
|
}
|
||||||
|
let currentThreatLevel = totalThreatLevel[currentNode, default: Int.max]
|
||||||
|
for a in adjacent {
|
||||||
|
let testCost = parts[a] + currentThreatLevel
|
||||||
|
let currentCost = totalThreatLevel[a, default: Int.max]
|
||||||
|
if currentCost > testCost {
|
||||||
|
totalThreatLevel[a] = testCost
|
||||||
|
threatLevelDistrubution[currentCost]!.remove(a)
|
||||||
|
threatLevelDistrubution[testCost, default: Set<Coord>()].insert(a)
|
||||||
|
|
||||||
|
// Remove key from dictionary if not coords are left for a specific threat leveli
|
||||||
|
if threatLevelDistrubution[currentCost]!.isEmpty {
|
||||||
|
threatLevelDistrubution.removeValue(forKey: currentCost)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print(totalThreatLevel[Coord(row: lastRow, col: lastCol)]!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Array where Element == Array<Int> {
|
||||||
|
subscript(coord: Coord) -> Int {
|
||||||
|
get { self[coord.row][coord.col] }
|
||||||
|
set(newValue) {
|
||||||
|
self[coord.row][coord.col] = newValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
Sources/15/main.swift
Normal file
12
Sources/15/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 15.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day15.self, day: "15", isTest: true).run()
|
||||||
|
Runner(target: Day15.self, day: "15", isTest: false).run()
|
191
Sources/16/16.swift
Normal file
191
Sources/16/16.swift
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 15.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
|
||||||
|
enum OperatorType: Int {
|
||||||
|
case sum = 0
|
||||||
|
case product = 1
|
||||||
|
case minimum = 2
|
||||||
|
case maximum = 3
|
||||||
|
case value = 4
|
||||||
|
case greaterThan = 5
|
||||||
|
case lessThan = 6
|
||||||
|
case equal = 7
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol Packet {
|
||||||
|
var version: Int { get }
|
||||||
|
|
||||||
|
func getTotalVersion() -> Int
|
||||||
|
func getValue() -> Int
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ValuePacket: Packet {
|
||||||
|
let version: Int
|
||||||
|
let value: Int
|
||||||
|
|
||||||
|
func getTotalVersion() -> Int { version }
|
||||||
|
func getValue() -> Int { value }
|
||||||
|
}
|
||||||
|
|
||||||
|
struct OperatorPacket: Packet {
|
||||||
|
let type: OperatorType
|
||||||
|
let version: Int
|
||||||
|
let subPackets: [Packet]
|
||||||
|
|
||||||
|
func getTotalVersion() -> Int { version + subPackets.map { $0.getTotalVersion() }.reduce(0, +) }
|
||||||
|
func getValue() -> Int {
|
||||||
|
let spValues = subPackets.map { $0.getValue() }
|
||||||
|
switch type {
|
||||||
|
case .sum:
|
||||||
|
return spValues.reduce(0, +)
|
||||||
|
case .product:
|
||||||
|
return spValues.reduce(1, *)
|
||||||
|
case .minimum:
|
||||||
|
return spValues.min()!
|
||||||
|
case .maximum:
|
||||||
|
return spValues.max()!
|
||||||
|
case .greaterThan:
|
||||||
|
return spValues.first! > spValues.last! ? 1 : 0
|
||||||
|
case .lessThan:
|
||||||
|
return spValues.first! < spValues.last! ? 1 : 0
|
||||||
|
case .equal:
|
||||||
|
return spValues.first! == spValues.last! ? 1 : 0
|
||||||
|
case .value:
|
||||||
|
fatalError()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Day16: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
|
||||||
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
let parts = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
let bytes = parts.bits().joined()
|
||||||
|
let packets = parsePacket(bytes: bytes)
|
||||||
|
let p: Packet = packets.0
|
||||||
|
print(p.getTotalVersion())
|
||||||
|
print(p.getValue())
|
||||||
|
}
|
||||||
|
|
||||||
|
func parsePacket<S>(bytes: S) -> (Packet, S.SubSequence) where S:StringProtocol {
|
||||||
|
let version = bytes[bytes.startIndex..<bytes.index(bytes.startIndex, offsetBy: 3)].binaryToDecimal()
|
||||||
|
let typeId = bytes[bytes.index(bytes.startIndex, offsetBy: 3)..<bytes.index(bytes.startIndex, offsetBy: 6)].binaryToDecimal()
|
||||||
|
var value: Packet
|
||||||
|
var reminder: S.SubSequence
|
||||||
|
switch typeId {
|
||||||
|
case 4:
|
||||||
|
let (v, r) = parseLiteralPacketValue(bytes: bytes)
|
||||||
|
value = ValuePacket(version: version, value: v)
|
||||||
|
reminder = r
|
||||||
|
default:
|
||||||
|
let (v, r) = parseOperatorPacker(bytes: bytes)
|
||||||
|
value = OperatorPacket(type: OperatorType(rawValue: typeId)!, version: version, subPackets: v)
|
||||||
|
reminder = r
|
||||||
|
}
|
||||||
|
return (value, reminder)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseOperatorPacker<S>(bytes: S) -> ([Packet], S.SubSequence) where S:StringProtocol {
|
||||||
|
let startNextBitsIndex = bytes.index(bytes.startIndex, offsetBy: 7)
|
||||||
|
let lengthTypeId = bytes[bytes.index(bytes.startIndex, offsetBy: 6)..<startNextBitsIndex].description
|
||||||
|
let isTotalLength = lengthTypeId == "0"
|
||||||
|
|
||||||
|
let nextBitsLength = isTotalLength ? 15 : 11
|
||||||
|
let endNextBitsIndex = bytes.index(startNextBitsIndex, offsetBy: nextBitsLength)
|
||||||
|
let nextBits = bytes[startNextBitsIndex..<endNextBitsIndex]
|
||||||
|
|
||||||
|
var number = nextBits.binaryToDecimal()
|
||||||
|
var reminder = bytes[endNextBitsIndex...]
|
||||||
|
var subPackets = [Packet]()
|
||||||
|
|
||||||
|
while number > 0 {
|
||||||
|
let (p, rem) = parsePacket(bytes: reminder)
|
||||||
|
number -= isTotalLength ? (reminder.count - rem.count) : 1
|
||||||
|
subPackets.append(p)
|
||||||
|
reminder = rem
|
||||||
|
}
|
||||||
|
return (subPackets, reminder)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseLiteralPacketValue<S>(bytes: S) -> (Int, S.SubSequence) where S:StringProtocol {
|
||||||
|
var index = bytes.index(bytes.startIndex, offsetBy: 6)
|
||||||
|
var ei = index
|
||||||
|
var bits: Substring = ""
|
||||||
|
var reminder: S.SubSequence = ""
|
||||||
|
while true {
|
||||||
|
let si = bytes.index(index, offsetBy: 1)
|
||||||
|
ei = bytes.index(si, offsetBy: 4)
|
||||||
|
bits += bytes[si..<ei]
|
||||||
|
if bytes[index] == "0" {
|
||||||
|
reminder = bytes[ei...]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
index = bytes.index(ei, offsetBy: 0)
|
||||||
|
}
|
||||||
|
return (bits.binaryToDecimal(), reminder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension StringProtocol {
|
||||||
|
func bits() -> [String] {
|
||||||
|
self.map { $0.bits }
|
||||||
|
}
|
||||||
|
|
||||||
|
func binaryToDecimal() -> Int { Int(self, radix: 2)! }
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Character {
|
||||||
|
var bits: String {
|
||||||
|
switch self.hexDigitValue! {
|
||||||
|
case 0:
|
||||||
|
return "0000"
|
||||||
|
case 1:
|
||||||
|
return "0001"
|
||||||
|
case 2:
|
||||||
|
return "0010"
|
||||||
|
case 3:
|
||||||
|
return "0011"
|
||||||
|
case 4:
|
||||||
|
return "0100"
|
||||||
|
case 5:
|
||||||
|
return "0101"
|
||||||
|
case 6:
|
||||||
|
return "0110"
|
||||||
|
case 7:
|
||||||
|
return "0111"
|
||||||
|
case 8:
|
||||||
|
return "1000"
|
||||||
|
case 9:
|
||||||
|
return "1001"
|
||||||
|
case 10:
|
||||||
|
return "1010"
|
||||||
|
case 11:
|
||||||
|
return "1011"
|
||||||
|
case 12:
|
||||||
|
return "1100"
|
||||||
|
case 13:
|
||||||
|
return "1101"
|
||||||
|
case 14:
|
||||||
|
return "1110"
|
||||||
|
case 15:
|
||||||
|
return "1111"
|
||||||
|
default:
|
||||||
|
fatalError()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
Sources/16/main.swift
Normal file
12
Sources/16/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 15.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day16.self, day: "16", isTest: true).run()
|
||||||
|
Runner(target: Day16.self, day: "16", isTest: false).run()
|
95
Sources/17/17.swift
Normal file
95
Sources/17/17.swift
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 17.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
import Collections
|
||||||
|
|
||||||
|
struct Point:Hashable {
|
||||||
|
var x: Int
|
||||||
|
var y: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Area {
|
||||||
|
let topLeft: Point
|
||||||
|
let botRight: Point
|
||||||
|
|
||||||
|
init(x: String, y: String) {
|
||||||
|
let xVals = x[x.index(x.startIndex, offsetBy: 2)...].components(separatedBy: "..").map { Int($0)! }
|
||||||
|
let yVals = y[y.index(y.startIndex, offsetBy: 2)...].components(separatedBy: "..").map { Int($0)! }
|
||||||
|
topLeft = Point(x: xVals.first!, y: yVals.last!)
|
||||||
|
botRight = Point(x: xVals.last!, y: yVals.first!)
|
||||||
|
}
|
||||||
|
|
||||||
|
func contains(point: Point) -> Bool {
|
||||||
|
point.x >= topLeft.x && point.x <= botRight.x && point.y <= topLeft.y && point.y >= botRight.y
|
||||||
|
}
|
||||||
|
|
||||||
|
func overshot(point: Point) -> Bool {
|
||||||
|
point.y < botRight.y || point.x > botRight.x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Probe {
|
||||||
|
var position = Point(x: 0, y: 0)
|
||||||
|
var velocity: Point
|
||||||
|
|
||||||
|
mutating func move() {
|
||||||
|
position.x += velocity.x
|
||||||
|
position.y += velocity.y
|
||||||
|
if velocity.x < 0 {
|
||||||
|
velocity.x += 1
|
||||||
|
} else if velocity.x > 0 {
|
||||||
|
velocity.x -= 1
|
||||||
|
}
|
||||||
|
velocity.y -= 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Day17: Runnable {
|
||||||
|
let inputPath: String
|
||||||
|
|
||||||
|
required init(inputPath: String) {
|
||||||
|
self.inputPath = inputPath
|
||||||
|
}
|
||||||
|
|
||||||
|
public func run() {
|
||||||
|
let input = try! String(contentsOfFile: inputPath)
|
||||||
|
let parts = input
|
||||||
|
.trimmingCharacters(in: .newlines)
|
||||||
|
.components(separatedBy: ": ")
|
||||||
|
.last!
|
||||||
|
.components(separatedBy: ", ")
|
||||||
|
let area = Area(x: parts.first!, y: parts.last!)
|
||||||
|
|
||||||
|
var maxY = Int.min
|
||||||
|
var found = [Point]()
|
||||||
|
found.reserveCapacity(3000)
|
||||||
|
for x in 0...500 {
|
||||||
|
for y in -500...500 {
|
||||||
|
let velocity = Point(x: x, y: y)
|
||||||
|
var probe = Probe(velocity: velocity)
|
||||||
|
var maxYCurrent = Int.min
|
||||||
|
repeat {
|
||||||
|
probe.move()
|
||||||
|
if probe.position.y > maxYCurrent {
|
||||||
|
maxYCurrent = probe.position.y
|
||||||
|
}
|
||||||
|
if area.contains(point: probe.position) {
|
||||||
|
if maxYCurrent > maxY {
|
||||||
|
maxY = maxYCurrent
|
||||||
|
}
|
||||||
|
found.append(velocity)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} while !area.overshot(point: probe.position)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print(maxY)
|
||||||
|
print(Set(found).count)
|
||||||
|
}
|
||||||
|
}
|
12
Sources/17/main.swift
Normal file
12
Sources/17/main.swift
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
//
|
||||||
|
// File.swift
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Created by Max Nuding on 17.12.21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Runner
|
||||||
|
|
||||||
|
//Runner(target: Day17.self, day: "17", isTest: true).run()
|
||||||
|
Runner(target: Day17.self, day: "17", isTest: false).run()
|
90
Sources/Runner/Resources/input/10.txt
Normal file
90
Sources/Runner/Resources/input/10.txt
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
([<([{{<<(<<{[<><>)}<([][])<<>{}>>>{[{(){}}(()[])]<{()()}<()()>>}>([<<{}<>>(<><>)><[{}[]](<>())>][
|
||||||
|
({{<<(<<<<{{[({}{})<[]()>]<([]{}){[]<>}>}{([{}[]]}}}>({(((()()))<{<>()}[<>()]>)[{(<>{})(()[])}[{[]
|
||||||
|
[{{[([<({[([<{[]}({}<>)>]{(([]())[()[]]){<[]<>>[<><>]}}>{<[(()<>){[]<>}][[<>{}]<()()>]>[[[<>[]][()
|
||||||
|
{(<<{([([<(<{(<>[])<()<>>}>){[[<<>()>[<>[]]]{[{}{}]{[]<>}}]{<{{}<>}{{}()}>{[()()]<[]<>>})}>[{({[{}
|
||||||
|
<{<<<<<{{{({<<[][]>[()[]]><<(){}>([]{})>}{{<[]{}><{}[]>}{<{}{}>({}<>)}}){([(()[]){[]()}][<[]()><[]{}>])
|
||||||
|
<{({{<{{{<(({(<>)({}[])}{<()>{(){}}})[[(<><>)[[]]]<[{}[]]{<>()}>])>{<<([{}()]{[][]})({{}{}}{()})><
|
||||||
|
<([[<<[{[{({{({}<>)[(){}]}{[{}<>]{[]{}}}}({[()()]<<><>>}(<{}[]><[]{}>)))}<({<<[]<>>({}[])>
|
||||||
|
[[{<{{[{<{<[{[()[]]<()()>}][<(<>[]){<>()}>[{<><>}(<>())]]><[{{{}<>}<{}{}>}{[{}[]][[][]]}]<[([]<>){[]{}}]<(
|
||||||
|
[({[<([[{<[{{(()[])<[]{}>}<[{}<>>{[][]}>}(<<[]{}>([]<>)>[([]){()[]}])]<[[[[]()][<>{}]]<(<>{})((
|
||||||
|
<{[[{{{[([([{[<>()]{[]{}}}<{[][]}[<>()]>](<<<><>>{()()}>))<<{{<><>}[{}()]}{(<><>)[<>{}]}>>])]{[<<[<([]
|
||||||
|
[[(<<<({[(((([<>()]([]{}))((<>){[]()})})[[<[[]<>]<{}<>>>[<()()>[()<>]]][[[<>{}]{[][]}]]])<<(({{}[
|
||||||
|
{{{[[<<{{[{<[[{}()]]>[{[<>[]]([][])}<{{}()}{{}[]}>]}([[{()}{(){}}]([<>{}]<{}<>>)][{{[]<>}}[{{}{}}[{
|
||||||
|
{[{[(<{{([{<<<[][]><()<>>>[{{}()}{[]<>}]>({<{}()>[()[]]}<<()[]>([][])>)}{[([[]{}][<><>]){{{}[]}<
|
||||||
|
{[({<{[<{{[(({()<>}({}[]))([()]{<>[]}))({{[]{}}<<>[]>>)]{((<()[]>{(){}})[{[]<>}])}}}<[[<<<(){}><()
|
||||||
|
[[[[[{{[{<<[<<{}<>>>{<()()><{}[]>}]>(<([()<>}<<>[]>)(((){})<()[]>)><({{}{}}<[]()>)<{{}<>}(
|
||||||
|
{{<<[<{(<[([(<{}<>>[[][]])[(()())]]{[([][])({}<>)]<(<>{}){[][]}>})([{(<>{})<()<>>}])]>(([[[(<>{})](<[]
|
||||||
|
<<([{<(<{({<{({}<>)<()()>}{<<>[]>[{}{}]}>(<((){})>(<[]()>[<><>]))}<<(([])[()])<([][])(()<>)>>>)([{([<>{}]([]<
|
||||||
|
{[[{{[[({{[([{<>[]}[{}[]]]){(<[]{}>[()()]){[<>{}][<>]>}]}{<{<<{}()>({}())>}{[[<>[]]{<>{}}]<[{}[]]{{}{}}>}
|
||||||
|
{<[[{({<{<[<(<(){}><<>{}>)>{[[(){}]]{({}())({}[])}}]{[{{(){}}}]}>}(<{{{([]{})[{}<>]}(<<>{}>)}(
|
||||||
|
<[[<(<([[({(<{<>()}([][])><(<>[])[<>{}]>)((<<>()>[[]()])<{()<>}<()()>>)}>[[({{{}<>}[[]<>]}
|
||||||
|
<{([{({[[({([[{}()]<()()>][<()[]>[[]<>]]}([<(){}>{<><>}][<{}<>><<>{}>])}[(([<>[]][<>[]])){
|
||||||
|
<{[<(<(<[[[{[{<>{}}]((())({}()))}][(([{}<>]{{}{}}))[{[[]()]((){})}<[<>[]]([][])>]]]][[((({
|
||||||
|
({[<<([[[<[[<(<>{}){{}[]}>[((){})[<><>]]][{{<>{}}{(){}}}(<[]{}}({}<>))]]{((<{}[]>({}<>))<<<>{}>[[]{}]>)[((
|
||||||
|
{[<<[([[([{<<[{}{}]({}[])><<{}<>)(<>[])>>[([()()]{<><>}){[[]{}]{(){}}}]}{<([<>]([]())){<(){}>{()<>}}><<{
|
||||||
|
[<[[[[({{([{{(<>[])<<><>>}<{[]{}}<<>>>}(<{[]{}}<<>()>>)][{(<<><>><()[]>){[{}()]>}<[{{}{}}{<>[]}]>]
|
||||||
|
{<{[<(([{{({[<<>[]><{}[]>]<{<>{}}{()()}>}([<{}{}>{[]<>}]{<{}<>><[]>}))<([([]<>){[]{}}]<{[]<>}
|
||||||
|
[<<(({<<[{[([[<>]<()[]>]{[[]<>]{()<>}}){{<<><>>{[]<>]}[({}<>){()<>}]}](<{{()[]}}({{}[]}<{}[
|
||||||
|
({(<{<{<([([[((){})<{}<>>]<[{}[]](<>{})>])])<<[{<<<>[]>>}<[(<><>){<>{}}][(()[])(<>{})]>]<(<{<>{}}
|
||||||
|
([<{<<[([({<<<()()>(())><[[]<>]{<>[]}>>([(()())]{[[]()]<{}<>>})})[<[[(()<>){<>{}}]][<(<><>){<>[]}>]><<([{}
|
||||||
|
([[<[[[({[<<[[{}()](()<>)]<{()[]}>>{<[{}<>]<()[]>><<[][]>>}>]<(<<[{}<>){<>}>{<[]()>[[][]]}>)>}({
|
||||||
|
(<[(<[([<{<{<[(){}][<>()]><(<>())(()<>)>}{{[{}>([]<>)}[<<>{}>(()())]}>[{([<><>]<()()>)}{([()]{()<
|
||||||
|
({{{{<[{{<{<<(()[])>{[(){}]{[]{}}}>}{{([<><>][<><>])<(()<>)[[][]]>}<<(()<>)><{<>()}>>}>}}][(<{(<[{<><>}[{}[
|
||||||
|
<{[{((([({{({<()()>(())}){([()<>]((){}))<(()<>)[(){}]>}}{[{([]())((){})}[{[]<>>{<>{}}]]<<<()[]><()<>>>((()()
|
||||||
|
{([({[(<[<([{[<>[]][()<>]}{[(){}]{{}<>}}][<<{}()>>[<<>()>[()}]])<((({}{})[[]<>]))<{[[]{}]([]<>)}>>><{
|
||||||
|
([[[{<[<([{(<<<>()>({}<>)><[<>{}]>)[[<<><>><()[]>](<()<>>(<>[]))]}([({()()}([]())){<[]{}>[[]<>]}][<
|
||||||
|
<<((<({{(<((<({}[])(<>())>{({}[])({}<>)}))<<<([]<>)[()[]]>{<()<>>[[]<>]}>>)({(<[<>{}]((){})><{()()}[{}(
|
||||||
|
{({([(({{<{{{<[]()>{{}[]})[[(){}](()<>)]}(([[]{}]{()<>}))}>{(<[{()()}]{[<>[]][()()]}>{{<()()
|
||||||
|
{[(<{<[<<[{<<<<>{}>>[[[]{}]<<>()>]>((<[]{}>{{}()}))}{({[{}()](()<>)}<<[][]>[{}<>]>)({[{}[]]}<<{}[]
|
||||||
|
{{{<{<{[[{([{{[]()}}({()[]}(<>))]<((<><>)({}{}))>)}]]{[({<(<{}[]>{<>{}})((()<>)([]()))>})[<[[{<>{}}<<><>>]<{<
|
||||||
|
[[<{<<[(<<<([<{}()>[{}()]](<{}[]>[{}()]))[([[]<>][{}{}])[<[]()><[]()>]]><[[[[]<>]({}{})][{[]}{<>[]}]][<[<>
|
||||||
|
(<<<<(<<[<[(({[]()}[[]<>]))({(())(()[])}[<<>[]>{()[]}])]{<({{}{}}(<>{}))><[[<>[]]<[]()>]>}>{({{(<>()){
|
||||||
|
<<(<[(<<<{({[<()>{()()}][([]{})([][])]}{({{}}{<>{}})<(())[{}()]>})}[[{<[[][]]{()}){[{}<>]<{}(
|
||||||
|
<<{<{{[<[(({({[][]}<<><>>)}<((<><>)[{}[]])<<[]<>>>>)[{{[()[]][[]<>]}{({}())<(){}>}}])({[([[]<>](<><>))<
|
||||||
|
<<{<[(<(<([[{{()()}{<>()}}(<<>()>({}[]))]<<{{}{}}{()<>}>(({})(()()))>])[[([(<>[])(<>)](<(){
|
||||||
|
({[((({[([<{[{<><>}[()[]]][{[][]}{(){}}]>>(<{{[]{}}<()[]>}<{()<>}<[]()>>>[{({}<>)<{}()>}])])]<(<{{{<[]()
|
||||||
|
<[{<<{<<{<(({[<><>]{{}<>}})){<[{<>[]}({}{})]([{}()]{<>()})>[<{<><>}<<>{}>}([<>[]]<[]()>)]}>(
|
||||||
|
(<<(({<<(<(({[<>[]]<[][]>}({<>()}[[]()])){((<>[])){([]{}){[][]}}}){{[[[]{}][{}[]]][<{}[]>([]<>)]}[(({
|
||||||
|
<(<(<<<[<{({([<>()])[[[][]]{<>[]}]}[<[()]<{}<>>><[(){}]<()()>>])((<(()[])<{}{})>)((([][]))))}>]<[<([[<<>()
|
||||||
|
{{<[<<<{((([[([]{})][[<>[]]]])(<[[(){}]<<>[]>]>{[({}())([]<>)][<<>{}><[]()>]}))){{<[[[[][]
|
||||||
|
{([<{[<<[{({({<>{}}[[][]])[{(){}}{{}()}]}[[[{}()]<()()>]])({<[{}{}]>({{}{}}[[]{}])}{{({}())<()()>}{{<><>}<[]
|
||||||
|
[<{[{<{{<{<[{{{}{}}[[]()]}([{}[]]<{}()>)](<{()()}{<>[]}><(<>[])>)>}{{{((()<>)[<><>])[[()()]
|
||||||
|
([{[<[({([<<<([][])<{}{}>>[[()<>](<>{})]>{{({}<>)}([<><>]<()<>>)}>](<(<<[]<>>({}[])>[<<>{}>[()()]])(<<()[]>((
|
||||||
|
(<[{<({<([<({<<>()><{}()>}(<[]{}>({}<>)))[([[]()][<><>>){[<>[]]{{}<>}}]>({[{[]{}}({}[])]<{[
|
||||||
|
<<[<(<({<(<({<()><[]()>})>{[{[[]()]<{}>}<(()<>)(<>())>)(((()())[<><>])([(){}]))})([(<{<>()}([]())>{[{}{
|
||||||
|
[{<{<{<[<((({[()[]]{{}}}[[<><>]<<>{}>])<({[][]}{()[]})<([]())([]{})>>))((<([{}<>]{(){}})>[
|
||||||
|
[[[[([<{[[(<{{{}[]}[<>()]}<{[]}{<><>}>><{({}<>){()<>}}[{[]{}}{<>[]}]>)[([({}<>}([]<>)]{{{}{}
|
||||||
|
<{{[[<{[(({({<{}>[(){}]}(<[]()>))}<<<[{}{}]>(<[]{}>(<>[]))>([{{}<>}(()())]<{<><>}{<>()}>)>)<[<<
|
||||||
|
{[{{{(<<([([((()[])[[]<>])({{}{}}({}<>))]<({{}[]}{[][]})<{[][]}>>){<<({})[[]<>]>(<[][]>(<>{}))>}]<[
|
||||||
|
<[<(<{<[([[[{[()[]][<>{}]}[{(){}}{<><>}]]{<([]{}){()<>}>[({}<>)<<>[]>]}][<[({}[]){()[]}][<<>{}><()<>>]>]]<(
|
||||||
|
([<{(([[<<{([([]{})([]())]<{(){}}{[]<>}>)([<<>{}>[()()]]{[[]{}]<[]<>>})}[({{()()}<<>{}>>){[<()
|
||||||
|
([({{{[[[([{<{<><>}{()()}>(<[]())[<>])}{([<><>]<(){}>){(<>())[{}()]}}]<{[[<><>]{{}[]}]([{}<>]{[]()
|
||||||
|
[[<<<{{({[{[({{}{}}<(){}>)<[[]{}]({}<>)>]}][(<{<<>{}>}{{[]{}}{()[]}}>[{[<>{}]<[][]>}<{<><>
|
||||||
|
[([{(([{(([{[{[]()}[{}]][[[]<>]{<>{}}]}{[<{}{}>({}[])][<<><>>(()<>)]}]{<({[]{}}{<>{}}}>}){
|
||||||
|
(<<<<<[{<{({({[]{}}({}())){([][])[{}{}]}}([{<><>}{{}{}}][[{}[]]({}{})]))[[[{{}()}[<>{}]][{{}<>}{()}]
|
||||||
|
(([{<(<[(<{{{[[]<>](<>[])}{[()<>]<()()>}}}>)<{{({<{}<>>[{}{}]}({<>[]}[()()]))}([([<>[]][[]{}])(<<><>
|
||||||
|
((<{[(([{{([<[<>()]<<>[]>>{((){})([])}][<{[]()}<<>()>>(<{}()>(<>))])}[{{{{[]()}}{(<>[])[()<
|
||||||
|
<[[{{[<<({[<<{(){}}{(){}}>>(<{[]<>}<<>()>>({()<>}{{}<>}))]{[([[][]][{}<>])][((<>{})(()[]))[<()[]>{<>()}]]}
|
||||||
|
{<{<<[{[([{{{{{}()}<()<>>}<[()[]]>}<[<[]<>><()<>>](({}())<{}>)>}<<({[]()}(()()))({{}<>}{{}<>
|
||||||
|
{{[<{[<{[[{{({[]<>}<{}[]>)((<>{})({}{}))}([[[]{}]<{}[]>]<({}()){()<>}>)}[<([{}<>}<<><>>)><{[()[]][<>[]]}{
|
||||||
|
([{{{[{(<<<[<{<>[]}{()[]}>(([]())<<>{}>)]>[[(<{}()><[]<>>)][{[[][]]<(){}>}<<()()>({}[])>)]>>)<<[[(<(<>())((
|
||||||
|
<({[{{(({(<<<{[]()}(<>{})>{(()<>)[[]<>]}><[[<>()]]{([]{})[[]()]}>>)})({[{<(<[]<>>{{}[]])[<<>{}>[(){}]]><(({}(
|
||||||
|
((<(([{([{<[{<[]()>(()[])}<({})[<>[]]>]>}]{[<<{[[]()]<<>()>)<<{}[]>{<><>}>>>[[([(){}](<>[]))]{{<
|
||||||
|
[([<<([(<[<<([[]{}]<(){}>)([()[]][{}{}])>([([]<>)<(){}>]([[][]]{[]<>}))>{{[{[]<>}[{}[]]]{([]
|
||||||
|
[<{<[[<{<({<[<()<>><[]<>>][<{}<>><<>()>]><{((){})(()())}>}{[([{}<>]({}{})){(<>{})}]([[<><>](<>)])})><{<{
|
||||||
|
[(<[[<({{<<([<(){}><<><>}]<<{}()>({}<>)>){[(<>())[(){}]]<<<><>>[{}<>]>}><{[{(){}}][<{}{}>[()(
|
||||||
|
<[<{[{{<([{<[{()<>}{()<>}]]{<[{}<>](<>{})>([{}<>]{{}()})}}<[([(){}](()[]))<{{}{}}>]{{{<>}<[
|
||||||
|
(<{[[{[[{[[(<[[][]][<>{}]>(<()<>>(<>{})))[{([]{}}<{}[]>}[[[]{}]{()()}]]]{<[<<>{}>(()<>)]<{{}<>}<[
|
||||||
|
(<<<[[(<{<({{(<>())<(){}>}<(()())<()[]>>}<[({}{})[()[]]]>)>}{<{[<[()<>][<>[]]>[([]{})(()())]][({{}{}}
|
||||||
|
({({[[[(<<[{<<<>[]][{}()]>(({}())([]()))}]{<{[()[]]({}())}>({<()[]><[]{}>}[{<>()}<[]{}>])}>>)]]]}[({[[{({(((
|
||||||
|
((([[<{[(<({<{<><>}[[]]>[{(){}}>}((<()<>>{()()})<<<>()>({}())>))((([<>()]{[][]})[[(){}]<{}
|
||||||
|
<[{([(<[({[[([{}()]({}{}))([<><>]({}()))](({(){}}{()[]}><[[]()]<<><>>>)](<([(){}][{}{}])[{
|
||||||
|
{<((({<((<[[<{()[]}<{}{}>>](<<[]>{<>}><[[]{}]({})>)]<<{[{}{}]}[{<>{}}}>>><(([<<>>(()())]<(
|
||||||
|
{[[[<<(<{(<(<[{}<>]<[]()>>[{{}{}}{()<>}])[<{{}()}{{}{}}><{[]<>}({}())>]>)<<(<<()<>><<><>>>)>>}[(
|
||||||
|
[<{<[([({([[[{{}()}{{}()}]([[]()])]])}<<<[<<<>{}>[<><>)><{[]<>}(()<>)>](({{}<>}[()<>]){{<>[]}((){})})>({(
|
||||||
|
([[{{[[[<(<({(()())<{}[]>}<({}<>){[][]}>)[<{()()}[[]<>]>]>)([[({<>[]}[()()])[{[]<>}[{}{}]]][[<
|
||||||
|
({[(<<<{((<{<[()()][[]<>]>{<{}<>><()()>}}<{[()[]]([]<>)}<<{}()><{}{}>>>>[<<{(){}}[()[]]>[([]<
|
||||||
|
([({{{<[{[{{[([]{})<[]{}>][<<>[]>[{}[]]]}}[{[<<><>>{[][]}]((<>()){<>{}})}]]]][[(<({[[]()][[]{}]
|
||||||
|
(((<{{<<<([[{(<><>)<{}>}<{{}{}}[{}<>]>]{[(()())[{}<>}]}]{<(<[]()>)>([<()[]>{{}()}]<({}()){(){}}>)})<[({(<>()
|
||||||
|
[{(([[<(<<(<{<[]()>(<>{})}[{()[]}[()()]]><[<[]()>[[]<>]]>)<{<[[]<>]<()<>>>{[()[]]<{}[]>}}>>([((<[][
|
||||||
|
{<{<{[([(<<[{<()<>>(<>[])}[(<><>)[[]<>]]]<<<[]<>><(){}>>{{{}<>}<<><>>}>>(<{{<>()}[()<>]}><[
|
10
Sources/Runner/Resources/input/10_test.txt
Normal file
10
Sources/Runner/Resources/input/10_test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[({(<(())[]>[[{[]{<()<>>
|
||||||
|
[(()[<>])]({[<{<<[]>>(
|
||||||
|
{([(<{}[<>[]}>{[]{[(<()>
|
||||||
|
(((({<>}<{<{<>}{[]{[]{}
|
||||||
|
[[<[([]))<([[{}[[()]]]
|
||||||
|
[{[{({}]{}}([{[{{{}}([]
|
||||||
|
{<[[]]>}<{[{[{[]{()[[[]
|
||||||
|
[<(<(<(<{}))><([]([]()
|
||||||
|
<{([([[(<>()){}]>(<<{{
|
||||||
|
<{([{{}}[<[[[<>{}]]]>[]]
|
10
Sources/Runner/Resources/input/11.txt
Normal file
10
Sources/Runner/Resources/input/11.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
5251578181
|
||||||
|
6158452313
|
||||||
|
1818578571
|
||||||
|
3844615143
|
||||||
|
6857251244
|
||||||
|
2375817613
|
||||||
|
8883514435
|
||||||
|
2321265735
|
||||||
|
2857275182
|
||||||
|
4821156644
|
10
Sources/Runner/Resources/input/11_test.txt
Normal file
10
Sources/Runner/Resources/input/11_test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
5483143223
|
||||||
|
2745854711
|
||||||
|
5264556173
|
||||||
|
6141336146
|
||||||
|
6357385478
|
||||||
|
4167524645
|
||||||
|
2176841721
|
||||||
|
6882881134
|
||||||
|
4846848554
|
||||||
|
5283751526
|
25
Sources/Runner/Resources/input/12.txt
Normal file
25
Sources/Runner/Resources/input/12.txt
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
start-kc
|
||||||
|
pd-NV
|
||||||
|
start-zw
|
||||||
|
UI-pd
|
||||||
|
HK-end
|
||||||
|
UI-kc
|
||||||
|
pd-ih
|
||||||
|
ih-end
|
||||||
|
start-UI
|
||||||
|
kc-zw
|
||||||
|
end-ks
|
||||||
|
MF-mq
|
||||||
|
HK-zw
|
||||||
|
LF-ks
|
||||||
|
HK-kc
|
||||||
|
ih-HK
|
||||||
|
kc-pd
|
||||||
|
ks-pd
|
||||||
|
MF-pd
|
||||||
|
UI-zw
|
||||||
|
ih-NV
|
||||||
|
ks-HK
|
||||||
|
MF-kc
|
||||||
|
zw-NV
|
||||||
|
NV-ks
|
7
Sources/Runner/Resources/input/12_test.txt
Normal file
7
Sources/Runner/Resources/input/12_test.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
start-A
|
||||||
|
start-b
|
||||||
|
A-c
|
||||||
|
A-b
|
||||||
|
b-d
|
||||||
|
A-end
|
||||||
|
b-end
|
812
Sources/Runner/Resources/input/13.txt
Normal file
812
Sources/Runner/Resources/input/13.txt
Normal file
@ -0,0 +1,812 @@
|
|||||||
|
726,774
|
||||||
|
246,695
|
||||||
|
579,249
|
||||||
|
691,724
|
||||||
|
246,820
|
||||||
|
738,887
|
||||||
|
1088,75
|
||||||
|
264,887
|
||||||
|
704,775
|
||||||
|
907,625
|
||||||
|
676,117
|
||||||
|
507,658
|
||||||
|
1009,24
|
||||||
|
547,735
|
||||||
|
157,126
|
||||||
|
599,113
|
||||||
|
445,226
|
||||||
|
363,691
|
||||||
|
918,794
|
||||||
|
927,113
|
||||||
|
999,400
|
||||||
|
443,305
|
||||||
|
654,729
|
||||||
|
408,767
|
||||||
|
1066,863
|
||||||
|
1148,473
|
||||||
|
321,35
|
||||||
|
1093,803
|
||||||
|
1044,718
|
||||||
|
202,889
|
||||||
|
262,164
|
||||||
|
378,541
|
||||||
|
619,662
|
||||||
|
1034,849
|
||||||
|
432,595
|
||||||
|
1145,656
|
||||||
|
1295,668
|
||||||
|
1125,705
|
||||||
|
1161,529
|
||||||
|
759,619
|
||||||
|
1170,147
|
||||||
|
688,742
|
||||||
|
328,729
|
||||||
|
718,439
|
||||||
|
935,701
|
||||||
|
246,647
|
||||||
|
594,110
|
||||||
|
845,495
|
||||||
|
160,189
|
||||||
|
1225,315
|
||||||
|
580,486
|
||||||
|
469,481
|
||||||
|
440,401
|
||||||
|
584,774
|
||||||
|
897,719
|
||||||
|
1007,516
|
||||||
|
547,159
|
||||||
|
112,117
|
||||||
|
982,645
|
||||||
|
62,439
|
||||||
|
192,441
|
||||||
|
631,211
|
||||||
|
654,16
|
||||||
|
113,698
|
||||||
|
378,865
|
||||||
|
373,19
|
||||||
|
441,777
|
||||||
|
390,7
|
||||||
|
1263,312
|
||||||
|
1121,610
|
||||||
|
509,582
|
||||||
|
893,352
|
||||||
|
44,131
|
||||||
|
1092,19
|
||||||
|
592,719
|
||||||
|
918,100
|
||||||
|
326,820
|
||||||
|
62,719
|
||||||
|
520,889
|
||||||
|
718,103
|
||||||
|
571,579
|
||||||
|
1165,267
|
||||||
|
1208,334
|
||||||
|
525,415
|
||||||
|
268,588
|
||||||
|
769,464
|
||||||
|
596,716
|
||||||
|
734,436
|
||||||
|
1283,747
|
||||||
|
35,457
|
||||||
|
982,94
|
||||||
|
1235,849
|
||||||
|
932,752
|
||||||
|
1265,243
|
||||||
|
262,752
|
||||||
|
99,704
|
||||||
|
547,732
|
||||||
|
1096,829
|
||||||
|
791,329
|
||||||
|
1222,320
|
||||||
|
199,568
|
||||||
|
671,494
|
||||||
|
1079,93
|
||||||
|
569,315
|
||||||
|
129,415
|
||||||
|
868,878
|
||||||
|
788,803
|
||||||
|
1175,889
|
||||||
|
965,676
|
||||||
|
904,660
|
||||||
|
552,560
|
||||||
|
619,484
|
||||||
|
507,236
|
||||||
|
566,768
|
||||||
|
1215,30
|
||||||
|
45,410
|
||||||
|
885,441
|
||||||
|
478,336
|
||||||
|
945,397
|
||||||
|
596,306
|
||||||
|
1145,686
|
||||||
|
189,495
|
||||||
|
1153,126
|
||||||
|
79,444
|
||||||
|
719,403
|
||||||
|
903,91
|
||||||
|
27,105
|
||||||
|
441,329
|
||||||
|
768,565
|
||||||
|
671,400
|
||||||
|
507,205
|
||||||
|
224,390
|
||||||
|
867,753
|
||||||
|
425,441
|
||||||
|
1123,67
|
||||||
|
833,14
|
||||||
|
793,278
|
||||||
|
1237,724
|
||||||
|
238,808
|
||||||
|
1099,32
|
||||||
|
411,243
|
||||||
|
1,574
|
||||||
|
726,120
|
||||||
|
862,441
|
||||||
|
212,94
|
||||||
|
80,199
|
||||||
|
1047,312
|
||||||
|
164,389
|
||||||
|
440,773
|
||||||
|
185,189
|
||||||
|
412,114
|
||||||
|
537,792
|
||||||
|
403,697
|
||||||
|
1208,768
|
||||||
|
408,527
|
||||||
|
1135,831
|
||||||
|
746,826
|
||||||
|
1064,110
|
||||||
|
15,226
|
||||||
|
102,574
|
||||||
|
1001,442
|
||||||
|
769,16
|
||||||
|
1236,408
|
||||||
|
440,121
|
||||||
|
1309,131
|
||||||
|
771,473
|
||||||
|
1064,527
|
||||||
|
189,284
|
||||||
|
427,704
|
||||||
|
276,865
|
||||||
|
986,593
|
||||||
|
1009,870
|
||||||
|
745,276
|
||||||
|
965,291
|
||||||
|
1190,5
|
||||||
|
1084,768
|
||||||
|
313,750
|
||||||
|
976,544
|
||||||
|
1222,658
|
||||||
|
223,619
|
||||||
|
718,791
|
||||||
|
976,574
|
||||||
|
705,822
|
||||||
|
785,863
|
||||||
|
388,390
|
||||||
|
1235,716
|
||||||
|
579,645
|
||||||
|
90,378
|
||||||
|
497,849
|
||||||
|
1308,145
|
||||||
|
658,301
|
||||||
|
648,94
|
||||||
|
1150,189
|
||||||
|
231,129
|
||||||
|
408,639
|
||||||
|
390,119
|
||||||
|
132,556
|
||||||
|
639,220
|
||||||
|
885,453
|
||||||
|
413,651
|
||||||
|
639,68
|
||||||
|
177,544
|
||||||
|
552,782
|
||||||
|
239,130
|
||||||
|
867,645
|
||||||
|
187,67
|
||||||
|
1163,494
|
||||||
|
1227,19
|
||||||
|
249,658
|
||||||
|
132,270
|
||||||
|
740,82
|
||||||
|
73,206
|
||||||
|
1166,525
|
||||||
|
262,506
|
||||||
|
1092,875
|
||||||
|
923,509
|
||||||
|
967,400
|
||||||
|
813,849
|
||||||
|
734,364
|
||||||
|
604,541
|
||||||
|
566,758
|
||||||
|
90,852
|
||||||
|
190,831
|
||||||
|
1047,65
|
||||||
|
313,144
|
||||||
|
542,157
|
||||||
|
720,304
|
||||||
|
129,863
|
||||||
|
1280,149
|
||||||
|
448,441
|
||||||
|
947,484
|
||||||
|
1048,506
|
||||||
|
408,863
|
||||||
|
657,803
|
||||||
|
480,834
|
||||||
|
201,369
|
||||||
|
489,208
|
||||||
|
1275,36
|
||||||
|
1064,784
|
||||||
|
781,845
|
||||||
|
1071,152
|
||||||
|
1251,61
|
||||||
|
455,500
|
||||||
|
564,68
|
||||||
|
758,798
|
||||||
|
922,390
|
||||||
|
443,421
|
||||||
|
505,792
|
||||||
|
60,784
|
||||||
|
1059,645
|
||||||
|
741,315
|
||||||
|
89,164
|
||||||
|
142,637
|
||||||
|
348,705
|
||||||
|
763,735
|
||||||
|
165,686
|
||||||
|
711,781
|
||||||
|
1220,852
|
||||||
|
455,120
|
||||||
|
1205,859
|
||||||
|
1208,413
|
||||||
|
1098,240
|
||||||
|
33,505
|
||||||
|
821,208
|
||||||
|
35,289
|
||||||
|
1251,833
|
||||||
|
1131,226
|
||||||
|
745,730
|
||||||
|
75,625
|
||||||
|
905,75
|
||||||
|
738,7
|
||||||
|
1223,316
|
||||||
|
923,395
|
||||||
|
7,884
|
||||||
|
1153,299
|
||||||
|
552,96
|
||||||
|
1047,134
|
||||||
|
642,266
|
||||||
|
537,698
|
||||||
|
1211,190
|
||||||
|
959,235
|
||||||
|
1235,625
|
||||||
|
711,614
|
||||||
|
510,798
|
||||||
|
73,306
|
||||||
|
47,582
|
||||||
|
657,875
|
||||||
|
468,75
|
||||||
|
638,346
|
||||||
|
144,525
|
||||||
|
612,665
|
||||||
|
917,57
|
||||||
|
1235,402
|
||||||
|
211,249
|
||||||
|
831,63
|
||||||
|
1197,250
|
||||||
|
493,686
|
||||||
|
887,801
|
||||||
|
85,315
|
||||||
|
263,65
|
||||||
|
924,306
|
||||||
|
140,595
|
||||||
|
997,141
|
||||||
|
657,173
|
||||||
|
579,850
|
||||||
|
489,686
|
||||||
|
448,5
|
||||||
|
572,7
|
||||||
|
1248,103
|
||||||
|
445,674
|
||||||
|
711,113
|
||||||
|
1232,884
|
||||||
|
1121,278
|
||||||
|
845,732
|
||||||
|
786,630
|
||||||
|
114,712
|
||||||
|
691,662
|
||||||
|
140,147
|
||||||
|
1088,299
|
||||||
|
408,191
|
||||||
|
897,691
|
||||||
|
92,662
|
||||||
|
904,754
|
||||||
|
1309,621
|
||||||
|
102,768
|
||||||
|
7,10
|
||||||
|
33,429
|
||||||
|
903,803
|
||||||
|
2,749
|
||||||
|
1083,704
|
||||||
|
157,819
|
||||||
|
325,91
|
||||||
|
830,386
|
||||||
|
763,284
|
||||||
|
175,63
|
||||||
|
902,199
|
||||||
|
887,129
|
||||||
|
1285,297
|
||||||
|
1287,683
|
||||||
|
590,304
|
||||||
|
714,716
|
||||||
|
6,686
|
||||||
|
1136,834
|
||||||
|
452,889
|
||||||
|
653,315
|
||||||
|
135,145
|
||||||
|
683,329
|
||||||
|
251,473
|
||||||
|
1110,455
|
||||||
|
959,516
|
||||||
|
1091,838
|
||||||
|
407,220
|
||||||
|
654,800
|
||||||
|
549,239
|
||||||
|
765,355
|
||||||
|
113,250
|
||||||
|
771,93
|
||||||
|
194,270
|
||||||
|
864,803
|
||||||
|
517,417
|
||||||
|
345,291
|
||||||
|
253,724
|
||||||
|
365,145
|
||||||
|
522,624
|
||||||
|
692,495
|
||||||
|
830,834
|
||||||
|
1021,301
|
||||||
|
825,595
|
||||||
|
145,890
|
||||||
|
1125,481
|
||||||
|
48,119
|
||||||
|
82,7
|
||||||
|
965,666
|
||||||
|
540,630
|
||||||
|
542,121
|
||||||
|
731,290
|
||||||
|
85,763
|
||||||
|
957,297
|
||||||
|
1277,617
|
||||||
|
1089,239
|
||||||
|
619,612
|
||||||
|
62,175
|
||||||
|
427,190
|
||||||
|
401,724
|
||||||
|
1133,798
|
||||||
|
475,882
|
||||||
|
1062,140
|
||||||
|
246,784
|
||||||
|
1001,515
|
||||||
|
244,31
|
||||||
|
759,171
|
||||||
|
1246,282
|
||||||
|
249,236
|
||||||
|
919,816
|
||||||
|
907,25
|
||||||
|
755,403
|
||||||
|
557,725
|
||||||
|
15,332
|
||||||
|
840,861
|
||||||
|
1031,760
|
||||||
|
965,218
|
||||||
|
813,45
|
||||||
|
440,829
|
||||||
|
885,457
|
||||||
|
45,243
|
||||||
|
351,435
|
||||||
|
191,565
|
||||||
|
984,820
|
||||||
|
715,275
|
||||||
|
689,641
|
||||||
|
289,845
|
||||||
|
575,892
|
||||||
|
605,822
|
||||||
|
1136,508
|
||||||
|
137,278
|
||||||
|
870,513
|
||||||
|
59,621
|
||||||
|
79,539
|
||||||
|
89,276
|
||||||
|
1,621
|
||||||
|
753,725
|
||||||
|
1119,301
|
||||||
|
1,763
|
||||||
|
1159,539
|
||||||
|
1059,25
|
||||||
|
267,843
|
||||||
|
1072,236
|
||||||
|
1203,607
|
||||||
|
425,453
|
||||||
|
62,551
|
||||||
|
788,624
|
||||||
|
576,884
|
||||||
|
326,430
|
||||||
|
345,452
|
||||||
|
539,473
|
||||||
|
1195,337
|
||||||
|
981,432
|
||||||
|
23,683
|
||||||
|
455,394
|
||||||
|
1098,654
|
||||||
|
1118,441
|
||||||
|
1277,429
|
||||||
|
567,625
|
||||||
|
773,698
|
||||||
|
23,459
|
||||||
|
441,464
|
||||||
|
870,488
|
||||||
|
567,269
|
||||||
|
517,399
|
||||||
|
935,302
|
||||||
|
436,875
|
||||||
|
309,442
|
||||||
|
900,191
|
||||||
|
1277,277
|
||||||
|
1310,165
|
||||||
|
383,781
|
||||||
|
149,792
|
||||||
|
492,578
|
||||||
|
88,658
|
||||||
|
736,500
|
||||||
|
103,275
|
||||||
|
731,44
|
||||||
|
720,794
|
||||||
|
1278,600
|
||||||
|
981,462
|
||||||
|
1020,623
|
||||||
|
329,462
|
||||||
|
333,483
|
||||||
|
977,880
|
||||||
|
1181,863
|
||||||
|
509,890
|
||||||
|
846,831
|
||||||
|
246,527
|
||||||
|
570,754
|
||||||
|
841,481
|
||||||
|
78,884
|
||||||
|
1231,355
|
||||||
|
618,47
|
||||||
|
413,719
|
||||||
|
850,786
|
||||||
|
174,386
|
||||||
|
364,175
|
||||||
|
1193,196
|
||||||
|
162,421
|
||||||
|
221,239
|
||||||
|
373,875
|
||||||
|
718,7
|
||||||
|
1231,539
|
||||||
|
1218,662
|
||||||
|
333,868
|
||||||
|
885,9
|
||||||
|
30,149
|
||||||
|
1299,511
|
||||||
|
227,190
|
||||||
|
1197,698
|
||||||
|
1150,705
|
||||||
|
657,238
|
||||||
|
783,717
|
||||||
|
1159,383
|
||||||
|
212,688
|
||||||
|
241,719
|
||||||
|
618,495
|
||||||
|
1232,458
|
||||||
|
985,432
|
||||||
|
27,75
|
||||||
|
918,506
|
||||||
|
328,800
|
||||||
|
145,582
|
||||||
|
387,395
|
||||||
|
90,516
|
||||||
|
1019,773
|
||||||
|
334,574
|
||||||
|
1285,149
|
||||||
|
716,558
|
||||||
|
413,236
|
||||||
|
353,477
|
||||||
|
607,193
|
||||||
|
845,844
|
||||||
|
874,875
|
||||||
|
1099,648
|
||||||
|
264,63
|
||||||
|
99,491
|
||||||
|
263,312
|
||||||
|
303,67
|
||||||
|
463,565
|
||||||
|
433,239
|
||||||
|
902,527
|
||||||
|
132,355
|
||||||
|
1300,550
|
||||||
|
606,119
|
||||||
|
291,849
|
||||||
|
25,86
|
||||||
|
301,865
|
||||||
|
1046,831
|
||||||
|
805,102
|
||||||
|
408,598
|
||||||
|
1101,693
|
||||||
|
1215,864
|
||||||
|
947,691
|
||||||
|
64,730
|
||||||
|
1237,170
|
||||||
|
970,628
|
||||||
|
1136,60
|
||||||
|
947,730
|
||||||
|
334,544
|
||||||
|
1149,686
|
||||||
|
1009,198
|
||||||
|
691,282
|
||||||
|
691,457
|
||||||
|
378,142
|
||||||
|
599,614
|
||||||
|
648,320
|
||||||
|
507,400
|
||||||
|
1178,803
|
||||||
|
478,558
|
||||||
|
267,51
|
||||||
|
279,701
|
||||||
|
965,452
|
||||||
|
691,232
|
||||||
|
401,170
|
||||||
|
219,838
|
||||||
|
1292,413
|
||||||
|
296,373
|
||||||
|
246,127
|
||||||
|
446,91
|
||||||
|
894,86
|
||||||
|
115,480
|
||||||
|
1287,155
|
||||||
|
433,655
|
||||||
|
263,134
|
||||||
|
87,630
|
||||||
|
965,403
|
||||||
|
107,623
|
||||||
|
189,610
|
||||||
|
330,749
|
||||||
|
1121,271
|
||||||
|
965,603
|
||||||
|
135,749
|
||||||
|
1059,473
|
||||||
|
328,165
|
||||||
|
27,147
|
||||||
|
443,134
|
||||||
|
1210,320
|
||||||
|
1211,470
|
||||||
|
415,824
|
||||||
|
835,882
|
||||||
|
405,819
|
||||||
|
957,870
|
||||||
|
493,721
|
||||||
|
1246,164
|
||||||
|
935,591
|
||||||
|
895,824
|
||||||
|
264,455
|
||||||
|
99,470
|
||||||
|
408,296
|
||||||
|
803,400
|
||||||
|
1084,126
|
||||||
|
1135,63
|
||||||
|
835,46
|
||||||
|
830,60
|
||||||
|
653,721
|
||||||
|
1104,453
|
||||||
|
525,863
|
||||||
|
102,334
|
||||||
|
1235,45
|
||||||
|
870,121
|
||||||
|
375,591
|
||||||
|
60,336
|
||||||
|
348,880
|
||||||
|
895,600
|
||||||
|
517,477
|
||||||
|
427,526
|
||||||
|
100,551
|
||||||
|
37,301
|
||||||
|
477,880
|
||||||
|
0,94
|
||||||
|
383,390
|
||||||
|
266,718
|
||||||
|
212,240
|
||||||
|
634,329
|
||||||
|
291,493
|
||||||
|
976,320
|
||||||
|
751,30
|
||||||
|
1119,593
|
||||||
|
443,753
|
||||||
|
1099,645
|
||||||
|
79,450
|
||||||
|
189,278
|
||||||
|
358,745
|
||||||
|
870,355
|
||||||
|
1064,820
|
||||||
|
353,597
|
||||||
|
770,630
|
||||||
|
157,75
|
||||||
|
22,371
|
||||||
|
214,493
|
||||||
|
465,726
|
||||||
|
1205,655
|
||||||
|
740,469
|
||||||
|
125,49
|
||||||
|
1019,849
|
||||||
|
735,556
|
||||||
|
1148,421
|
||||||
|
832,336
|
||||||
|
803,338
|
||||||
|
848,441
|
||||||
|
946,175
|
||||||
|
301,149
|
||||||
|
115,305
|
||||||
|
528,215
|
||||||
|
6,208
|
||||||
|
6,320
|
||||||
|
691,410
|
||||||
|
238,658
|
||||||
|
16,346
|
||||||
|
735,892
|
||||||
|
689,725
|
||||||
|
661,320
|
||||||
|
1136,386
|
||||||
|
1153,810
|
||||||
|
363,730
|
||||||
|
326,464
|
||||||
|
321,819
|
||||||
|
885,885
|
||||||
|
1048,388
|
||||||
|
425,9
|
||||||
|
127,809
|
||||||
|
656,16
|
||||||
|
599,280
|
||||||
|
74,408
|
||||||
|
387,509
|
||||||
|
73,724
|
||||||
|
293,877
|
||||||
|
557,687
|
||||||
|
656,878
|
||||||
|
1304,320
|
||||||
|
1034,865
|
||||||
|
704,119
|
||||||
|
126,663
|
||||||
|
141,656
|
||||||
|
914,859
|
||||||
|
1230,647
|
||||||
|
340,266
|
||||||
|
33,501
|
||||||
|
1262,352
|
||||||
|
505,344
|
||||||
|
1283,105
|
||||||
|
1198,289
|
||||||
|
855,500
|
||||||
|
574,871
|
||||||
|
540,598
|
||||||
|
465,844
|
||||||
|
1210,343
|
||||||
|
825,96
|
||||||
|
290,623
|
||||||
|
174,508
|
||||||
|
132,539
|
||||||
|
867,93
|
||||||
|
1101,201
|
||||||
|
392,142
|
||||||
|
472,126
|
||||||
|
552,320
|
||||||
|
631,739
|
||||||
|
867,473
|
||||||
|
763,758
|
||||||
|
467,67
|
||||||
|
251,269
|
||||||
|
1273,301
|
||||||
|
619,282
|
||||||
|
1148,130
|
||||||
|
801,4
|
||||||
|
566,136
|
||||||
|
1098,94
|
||||||
|
1274,47
|
||||||
|
333,411
|
||||||
|
401,82
|
||||||
|
48,352
|
||||||
|
1230,522
|
||||||
|
907,269
|
||||||
|
870,829
|
||||||
|
631,683
|
||||||
|
406,660
|
||||||
|
440,488
|
||||||
|
800,798
|
||||||
|
244,765
|
||||||
|
657,768
|
||||||
|
662,94
|
||||||
|
33,465
|
||||||
|
785,415
|
||||||
|
83,450
|
||||||
|
1159,355
|
||||||
|
653,686
|
||||||
|
392,730
|
||||||
|
417,352
|
||||||
|
691,829
|
||||||
|
902,598
|
||||||
|
947,282
|
||||||
|
242,469
|
||||||
|
135,301
|
||||||
|
174,834
|
||||||
|
816,189
|
||||||
|
914,894
|
||||||
|
671,562
|
||||||
|
460,786
|
||||||
|
1079,765
|
||||||
|
125,525
|
||||||
|
213,430
|
||||||
|
480,60
|
||||||
|
1086,390
|
||||||
|
1111,809
|
||||||
|
375,302
|
||||||
|
1227,390
|
||||||
|
1072,684
|
||||||
|
343,494
|
||||||
|
443,473
|
||||||
|
904,234
|
||||||
|
485,45
|
||||||
|
1285,86
|
||||||
|
977,299
|
||||||
|
758,782
|
||||||
|
242,425
|
||||||
|
460,718
|
||||||
|
37,593
|
||||||
|
730,486
|
||||||
|
559,877
|
||||||
|
505,102
|
||||||
|
401,812
|
||||||
|
231,254
|
||||||
|
403,269
|
||||||
|
493,238
|
||||||
|
1181,479
|
||||||
|
189,29
|
||||||
|
545,355
|
||||||
|
264,439
|
||||||
|
547,60
|
||||||
|
900,695
|
||||||
|
689,393
|
||||||
|
1079,254
|
||||||
|
408,199
|
||||||
|
846,383
|
||||||
|
1223,630
|
||||||
|
1121,284
|
||||||
|
345,666
|
||||||
|
441,117
|
||||||
|
237,800
|
||||||
|
191,525
|
||||||
|
1066,255
|
||||||
|
552,768
|
||||||
|
639,494
|
||||||
|
798,705
|
||||||
|
1004,189
|
||||||
|
1169,861
|
||||||
|
686,745
|
||||||
|
1121,29
|
||||||
|
554,126
|
||||||
|
1277,465
|
||||||
|
977,432
|
||||||
|
711,399
|
||||||
|
12,628
|
||||||
|
|
||||||
|
fold along x=655
|
||||||
|
fold along y=447
|
||||||
|
fold along x=327
|
||||||
|
fold along y=223
|
||||||
|
fold along x=163
|
||||||
|
fold along y=111
|
||||||
|
fold along x=81
|
||||||
|
fold along y=55
|
||||||
|
fold along x=40
|
||||||
|
fold along y=27
|
||||||
|
fold along y=13
|
||||||
|
fold along y=6
|
21
Sources/Runner/Resources/input/13_test.txt
Normal file
21
Sources/Runner/Resources/input/13_test.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
6,10
|
||||||
|
0,14
|
||||||
|
9,10
|
||||||
|
0,3
|
||||||
|
10,4
|
||||||
|
4,11
|
||||||
|
6,0
|
||||||
|
6,12
|
||||||
|
4,1
|
||||||
|
0,13
|
||||||
|
10,12
|
||||||
|
3,4
|
||||||
|
3,0
|
||||||
|
8,4
|
||||||
|
1,10
|
||||||
|
2,14
|
||||||
|
8,10
|
||||||
|
9,0
|
||||||
|
|
||||||
|
fold along y=7
|
||||||
|
fold along x=5
|
102
Sources/Runner/Resources/input/14.txt
Normal file
102
Sources/Runner/Resources/input/14.txt
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
FNFPPNKPPHSOKFFHOFOC
|
||||||
|
|
||||||
|
VS -> B
|
||||||
|
SV -> C
|
||||||
|
PP -> N
|
||||||
|
NS -> N
|
||||||
|
BC -> N
|
||||||
|
PB -> F
|
||||||
|
BK -> P
|
||||||
|
NV -> V
|
||||||
|
KF -> C
|
||||||
|
KS -> C
|
||||||
|
PV -> N
|
||||||
|
NF -> S
|
||||||
|
PK -> F
|
||||||
|
SC -> F
|
||||||
|
KN -> K
|
||||||
|
PN -> K
|
||||||
|
OH -> F
|
||||||
|
PS -> P
|
||||||
|
FN -> O
|
||||||
|
OP -> B
|
||||||
|
FO -> C
|
||||||
|
HS -> F
|
||||||
|
VO -> C
|
||||||
|
OS -> B
|
||||||
|
PF -> V
|
||||||
|
SB -> V
|
||||||
|
KO -> O
|
||||||
|
SK -> N
|
||||||
|
KB -> F
|
||||||
|
KH -> C
|
||||||
|
CC -> B
|
||||||
|
CS -> C
|
||||||
|
OF -> C
|
||||||
|
FS -> B
|
||||||
|
FP -> H
|
||||||
|
VN -> O
|
||||||
|
NB -> N
|
||||||
|
BS -> H
|
||||||
|
PC -> H
|
||||||
|
OO -> F
|
||||||
|
BF -> O
|
||||||
|
HC -> P
|
||||||
|
BH -> S
|
||||||
|
NP -> P
|
||||||
|
FB -> C
|
||||||
|
CB -> H
|
||||||
|
BO -> C
|
||||||
|
NN -> V
|
||||||
|
SF -> N
|
||||||
|
FC -> F
|
||||||
|
KK -> C
|
||||||
|
CN -> N
|
||||||
|
BV -> F
|
||||||
|
FK -> C
|
||||||
|
CF -> F
|
||||||
|
VV -> B
|
||||||
|
VF -> S
|
||||||
|
CK -> C
|
||||||
|
OV -> P
|
||||||
|
NC -> N
|
||||||
|
SS -> F
|
||||||
|
NK -> V
|
||||||
|
HN -> O
|
||||||
|
ON -> P
|
||||||
|
FH -> O
|
||||||
|
OB -> H
|
||||||
|
SH -> H
|
||||||
|
NH -> V
|
||||||
|
FF -> B
|
||||||
|
HP -> B
|
||||||
|
PO -> P
|
||||||
|
HB -> H
|
||||||
|
CH -> N
|
||||||
|
SN -> P
|
||||||
|
HK -> P
|
||||||
|
FV -> H
|
||||||
|
SO -> O
|
||||||
|
VH -> V
|
||||||
|
BP -> V
|
||||||
|
CV -> P
|
||||||
|
KP -> K
|
||||||
|
VB -> N
|
||||||
|
HV -> K
|
||||||
|
SP -> N
|
||||||
|
HO -> P
|
||||||
|
CP -> H
|
||||||
|
VC -> N
|
||||||
|
CO -> S
|
||||||
|
BN -> H
|
||||||
|
NO -> B
|
||||||
|
HF -> O
|
||||||
|
VP -> K
|
||||||
|
KV -> H
|
||||||
|
KC -> F
|
||||||
|
HH -> C
|
||||||
|
BB -> K
|
||||||
|
VK -> P
|
||||||
|
OK -> C
|
||||||
|
OC -> C
|
||||||
|
PH -> H
|
18
Sources/Runner/Resources/input/14_test.txt
Normal file
18
Sources/Runner/Resources/input/14_test.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
NNCB
|
||||||
|
|
||||||
|
CH -> B
|
||||||
|
HH -> N
|
||||||
|
CB -> H
|
||||||
|
NH -> C
|
||||||
|
HB -> C
|
||||||
|
HC -> B
|
||||||
|
HN -> C
|
||||||
|
NN -> C
|
||||||
|
BH -> H
|
||||||
|
NC -> B
|
||||||
|
NB -> B
|
||||||
|
BN -> B
|
||||||
|
BB -> N
|
||||||
|
BC -> B
|
||||||
|
CC -> N
|
||||||
|
CN -> C
|
100
Sources/Runner/Resources/input/15.txt
Normal file
100
Sources/Runner/Resources/input/15.txt
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
4644191171337732143712186124233573969322319997149343221542323211321212169142231235619969739483792471
|
||||||
|
2221293392911371411593639962951141752813313921357129613938931533621918583683134152965492646642538116
|
||||||
|
2795791297555313411382761825567331471819212315341825911232943151936415218119321513121916912261697597
|
||||||
|
1214537613992125712382233916937264885938549131332876391646112221213144242126287714516436119191917362
|
||||||
|
1412811515321221111439182464221331329974283623974241113548427128422112192118983384463232121843121141
|
||||||
|
3245255675412351991191259591561111991221265214221291175137165299373379821323142951719393624496355173
|
||||||
|
7821636439137114454815234184431131151885565811162122141111291739141236111319913333811111656913241523
|
||||||
|
1418191421242372241523343828141122624329116111754397113548982293191411111144261229944124833111847376
|
||||||
|
1415223811928588114168213319591148928517427169381184991691112118229218263638951854741122722159931213
|
||||||
|
1185112211216296846141231621592158511243111111346117648971911331811279689234291837116151264761299521
|
||||||
|
2157175132842918592376386235452686111324627214122733298544113111534712212591393262313832165437912113
|
||||||
|
1116112493319299432145649149992697711725421154424224312213396977142985512232427326338299642149836196
|
||||||
|
6549229499212395113283291496151231611431251843344129142294319947252811251219755391642553173113821296
|
||||||
|
4113393621316222283852914519968238256112711138455548538191592324236277743141198979959471862712168221
|
||||||
|
1741128134354414241419176117119212641541117881955126161946213118193312324857619874348283423325548598
|
||||||
|
3751141123712163925113282172764932353534116546231281293118591422522113149152261498874515989313554314
|
||||||
|
4514551971341761251629465312511329291978512148461991612957411327621224192111126296379215871233811481
|
||||||
|
3293217144136116298991343111524616863893234462111723531219141172273261192421911186619159615299151135
|
||||||
|
7774221151285219996117174373446146141833811666627831912921211686311331622326641123291596353856612959
|
||||||
|
1351122214751889195351764143332617127231529144667721221129811142151686112447161472232912114911498432
|
||||||
|
7225121617125257598871963211815844737221578124248727132498851251391513323133165922818784851344161916
|
||||||
|
1112187345141297179198141512813725433119213925696911577227241222816471151855194112221672612468122119
|
||||||
|
1121991355992132552111213132191442529433379222141737721118515814411171128371158391185211772681121151
|
||||||
|
3611317119849285611931216381814841117111553118123151123429121933733781431918246438319192543378241244
|
||||||
|
2216973154335197135211535821482816136121216777138722357726122631253431191217262219637112927427564151
|
||||||
|
5191998411823118893385217392312149124881216981988142455391121911741599925291712131939112984622594162
|
||||||
|
9512532169823462117945393432541745813525811441272984121112552932917817923383181475411441151349226821
|
||||||
|
3411874821911569271324123211326163841991128122341482721111115399651299314699266658849911711231323912
|
||||||
|
7694685861132348951471861817731787685615352753172139744392721512255361251492221911127122613845334296
|
||||||
|
1113697413329171211439739511931411924968888839312278319759419239814972811121854533399269742318264862
|
||||||
|
3261667141191721233392311941113633191795822122212119221174142635691755551245192319949176814814316991
|
||||||
|
2128111325114212336337636612529217112293426976253814989893331386522713418281571915911922457712133131
|
||||||
|
8388911376618344994992583184752685539238543959953246364821659122425889299729352751111921721511272199
|
||||||
|
2122155921932542114611151421752127825727141198197413114255419142717265333392684821477226612894862559
|
||||||
|
1951121655921881375819253119554413525181757211271911799915211551299921612352952113953924955851737855
|
||||||
|
8195214285611188396611335793711117151312316188149873422613973825989185924514991359346339783843843334
|
||||||
|
5456833919619253912174733996922156217884375932117373542943268995816113232121789731392898427391181116
|
||||||
|
4777217181611414812166144323146981138677578415811253842294432341423919922422381614691619319263292673
|
||||||
|
1871985126952132273312531611829113511331968253631512251863889446196571436982662319393312117814312223
|
||||||
|
4144118646856288731789179912621365532752715112255935546128459221171311137762973879129462196861223341
|
||||||
|
5331743126787154471212425952845476245991112234222998154272399175132112413123715171136641911131729182
|
||||||
|
6459321122282315131822523312117117212329381828311268157731316333126392285181951389374121861573611883
|
||||||
|
1129519121932136168211173395152156158311198521161721877242125629612171323591229332881655592295117452
|
||||||
|
4341822521595939622189164981116331219261274132118781411796193741169311918311822217877764111699911254
|
||||||
|
4194536129171715722286327511111124828745972271325116713569374751324429292311753151131516413241834449
|
||||||
|
2654142945631129956123367481172912142744199122191626922239395112592217148883514168932621184272178615
|
||||||
|
4157713294921232144519182476441189526311311114777342965936356951743225131121191824416924178512318511
|
||||||
|
6912411821531292292181267613662222516132574199134177394148798111514136319121566731314235317164439911
|
||||||
|
1437321155329217229142678137571111359263414123211224312882335825119927798139832929124119648129273158
|
||||||
|
1732391818138229589491914619358266961163398213919395213291514999415122435132113734813288381419819249
|
||||||
|
4113346921421917866111857654393412952122411689932611554121571489921198684193331141319469559362897418
|
||||||
|
3936181514241719511931294342174121311321234132821683441143221627121222912219121123417289754991212193
|
||||||
|
5231211979311961116116212251613682828181291627731949883315367221227411122625338116897436595199253162
|
||||||
|
2316316823133527186851941188913312213143341419114417621723676119643866413111512137248492799272283874
|
||||||
|
3119192116842719272523136623911313937534137524214481191735181477319325633146114939176412112636323417
|
||||||
|
2492714192521612141248169319193626151911919321234131296181642619511212191466114432116195132659299995
|
||||||
|
8479281136811514162331236428357598113492342253565417152872842112725149934866538744331141447117166111
|
||||||
|
8119623422439216225228196551954272643443171919589198617821835123212386869188415911424183945151334241
|
||||||
|
2441131613411116653297822116736662114797231228699315262527411234919279976921765231169112216112919848
|
||||||
|
3831541198992925558534136856443141276992238182251969817995131132423277612211112197312711991832328931
|
||||||
|
4857223123934311294131922752993114976915557976818181275728832322272499252323121313288171744324765443
|
||||||
|
6288391134124416473924343716745649381453218212143281127971317811511748813199842175114288225452114924
|
||||||
|
2198193117421166796123194192539312141215519112972453238891813111365441112114115347214113916577619519
|
||||||
|
4829218134763351139297321322168924116121484533211291255719399319238352153167888261311881156385931422
|
||||||
|
1128131518795612511811698671411951513233914459321461852952978173818789621743591166392521464181816178
|
||||||
|
1238497511773695513118432223193651911824333381942211111917892631655191328368558712842618374164192141
|
||||||
|
5197814252643194532182168116535512142118911412974122512425237539834313411221165712489961923581131921
|
||||||
|
5911812939579518465461451173198646171335111185511687173891229811734589488111952535421341871929712588
|
||||||
|
1671651526181764772599923144212312319733142231365158737371635371423522142829181192112264525227179493
|
||||||
|
7421112826829293192119831269314941212923232123538851869151292117144743917691154582417433994491521943
|
||||||
|
9191346716972561945245244324428371279373282126116111451618129133112293262414113689369614111711445421
|
||||||
|
2316166312199999129455391528271939493421961982164811491114318795721435615291362213311318321186121151
|
||||||
|
9931241122891924292311432346646113846761512131981437311511562199358147246719196723818191337753291332
|
||||||
|
1222114361952914555221222296169622784558836751121518966219244215831746229685414172141737963133114493
|
||||||
|
5218313115227314139655246183769219129243229111742851151185617522413973822128342227812919165581163524
|
||||||
|
9291132423113289278354324575153169229992171127124135461837121234526253159331631693469211222922141974
|
||||||
|
8452363325897641925169932431428139199613218111915136812112119111995795222511113131372723121212711118
|
||||||
|
2197227213274819481124191141229711865192112947469114147211523239645218213151193132942921122111792371
|
||||||
|
9275351123144952331922211614314212365538513531132558123126944517881183166133275219943389521111173193
|
||||||
|
1676123311913129662665831191951759436541912564748652528469419649571161712679147469912553225741913996
|
||||||
|
3191353128953131423711131716711282864474834951441111829112836519349724223297611712534725619191814221
|
||||||
|
4173761111187311916392959649155953281454675178259425336991997957211941375122951384157137917823346849
|
||||||
|
6231866821187632943121892433531142499383519821114756411214331534451221651412644522124791217848229112
|
||||||
|
4218513612717224329629361592483513734819131413112231512426831431594336223618413472242122315818213821
|
||||||
|
1672513521112672575721281934545322131861691451188212512246411624946313848511278356324319145934746199
|
||||||
|
7277435215413485681311177121429997231927125112162783124381311646223581365917794813269411132811948118
|
||||||
|
1171256993195581123322244392112531112921826117456633951228891118213977135113912128736772927396511155
|
||||||
|
7513423614827252911431224428129419471913857316347921811289615226221512981231328492565212872149824422
|
||||||
|
4172392667172923414112281271468455913321542234539111143311488844993986926526232111912899467919673129
|
||||||
|
2266423275271832192191927133161851111718244711617612592821169634215492721212529519332171925375214519
|
||||||
|
2961251383676393331912784833198316856114611437958511134729539811313332428111416135419161136827381511
|
||||||
|
2191313432414523594719493126599684313513119243281212311968932355513797175111911888954498999447129422
|
||||||
|
4116222439791495331225415853138639142821696183279788473226912132161296116634441352242287514831641639
|
||||||
|
2456122986411166492928291613291461786611191281413582887271831192125366139197116411714187313721143319
|
||||||
|
3137321286181773323297599141911589613214333724715721771326962716833251289731121417114311929432923141
|
||||||
|
4471591643429412532212412921891262226734323514259112982727616315933911299142522382749595219893774213
|
||||||
|
8361434437271446111531163739832741723991191369215895121472249713859411711382822931149329516384858813
|
||||||
|
7162151376995138977914242232912263921431263824116411237115179847816871745736216484215173821453691814
|
||||||
|
1221412352976445211311141195476196991326389881615412212286967548955857131279126264116711124668334891
|
||||||
|
6982434645865366398413542122219772368658463742631121963313814929811193197282524243293233246445611618
|
10
Sources/Runner/Resources/input/15_test.txt
Normal file
10
Sources/Runner/Resources/input/15_test.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
1163751742
|
||||||
|
1381373672
|
||||||
|
2136511328
|
||||||
|
3694931569
|
||||||
|
7463417111
|
||||||
|
1319128137
|
||||||
|
1359912421
|
||||||
|
3125421639
|
||||||
|
1293138521
|
||||||
|
2311944581
|
1
Sources/Runner/Resources/input/16.txt
Normal file
1
Sources/Runner/Resources/input/16.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
020D708041258C0B4C683E61F674A1401595CC3DE669AC4FB7BEFEE840182CDF033401296F44367F938371802D2CC9801A980021304609C431007239C2C860400F7C36B005E446A44662A2805925FF96CBCE0033C5736D13D9CFCDC001C89BF57505799C0D1802D2639801A900021105A3A43C1007A1EC368A72D86130057401782F25B9054B94B003013EDF34133218A00D4A6F1985624B331FE359C354F7EB64A8524027D4DEB785CA00D540010D8E9132270803F1CA1D416200FDAC01697DCEB43D9DC5F6B7239CCA7557200986C013912598FF0BE4DFCC012C0091E7EFFA6E44123CE74624FBA01001328C01C8FF06E0A9803D1FA3343E3007A1641684C600B47DE009024ED7DD9564ED7DD940C017A00AF26654F76B5C62C65295B1B4ED8C1804DD979E2B13A97029CFCB3F1F96F28CE43318560F8400E2CAA5D80270FA1C90099D3D41BE00DD00010B893132108002131662342D91AFCA6330001073EA2E0054BC098804B5C00CC667B79727FF646267FA9E3971C96E71E8C00D911A9C738EC401A6CBEA33BC09B8015697BB7CD746E4A9FD4BB5613004BC01598EEE96EF755149B9A049D80480230C0041E514A51467D226E692801F049F73287F7AC29CB453E4B1FDE1F624100203368B3670200C46E93D13CAD11A6673B63A42600C00021119E304271006A30C3B844200E45F8A306C8037C9CA6FF850B004A459672B5C4E66A80090CC4F31E1D80193E60068801EC056498012804C58011BEC0414A00EF46005880162006800A3460073007B620070801E801073002B2C0055CEE9BC801DC9F5B913587D2C90600E4D93CE1A4DB51007E7399B066802339EEC65F519CF7632FAB900A45398C4A45B401AB8803506A2E4300004262AC13866401434D984CA4490ACA81CC0FB008B93764F9A8AE4F7ABED6B293330D46B7969998021C9EEF67C97BAC122822017C1C9FA0745B930D9C480
|
1
Sources/Runner/Resources/input/16_test.txt
Normal file
1
Sources/Runner/Resources/input/16_test.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
38006F45291200
|
1
Sources/Runner/Resources/input/17.txt
Normal file
1
Sources/Runner/Resources/input/17.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
target area: x=128..160, y=-142..-88
|
1
Sources/Runner/Resources/input/17_test.txt
Normal file
1
Sources/Runner/Resources/input/17_test.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
target area: x=20..30, y=-10..-5
|
Reference in New Issue
Block a user