move standalone projects into own directory

This commit is contained in:
2023-04-27 11:39:41 -06:00
parent 5d593e22b0
commit acda704057
369 changed files with 1170 additions and 5 deletions

View File

@@ -0,0 +1,7 @@
package;
class Main {
static function main() {
Main_.main();
}
}

View File

@@ -0,0 +1,14 @@
(load "UtilMacros.kiss")
(year 2018
(import year2018.Solutions2018)
(Solutions2018.run))
(year 2020
(import year2020.Solutions2020)
(Solutions2020.run))
(year 2021
(import year2021.Solutions2021)
(Solutions2021.run))
(year 2022
(import year2022.Solutions2022)
(Solutions2022.main))

View File

@@ -0,0 +1,9 @@
package;
import sys.io.File;
import kiss.Prelude;
using StringTools;
@:build(kiss.Kiss.build())
class Util {}

View File

@@ -0,0 +1,22 @@
(function readLines [file]
(filter
(.map
(.split (.replace (File.getContent file) "\r" "") "\n")
StringTools.trim)))
(function readParagraphLines [file]
(.filter
(for paragraph
(.split
(.replace (File.getContent file) "\r" "")
"\n\n")
(.filter
(paragraph.split "\n")
(lambda [line] (< 0 line.length))))
(lambda [lines] (< 0 lines.length))))
// TODO won't need to specify type here if last is not a quickNth
(function :kiss.List<Int> readInts [file] (let [lines (readLines file)] (lines.map Std.parseInt)))
(function countChar [char str]
(count (str.split "") (lambda [c] ?(= c char))))

View File

@@ -0,0 +1,12 @@
(defMacro year [num &body body]
`(#when ,(symbol (+ "year" (symbolNameValue num)))
(print (+ "year " (Std.string ,num)))
,@body))
(defMacro day [num &body body]
`(#when ,(symbol (+ "day" (symbolNameValue num)))
(print (+ "day " (Std.string ,num)))
,@body))
(defMacro dayTodo [num]
`(day ,num (print "TODO")))

View File

@@ -0,0 +1,11 @@
package year2018;
import haxe.ds.Map;
import haxe.Int64;
import StringTools;
import kiss.Prelude;
import kiss.Stream;
import Util;
@:build(kiss.Kiss.build())
class Solutions2018 {}

View File

@@ -0,0 +1,34 @@
(load "../UtilMacros.kiss")
(function run []
(day 1
(let [inputs
(.slice (.split (sys.io.File.getContent "src/year2018/inputs/day1.txt") "\n") 0 -1)
numbers
(.map inputs Std.parseInt)]
(assert (= 529 (apply + numbers)))))
(dayTodo 2)
(dayTodo 3)
(dayTodo 4)
(dayTodo 5)
(dayTodo 6)
(dayTodo 7)
(dayTodo 8)
(dayTodo 9)
(dayTodo 10)
(dayTodo 11)
(dayTodo 12)
(dayTodo 13)
(dayTodo 14)
(dayTodo 15)
(dayTodo 16)
(dayTodo 17)
(dayTodo 18)
(dayTodo 19)
(dayTodo 20)
(dayTodo 21)
(dayTodo 22)
(dayTodo 23)
(dayTodo 24)
(dayTodo 25))

View File

@@ -0,0 +1,951 @@
-10
-12
+1
+14
+11
-19
-4
+10
+10
-12
-13
-10
-8
+11
+3
-10
+8
+5
-14
+7
+12
+12
+14
-1
+17
-5
+9
-15
+8
-16
+9
+6
+17
-11
+19
+11
-9
-1
-8
-16
-5
+6
+2
+6
+12
+15
+16
-6
-8
-5
+11
-9
+19
+19
-5
-12
-17
-20
+9
-6
-2
+20
+15
-8
+15
+19
-5
-17
-9
+1
-9
-11
-19
-1
-15
+18
-4
+19
+3
+21
+5
-1
+8
+9
+9
-16
+17
-15
+18
+14
+8
-13
-2
-15
+13
+19
-13
+5
+16
+16
+7
+8
-19
+3
-12
+18
-16
-19
+8
-16
+20
+15
-5
-17
+15
+14
-2
+18
-6
+5
+16
+13
-8
-9
-1
+13
+18
-2
+16
-4
+19
+6
+14
-6
-16
-10
-5
-15
+11
+10
+18
+8
-2
+15
-9
+7
+10
+9
-6
+1
-17
-12
+19
+14
-9
-18
+20
+12
+10
+14
+6
+9
-18
+4
+15
+15
+3
+9
-4
-19
+8
+16
+19
-12
-1
+16
+11
+13
-8
+4
+18
+10
-11
+18
-8
+19
-4
-5
-12
-3
-10
-11
-18
-7
+3
+14
+18
+2
-7
-12
+14
+12
+13
-1
+13
-1
+15
+13
-1
-17
-4
+17
-3
+13
+5
-19
+17
+10
+6
-15
+11
+16
+11
+20
+19
+5
-11
-2
-12
-6
-11
-14
+5
+10
-23
+14
-11
+22
-1
-14
-35
-23
+11
+4
+10
-6
+19
-5
+4
-13
-7
+11
-24
-17
+9
-17
+11
+2
-4
-10
-24
+14
+15
+19
+7
-2
+11
-13
-8
-8
-14
-17
+6
+8
-16
-18
+1
-21
-14
+8
-2
+20
-19
+9
-15
-6
-7
+4
-3
-8
+16
+15
-26
+18
-22
-16
-3
-17
-18
+4
+5
+3
-1
+3
+2
+3
+7
-5
+20
-11
+15
-6
-19
-24
-6
-20
+13
-4
-18
+15
+9
+16
+12
-5
+16
+9
-4
-14
-9
-19
-5
-16
-16
+5
-4
+12
-15
-15
-14
+4
-18
-12
-4
+6
+9
-12
+14
+9
-6
+3
+8
+4
+7
-14
-15
-18
+12
-19
-14
-15
-16
+15
-8
+14
-4
-21
+7
-12
-2
-10
-6
+14
+14
-9
-14
-16
+2
+7
+5
-15
-15
+19
-16
-5
-16
-19
+9
-27
-8
+6
+1
-14
-9
-50
-9
-21
+5
-20
-19
+6
-11
+6
+1
-17
-14
-2
+8
-4
+16
+1
-3
-9
+20
+15
-22
-3
-13
-12
-25
+5
-13
-2
-8
-11
+17
+3
-7
+13
+1
+18
-13
+1
+7
-15
-43
-6
-10
-9
-20
-7
-8
-15
-9
+13
-9
+24
+13
+5
-8
-15
-4
-4
-4
-14
-21
+16
+15
-14
-20
-20
-15
-19
-41
+16
+3
+8
-22
-30
+8
+40
+15
+24
-7
+22
+10
+15
+9
+28
+14
+2
+14
+6
+17
+1
+30
+5
-2
+46
+24
+46
-3
-7
+35
+16
+13
-21
+28
+13
-25
+180
+25
+5
-9
+23
-5
-2
+13
-12
+2
-25
-5
+18
-24
+45
+17
-7
+22
-152
-11
+4
+50
+129
-7
+22
+109
-56
+80
+29
-75060
-2
-14
+7
-17
-5
+6
-3
+18
+19
-14
-12
-6
+9
-5
-13
-6
-3
-15
+13
+3
-18
-11
+16
-2
+10
-14
-7
+19
-20
+15
+10
+12
+10
+16
-11
+14
-5
+14
+11
-5
+1
-13
+1
+18
-10
+25
+13
-17
+15
-18
+1
-6
-12
+5
-7
+18
-6
-18
-17
-5
-15
-1
-15
+1
-12
+9
+16
+8
+5
+1
+9
+18
-13
-30
-27
-19
+2
-16
-19
-10
-18
+21
+18
-5
+14
+9
-6
+2
-16
-11
+1
+18
-4
+19
+7
+6
-8
+25
-50
+6
-21
+6
-2
+14
-11
+10
-9
+16
+25
-61
-17
-14
+13
+3
-14
-4
-1
+9
-1
-4
-5
+7
-15
+7
+16
+6
-2
-11
-11
-13
+11
-12
-13
-8
+3
-13
+16
-1
-14
+19
+4
+10
+12
+26
+6
+4
+24
-31
+9
-10
-23
-13
+3
-18
-9
-6
+1
-2
+15
-10
-17
-17
+15
+9
+4
+19
-4
+12
+11
-25
+16
+4
-2
+39
+49
+9
+96
+4
+19
+3
+11
+25
+14
+11
-5
-26
-8
-16
+11
+2
+2
-1
-10
-45
-160
-31
-3
-43
-18
+19
+3
+4
+11
-16
-19
-22
+6
+2
+10
-11
-17
+7
+1
+15
+17
-19
+6
-26
-7
-9
+19
+2
+6
-22
+2
-8
+5
+7
+9
+8
-16
+2
-19
-19
-3
+16
+5
+4
-18
-11
-19
+16
-15
+7
-1
-9
-19
+11
-17
-5
+7
-11
+16
-19
+5
+21
-2
+12
+14
-7
+18
-8
+10
-11
-17
+3
-13
+19
-3
+10
+17
+17
-18
+7
-2
-2
+12
-6
+19
-20
-15
-11
-27
+8
+18
+9
-1
-2
+19
+7
+12
+32
+14
+13
-9
-14
+20
+18
-4
-49
-6
-10
-7
-4
-9
-6
-37
-21
-2
+5
+12
+4
-33
-4
-13
-4
+13
-19
-7
-16
-1
-1
+8
-14
-15
+11
-10
-14
-22
-11
+10
-3
+7
+9
-15
+16
-7
-1
+2
+20
+11
-1
+6
-2
+3
+3
+2
-20
-10
+11
-10
+13
-1
+20
+7
+7
+5
+1
+4
-13
+15
-3
+2
-4
-3
-1
+13
-15
-14
-2
-6
+3
+13
-19
-11
+8
-21
-2
-23
-18
+20
+7
+6
-28
+7
-33
+13
-16
-18
-10
-18
+13
+8
-14
-13
-2
+4
-14
-7
-18
-20
-4
-5
+8
-4
+16
+21
+20
-8
-14
-2
-14
-22
+14
+36
+32
-28
+1
-21
+8
+14
+75784

View File

@@ -0,0 +1,9 @@
package year2020;
import haxe.Int64;
import kiss.Prelude;
using StringTools;
@:build(kiss.Kiss.build())
class Adapters {}

View File

@@ -0,0 +1,22 @@
(function differences [:kiss.List<Int> ratings]
(for pair (pairs ratings) (- 0 (apply - pair))))
(function distribution [:kiss.List<Int> numbers]
(let [:Map<Int,Int> dist (new Map)]
(doFor num numbers
(dictSet dist num
(if (dist.exists num)
(+ 1 (dictGet dist num))
1)))
dist))
(function &dynamic arrangementCount [:kiss.List<Int> ratings startingIndex]
(if (= startingIndex (- ratings.length 1)) 1
(let [&mut :Int64 sum 0
startingRating (nth ratings startingIndex)
potentialNextAdapters (filter
(for i (range (+ 1 startingIndex) (+ 4 startingIndex)) i)
(lambda [index] (and (< index ratings.length) (<= (nth ratings index) (+ 3 startingRating)))))]
(doFor subCount (map potentialNextAdapters (arrangementCount.bind ratings))
(set sum (Int64.add sum subCount)))
sum)))

View File

@@ -0,0 +1,14 @@
package year2020;
import kiss.Prelude;
using StringTools;
// Color CONTAINS quantities of child colors
typedef ParentMap = Map<String, Map<String, Int>>;
// Color IS CONTAINED IN these colors
typedef ChildMap = Map<String, Array<String>>;
@:build(kiss.Kiss.build())
class Bags {}

View File

@@ -0,0 +1,31 @@
(function bagColor [:String bag]
(bag.substr 0 (Math.floor (- (bag.indexOf "bag") 1))))
(function parseRule [:String line :ParentMap parentMap :ChildMap childMap]
(unless (<= 0 (line.indexOf "contain no other bags"))
(let [[containerStr contents] (line.split "contain ")
contentStrs (contents.split ", ")]
(localVar :Map<String,Int> innerMap (new Map))
(doFor str contentStrs
(let [parts (str.split " ")
quantity (Std.parseInt (parts.shift))
colorStr (parts.join " ")]
(dictSet innerMap (bagColor colorStr) quantity)
(unless (childMap.exists (bagColor colorStr)) (dictSet childMap (bagColor colorStr) []))
(.push (dictGet childMap (bagColor colorStr)) (bagColor containerStr))))
(dictSet parentMap (bagColor containerStr) innerMap))))
(function findIndirectContainers [color :ChildMap childMap :Map<String,Bool> outMap]
(when (childMap.exists color)
(doFor parentColor (dictGet childMap color)
(dictSet outMap parentColor true)
(findIndirectContainers parentColor childMap outMap))))
(function totalChildBags [bag :ParentMap parentMap]
(if (parentMap.exists bag)
(begin
(localVar &mut sum 0)
(doFor =>childColor quantity (dictGet parentMap bag)
(set sum (+ sum quantity (* quantity (totalChildBags childColor parentMap)))))
sum)
0))

View File

@@ -0,0 +1,16 @@
package year2020;
import kiss.EmbeddedScript;
import kiss.Prelude;
@:build(kiss.EmbeddedScript.build("BootCodeDSL.kiss", "inputs/day8-example.txt"))
class BootCodeExample extends EmbeddedScript {}
@:build(kiss.EmbeddedScript.build("BootCodeDSL.kiss", "inputs/day8.txt"))
class BootCodeReal extends EmbeddedScript {}
@:build(kiss.EmbeddedScript.build("BootCodeFixDSL.kiss", "inputs/day8-example.txt"))
class BootCodeFixExample extends EmbeddedScript {}
@:build(kiss.EmbeddedScript.build("BootCodeFixDSL.kiss", "inputs/day8.txt"))
class BootCodeFix extends EmbeddedScript {}

View File

@@ -0,0 +1,9 @@
(prop &mut accumulator 0)
(method setBreakPoint [] (addBreakPoint instructionPointer))
(method nop [v :Dynamic self] (self.setBreakPoint))
(method acc [v :Dynamic self] (self.setBreakPoint) (set self.accumulator (+ self.accumulator v)))
(method jmp [v :Dynamic self]
(self.setBreakPoint)
(set self.instructionPointer (+ self.instructionPointer (- v 1))))

View File

@@ -0,0 +1,11 @@
(load "BootCodeCommon.kiss")
(defReaderMacro "" [stream]
`(,(ReaderExp.Symbol
(begin (stream.dropWhitespace) (nextToken stream)))
(,(ReaderExp.Symbol
(begin (stream.dropWhitespace) (stream.expect "+/-" (lambda [] (stream.takeChars 1)))))
0
,(ReaderExp.Symbol
(nextToken stream)))
self))

View File

@@ -0,0 +1,38 @@
(load "BootCodeCommon.kiss")
(var :Map<Int,Bool> instructionsTested (new Map<Int,Bool>))
(prop &mut forked false)
(prop &mut forkedAt -1)
(defReaderMacro ["jmp" "nop"] [stream]
(let [inst
(nextToken stream)
instSymbol
(ReaderExp.Symbol inst)
op
(begin (stream.dropWhitespace) (ReaderExp.Symbol
(begin (stream.dropWhitespace) (stream.expect "+/-" (lambda [] (stream.takeChars 1))))))
arg
(ReaderExp.Symbol (nextToken stream))]
(stream.dropWhitespace)
`(cond
((or self.forked (instructionsTested.exists self.instructionPointer))
(,instSymbol (,op 0 ,arg) self))
(true
(dictSet instructionsTested self.instructionPointer true)
(self.setBreakPoint)
(self.fork [
(lambda [:Dynamic self]
(when ,(ReaderExp.Symbol (Std.string (= inst "nop")))
(set self.forked true)
(set self.forkedAt self.instructionPointer))
(jmp (,op 0 ,arg) self))
(lambda [:Dynamic self]
(when ,(ReaderExp.Symbol (Std.string (= inst "jmp")))
(set self.forked true)
(set self.forkedAt self.instructionPointer))
(nop (,op 0 ,arg) self))
])))))
// Define the default reader LAST because default readers tend to break everything
(load "BootCodeDSL.kiss")

View File

@@ -0,0 +1,8 @@
package year2020;
import kiss.Prelude;
using StringTools;
@:build(kiss.Kiss.build())
class Customs {}

View File

@@ -0,0 +1,14 @@
(function countAnyYes [:Array<String> group]
(countWhereYes group (lambda [c] (< 0 c))))
(function countAllYes [:Array<String> group]
(countWhereYes group (lambda [c] (= c group.length))))
(function countWhereYes [:Array<String> group predicate]
(let [yesDict (new Map<String,Int>)]
(doFor person group
(doFor question (person.split "")
(dictSet yesDict question
(+ 1
(if (yesDict.exists question) (dictGet yesDict question) 0)))))
(count yesDict predicate)))

View File

@@ -0,0 +1,7 @@
package year2020;
import kiss.EmbeddedScript;
import kiss.Prelude;
@:build(kiss.EmbeddedScript.build("EvasionDSL.kiss", "inputs/day12.txt"))
class EvasionScript extends EmbeddedScript {}

View File

@@ -0,0 +1,37 @@
(prop &mut x 0)
(prop &mut y 0)
// 0 is east
// 1 is south
// 2 is west
// 3 is north
(prop &mut facing 0)
(function fixFacing [f]
(Math.floor (% (if (> 0 f) (+ 4 f) f) 4)))
(method N [num]
(set y (+ y num)))
(method S [num]
(set y (- y num)))
(method E [num]
(set x (+ x num)))
(method W [num]
(set x (- x num)))
(method R [angle]
(set facing (fixFacing (+ facing (/ angle 90)))))
(method L [angle]
(set facing (fixFacing (- facing (/ angle 90)))))
(method F [num]
(case facing
(0 (E num))
(1 (S num))
(2 (W num))
(3 (N num))
(otherwise (throw (+ "Bad facing" facing)))))
(defReaderMacro "" [stream &builder b]
(stream.dropWhitespace)
(if (stream.isEmpty)
null
`(,(b.symbol (stream.expect "a ship command" ->(stream.takeChars 1)))
,(b.symbol (stream.expect "a number argument" ->(stream.takeUntilAndDrop "\n"))))))

View File

@@ -0,0 +1,17 @@
package year2020;
import kiss.Prelude;
import kiss.EmbeddedScript;
import haxe.Constraints;
typedef FerrySquare = (Array<FerrySquare>, SeatsChanged) -> FerrySquare;
typedef SeatsChanged = {
changed:Bool
};
@:build(kiss.EmbeddedScript.build("FerrySimDSL.kiss", "inputs/day11-example.txt"))
class FerrySimExample extends EmbeddedScript {}
@:build(kiss.EmbeddedScript.build("FerrySimDSL.kiss", "inputs/day11.txt"))
class FerrySimReal extends EmbeddedScript {}

View File

@@ -0,0 +1,54 @@
(function :FerrySquare floor [:Array<FerrySquare> n :SeatsChanged changed] floor)
(function :FerrySquare emptySeat [:Array<FerrySquare> n :SeatsChanged changed]
// Empty seats with completely empty neighbors, fill up
(cond
((= true (apply = (for neighbor n #{neighbor != fullSeat;}#)))
(set changed.changed true)
fullSeat)
(true emptySeat)))
(function :FerrySquare fullSeat [:Array<FerrySquare> n :SeatsChanged changed]
// Full seats with 4 or more full neighbors become empty
(cond
((<= 4 (count n (lambda [neighbor] #{neighbor == fullSeat;}#)))
(set changed.changed true)
emptySeat)
(true fullSeat)))
(function neighbors [x y :Array<Array<FerrySquare>> grid]
(localVar &mut n [])
(doFor xx (range (- x 1) (+ x 2))
(doFor yy (range (- y 1) (+ y 2))
(unless (and (= x xx) (= y yy))
(when (and (<= 0 xx) (<= 0 yy) (> grid.length yy) (> .length (nth grid yy) xx))
(n.push (nth (nth grid yy) xx))))))
n)
(prop &mut :Array<Array<FerrySquare>> state [])
(method simulate []
(localVar changed (object changed false))
(set state
(for rowIdx (range state.length)
(let [:Array<FerrySquare> row (nth state rowIdx)]
(for seatIdx (range row.length) ((nth row seatIdx) (neighbors seatIdx rowIdx state) changed)))))
changed.changed)
(method fullSimulate []
(when (simulate) (fullSimulate)))
(method countFullSeats []
(apply +
(for :Array<FerrySquare> row state
(apply +
(for :FerrySquare seat row
(if #{seat == fullSeat;}# 1 0))))))
(defReaderMacro "L" [stream] `emptySeat)
(defReaderMacro "#" [stream] `fullSeat)
(defReaderMacro "." [stream] `floor)
(undefReaderMacro "...")
(defReaderMacro &start "" [stream]
`(state.push ,(ReaderExp.ListExp (readExpArray stream "\n"))))

View File

@@ -0,0 +1,9 @@
package year2020;
import kiss.Prelude;
import kiss.Stream;
using StringTools;
@:build(kiss.Kiss.build())
class Passports {}

View File

@@ -0,0 +1,39 @@
(function readPassport [:Stream stream &opt :Map<String,String> pp]
(set pp (or pp (new Map<String,String>)))
(when (stream.isEmpty) (return pp))
(let [key (stream.expect "passport key" (lambda [] (stream.takeUntilAndDrop ":")))
value (stream.expect "passport value" (lambda [] (stream.takeUntilOneOf [" " "\n"] true)))]
(dictSet pp key value))
(if (= "\n\n" (try (stream.expect "paragraph break" (lambda [] (stream.peekChars 2))) (catch [e] "")))
(begin (stream.dropWhitespace) pp)
(begin (stream.dropWhitespace) (readPassport stream pp))))
(function checkPassport [:Map<String,String> pp strict]
(doFor key ["byr" "iyr" "eyr" "hgt" "hcl" "ecl" "pid"]
(if !(pp.exists key) (return false)))
(when strict
(unless (<= 1920 (Std.parseInt (dictGet pp "byr")) 2002) (return false))
(unless (<= 2010 (Std.parseInt (dictGet pp "iyr")) 2020) (return false))
(unless (<= 2020 (Std.parseInt (dictGet pp "eyr")) 2030) (return false))
(let [hgt (dictGet pp "hgt")
[min max] (cond ((hgt.endsWith "cm") [150 193]) ((hgt.endsWith "in") [59 76]) (true (return false)))]
(unless (<= min (Std.parseInt hgt) max) (return false)))
(let [hcl (dictGet pp "hcl")]
(unless (and
(hcl.startsWith "#")
(= hcl.length 7)
(apply = (concat [true]
(for c (.split (hcl.substr 1) "")
(<= 0 (.indexOf (.split "0123456789abcdef" "") c))))))
(return false)))
(let [ecl (dictGet pp "ecl")]
(unless (<= 0 (.indexOf (.split "amb blu brn gry grn hzl oth" " ") ecl)) (return false)))
(let [pid (dictGet pp "pid")]
(unless (and (= 9 pid.length) (Std.parseInt pid)) (return false))))
(return true))
(function countValidPassports [:Stream stream &opt strict c]
(unless c (set c 0))
(if (stream.isEmpty)
c
(countValidPassports stream strict (if (checkPassport (readPassport stream) strict) (+ c 1) c))))

View File

@@ -0,0 +1,8 @@
package year2020;
import kiss.Prelude;
using StringTools;
@:build(kiss.Kiss.build())
class Passwords {}

View File

@@ -0,0 +1,17 @@
(function parsePasswordCheck1 [:String ruleStr]
(let [[min max letter]
(.split (ruleStr.replace " " "-") "-")]
(lambda [password] (<= (Std.parseInt min) (Util.countChar letter password) (Std.parseInt max)))))
(function parsePasswordCheck2 [:String ruleStr]
(let [[a b letter]
(.split (ruleStr.replace " " "-") "-")
aIdx (- (Std.parseInt a) 1)
bIdx (- (Std.parseInt b) 1)]
(lambda [password] (= 1 (Util.countChar letter (+ (.charAt password aIdx) (.charAt password bIdx)))))))
(function validateInputLine [:String line ruleParser]
(let [[rule password]
(line.split ": ")]
((ruleParser rule) password)))

View File

@@ -0,0 +1,8 @@
package year2020;
import kiss.Prelude;
using StringTools;
@:build(kiss.Kiss.build())
class Seating {}

View File

@@ -0,0 +1,17 @@
// Airplane seating
(function search [:Array<String> letters min max rowOrColumn]
(if (= min max)
min
(let [middle (Math.floor (/ (+ min max) 2))]
(case [(letters.shift) rowOrColumn]
(["F" "row"] (search letters min middle rowOrColumn))
(["B" "row"] (search letters (+ 1 middle) max rowOrColumn))
(["L" "column"] (search letters min middle rowOrColumn))
(["R" "column"] (search letters (+ 1 middle) max rowOrColumn))
(otherwise (throw "invalid search call"))))))
(function seatId [:String boardingPass]
(+
(* 8 (search (.split (boardingPass.substr 0 7) "") 0 127 "row"))
(search (.split (boardingPass.substr 7) "") 0 7 "column")))

View File

@@ -0,0 +1,27 @@
package year2020;
import haxe.ds.Map;
import haxe.Int64;
import StringTools;
import kiss.Prelude;
import kiss.Stream;
import year2020.SummingTuples;
import year2020.Passwords;
import year2020.Toboggan;
import year2020.Passports;
import year2020.Seating;
import year2020.Customs;
import year2020.Bags;
#if (day8 && year2020)
import year2020.BootCode;
#end
import year2020.Adapters;
#if (day11 && year2020)
import year2020.FerrySim;
#end
#if (day12 && year2020)
import year2020.Evasion;
#end
@:build(kiss.Kiss.build())
class Solutions2020 {}

View File

@@ -0,0 +1,159 @@
(load "../UtilMacros.kiss")
(function run []
(day 1
(let [p (SummingTuples.pairWithSum 2020 [1721 979 366 299 675 1456])]
(assert (and (has p 1721) (has p 299)) "pairWithSum is broken"))
(let [[a b] (SummingTuples.pairWithSum 2020 (Util.readInts "src/year2020/inputs/day1-1.txt"))]
(assert (= 545379 (* a b)) "pairWithSum is broken"))
(let [t (SummingTuples.trioWithSum 2020 [1721 979 366 299 675 1456])]
(assert (and (has t 675) (has t 366) (has t 979))
"trioWithSum is broken"))
(let [[a b c] (SummingTuples.trioWithSum 2020 (Util.readInts "src/year2020/inputs/day1-1.txt"))]
(assert (= 257778836 (* a b c))
"trioWithSum is broken")))
(day 2
(assert (Passwords.validateInputLine "1-3 a: abcde" Passwords.parsePasswordCheck1))
(assert !(Passwords.validateInputLine "1-3 b: cdefg" Passwords.parsePasswordCheck1))
(assert (Passwords.validateInputLine "2-9 c: ccccccccc" Passwords.parsePasswordCheck1))
(assert (= 655 (count (map (Util.readLines "src/year2020/inputs/day2-1.txt") (.bind Passwords.validateInputLine _ Passwords.parsePasswordCheck1)) (lambda [v] v))))
(assert (Passwords.validateInputLine "1-3 a: abcde" Passwords.parsePasswordCheck2))
(assert !(Passwords.validateInputLine "1-3 b: cdefg" Passwords.parsePasswordCheck2))
(assert !(Passwords.validateInputLine "2-9 c: ccccccccc" Passwords.parsePasswordCheck2))
(assert (= 673 (count (map (Util.readLines "src/year2020/inputs/day2-1.txt") (.bind Passwords.validateInputLine _ Passwords.parsePasswordCheck2)) (lambda [v] v)))))
(day 3
(localVar exampleHillTile [
"..##......."
"#...#...#.."
".#....#..#."
"..#.#...#.#"
".#...##..#."
"..#.##....."
".#.#.#....#"
".#........#"
"#.##...#..."
"#...##....#"
".#..#...#.#"])
(assert (= "..#.##.####" (Toboggan.pathString exampleHillTile 0 0 3 1)))
(assert (= 2 (Toboggan.pathTrees exampleHillTile 0 0 1 1)))
(assert (= 3 (Toboggan.pathTrees exampleHillTile 0 0 5 1)))
(assert (= 4 (Toboggan.pathTrees exampleHillTile 0 0 7 1)))
(assert (= 2 (Toboggan.pathTrees exampleHillTile 0 0 1 2)))
(assert (= 289 (Util.countChar "#" (Toboggan.pathString (Util.readLines "src/year2020/inputs/day3-1.txt") 0 0 3 1))))
(assert (= 5522401584 (let [hillTile (Util.readLines "src/year2020/inputs/day3-1.txt")]
(apply * (for args [[0 0 1 1] [0 0 3 1] [0 0 5 1] [0 0 7 1] [0 0 1 2]] (apply (Toboggan.pathTrees.bind hillTile) args)))))))
(day 4
(assert (= 2 (Passports.countValidPassports (Stream.fromFile "src/year2020/inputs/day4-example.txt"))))
(assert (= 250 (Passports.countValidPassports (Stream.fromFile "src/year2020/inputs/day4-1.txt"))))
(assert (= 158 (Passports.countValidPassports (Stream.fromFile "src/year2020/inputs/day4-1.txt") "strict"))))
(day 5
(assert (= 567 (Seating.seatId "BFFFBBFRRR")))
(let [:kiss.List<Int> seatIds (map (Util.readLines "src/year2020/inputs/day5-1.txt") Seating.seatId)]
(seatIds.sort (lambda [a b] (- a b)))
(assert (= 947 (nth seatIds -1)))
(localVar &mut lastId -1)
(localVar &mut myId -1)
(doFor id seatIds
(when (and (<= 0 lastId) !(= lastId (- id 1)))
(set myId (- id 1))
(break))
(set lastId id))
(assert (= 636 myId))))
(day 6
(assert (= 6 (Customs.countAnyYes ["abcx" "abcy" "abcz"])))
(assert (= 6683 (apply + (map (Util.readParagraphLines "src/year2020/inputs/day6-1.txt") Customs.countAnyYes))))
(assert (= 6 (apply + (map (Util.readParagraphLines "src/year2020/inputs/day6-example2.txt") Customs.countAllYes))))
(assert (= 3122 (apply + (map (Util.readParagraphLines "src/year2020/inputs/day6-1.txt") Customs.countAllYes)))))
(day 7
(localVar parentMap (new ParentMap))
(localVar childMap (new ChildMap))
(doFor line (Util.readLines "src/year2020/inputs/day7.txt")
(Bags.parseRule line parentMap childMap))
(localVar :Map<String,Bool> shinyGoldParents (new Map))
(Bags.findIndirectContainers "shiny gold" childMap shinyGoldParents)
(assert (= 172 (count shinyGoldParents)))
(assert (= 39645 (Bags.totalChildBags "shiny gold" parentMap))))
(day 8
(let [example (new BootCodeExample)]
(example.setBreakHandler (lambda :Void [example] (assert (= 5 .accumulator example))))
(example.run))
(let [bootCode (new BootCodeReal)]
(bootCode.setBreakHandler (lambda :Void [bootCode] (assert (= 2058 bootCode.accumulator))))
(bootCode.run))
/* (print "BootCodeFixExample")
(let [bootCode (new BootCodeFixExample)]
(bootCode.setBreakHandler
(lambda :Void [bootCodeFork]
(if (= bootCodeFork.instructionPointer (bootCodeFork.instructionCount))
(print (+ "answer could be " (Std.string bootCodeFork.accumulator) " forked at " (Std.string bootCodeFork.forkedAt)))
(print "hit an infinite loop"))))
(bootCode.addBreakPoint (bootCode.instructionCount))
(bootCode.run))
(print "BootCodeFixReal")
(let [bootCode (new BootCodeFix)]
(bootCode.setBreakHandler
(lambda :Void [bootCodeFork]
(if (= bootCodeFork.instructionPointer (bootCodeFork.instructionCount))
(print (+ "answer could be " (Std.string bootCodeFork.accumulator) " forked at " (Std.string (+ 1 bootCodeFork.forkedAt))))
(print "hit an infinite loop"))))
(bootCode.addBreakPoint (bootCode.instructionCount))
(bootCode.run)) */
)
(day 9
(assert (= 127 (XMAS.firstOffender 5
[35 20 15 25 47 40 62 55 65 95 102 117 150 182 127 219 299 277 309 576])))
(assert (= 133015568 (XMAS.firstOffender 25 (Util.readInts "src/year2020/inputs/day9.txt"))))
(assert (= "[15,25,47,40]" (.toString (SummingTuples.contiguousSumTuple 127
[35 20 15 25 47 40 62 55 65 95 102 117 150 182 127 219 299 277 309 576]))))
(let [tuple (SummingTuples.contiguousSumTuple 133015568 (Util.readInts "src/year2020/inputs/day9.txt"))]
(assert (= 16107959 (+ (apply min tuple) (apply max tuple))))))
(day 10
(assert (Int64.eq 8 (Adapters.arrangementCount (sort [0 22 16 10 15 5 1 11 7 19 6 12 4]) 0)))
(assert (Int64.eq 19208 (Adapters.arrangementCount (sort [0 52 28 33 18 42 31 14 46 20 48 47 24 23 49 45 19 38 39 11 1 32 25 35 8 17 7 9 4 2 34 10 3]) 0)))
(let [adapters (sort (Util.readInts "src/year2020/inputs/day10.txt"))]
(adapters.unshift 0)
(adapters.push (+ 3 (last adapters)))
(let [diffs (Adapters.differences adapters)
dist (Adapters.distribution diffs)]
(assert (= 1998 (* (dictGet dist 1) (dictGet dist 3)))))
(let [memoized (memoize Adapters.arrangementCount)]
(set Adapters.arrangementCount (cast memoized)))
(assert (= "347250213298688" (Int64.toStr (Adapters.arrangementCount adapters 0))))))
(day 11
(let [example (new FerrySimExample)
real (new FerrySimReal)]
(example.run)
(example.simulate)
(assert (= 71 (example.countFullSeats)))
(real.run)
(real.fullSimulate)
(assert (= 2329 (real.countFullSeats)))))
(day 12
(let [script (new EvasionScript)]
(script.run)
(assert (= 441 (+ (Math.abs script.x) (Math.abs script.y))))))
(dayTodo 13)
(dayTodo 14)
(dayTodo 15)
(dayTodo 16)
(dayTodo 17)
(dayTodo 18)
(dayTodo 19)
(dayTodo 20)
(dayTodo 21)
(dayTodo 22)
(dayTodo 23)
(dayTodo 24)
(dayTodo 25))

View File

@@ -0,0 +1,6 @@
package year2020;
import kiss.Prelude;
@:build(kiss.Kiss.build())
class SummingTuples {}

View File

@@ -0,0 +1,29 @@
(function :kiss.List<Int> pairWithSum [sum :kiss.List<Int> numbers]
// Put the numbers in a map for random access. This gives an O(n) solution
(localVar :Map<Int,Int> numbersMap (new Map))
(doFor number numbers
(dictSet numbersMap number (- sum number))
(let [requiredForPair (dictGet numbersMap number)]
(when (numbersMap.exists requiredForPair)
(return [number requiredForPair]))))
null)
(function :kiss.List<Int> trioWithSum [sum :kiss.List<Int> numbers]
(doFor number numbers
(let [requiredForTrio (- sum number)
pairThatSatisfies (pairWithSum requiredForTrio numbers)]
(when pairThatSatisfies
(return [number (nth pairThatSatisfies 0) (nth pairThatSatisfies 1)]))))
null)
(function contiguousSumTuple [sum :kiss.List<Int> numbers]
(doFor i (range numbers.length)
(localVar &mut testSum (nth numbers i))
(doFor j (range (+ i 1) numbers.length)
(set testSum (+ testSum (nth numbers j)))
(cond
((= testSum sum)
(return (numbers.slice i (+ j 1))))
((> testSum sum)
(break)))))
null)

View File

@@ -0,0 +1,6 @@
package year2020;
import kiss.Prelude;
@:build(kiss.Kiss.build())
class Toboggan {}

View File

@@ -0,0 +1,8 @@
(function path [:kiss.List<String> hillTile x0 y0 dx dy]
(if (>= y0 .length hillTile)
[]
(concat [(.charAt (nth hillTile y0) (Math.floor (% x0 .length (nth hillTile y0))))] (path hillTile (+ x0 dx) (+ y0 dy) dx dy))))
(function pathString [:kiss.List<String> hillTile x0 y0 dx dy] (.join (path hillTile x0 y0 dx dy) ""))
(function pathTrees [:kiss.List<String> hillTile x0 y0 dx dy] (Util.countChar "#" (pathString hillTile x0 y0 dx dy)))

View File

@@ -0,0 +1,7 @@
package year2020;
import kiss.Prelude;
import year2020.SummingTuples;
@:build(kiss.Kiss.build())
class XMAS {}

View File

@@ -0,0 +1,5 @@
(function firstOffender [preambleLength :kiss.List<Int> input]
(doFor idx (range preambleLength input.length)
(unless (SummingTuples.pairWithSum (nth input idx) (input.slice (- idx preambleLength) idx))
(return (nth input idx))))
(print null))

View File

@@ -0,0 +1,200 @@
1825
1944
1802
1676
1921
1652
1710
1952
1932
1934
1823
1732
1795
1681
1706
1697
1919
1695
2007
1889
1942
961
1868
1878
1723
416
1875
1831
1890
1654
1956
1827
973
1947
1688
1680
1808
1998
1794
1552
1935
1693
1824
1711
1766
1668
1968
1884
217
2003
1869
1658
1953
1829
1984
2005
1973
428
1957
1925
1719
1797
321
1804
1971
922
1976
1863
2008
1806
1833
1809
1707
1954
1811
1815
1915
1799
1917
1664
1937
1775
1685
1756
1940
1660
1859
1916
1989
1763
1994
1716
1689
1866
1708
1670
1982
1870
1847
1627
1819
1786
1828
1640
1699
1722
1737
1882
1666
1871
1703
1770
1623
1837
1636
1655
1930
1739
1810
1805
1861
1922
1993
1896
1760
2002
1779
1633
1972
1856
1641
1718
2004
1730
1826
1923
1753
1735
660
1988
1796
1990
1720
1626
1788
1700
942
1902
1943
1758
1839
1924
938
1634
1724
1983
1683
1687
1904
1907
1757
2001
1910
1849
1781
1981
1743
1851
2009
619
1898
1891
1751
1765
1959
1888
1894
1759
389
1964
1900
1742
1672
1969
1978
1933
1906
1807
1867
1838
1960
1814
1950
1918
1726
1986
1746
2006
1949
1784

View File

@@ -0,0 +1,100 @@
46
63
21
115
125
35
89
17
116
90
51
66
111
142
148
60
2
50
82
20
47
24
80
101
103
16
34
72
145
141
124
14
123
27
62
61
95
138
29
7
149
147
104
152
22
81
11
96
97
30
41
98
59
45
88
37
10
114
110
4
56
122
139
117
108
91
36
146
131
109
31
75
70
140
38
121
3
28
118
54
107
84
15
76
71
102
130
132
87
55
129
83
23
42
69
1
77
135
128
94

View File

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

View File

@@ -0,0 +1,93 @@
LLLLLLLLL.L.LLLL.LLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLL..LLLLLL.LLLLLLLL.LLLLL.LL.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLL..LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLL..LL.LLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLL..LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLL.LLLLL.LLLLLLLLLL..LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLL.LLLL.LLLLLLLLLL..LLLL.L.LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LL.LLLLLL.LLLLLL.LLLLLLLLLLL.LLLLLLLLLL.L.LLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LL.L.LLLL.L.LLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
......L.L.L....LL.L.L..L.L..LL...L......LL..L.....L.LL.LLLL.LL.L..LL........L..LL.LLL.L..L.LL.L..L
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLL.L.LL.LLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLL.LLLL.LLL.LLLLL.LL.LLLLLLLLL.LLLLLL.LLL..LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.L.LLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLL.LL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLL.L...LLLLLLLL
LLLLLLLLLLLLLLLL.LLLL.LLLL..LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLLL.L
LLLLLLLL..LL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
LLLLLLLL.LLL.LLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLL
LL..L.....L..L.L...LL...........LLL.L.L..L.L.....LL....LL....L...L...L..LL.L...LL.LL.LLL.L.L.LL.L.
LLLLLLL.L.LLLLLL.LLL.LLLLLLLLLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLL.LL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLL.LL.LLLL.LLLLLL.LLLLLLL.LLLLLLLLLLLLLLLL.LLL.LLLLLLL
.LLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLL.LL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLL.LLL.LLLLL.LLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.L.LL.LLLLLLL.LLLLLLLLL.LLLLLLL.LLLLLLLLLL
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLL..LLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.L.LL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LL.LLL.LLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL..LLLLLLL.LLLL.LLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
.L..L..L..........L...L.LL..L...LL....LL..LL..L...L.LL.L.L..LLLL..L.L....L.......LL........L.L..L.
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LL.LLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLL.L.LLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL..LLL.LLLL.LLLLLLLLLLL.LLL.LLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLL.LL.LL.LLL.LLLL.LLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLL.LL.LLLLLLLLLLLL
LLLLLLL.L.LLL..LL.LLLLLLLLLLLL.LLLLLLLLL.LLL.LLLL.LLLLL..LLLL..LLLL.L.LLLLLLL.LLLLLL.LL.LLLLLLLLLL
L.LL...L..L..L.....L...L..LL...L..LL.L.....LL.LL.L...LL.LL...L....LLL.L..LL.L.L.LL..L..LL.L.L.L..L
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLL..LLLLLL.LLLL.LLLLLLLL.LL.LLLLL.LLLL.LL.L.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.L.LLL.LLLL
LLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLL..LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL..LLL.LL..L.L.LLL.LLL.LLLLLLLLL.LLLLLLLLLL
L...LLL.L......LL....L.......L..L.LLL..LL.LL.L.....LL.LL.L....L.L....LL....L....LL...L.L.....L....
LLLLLLLLL.LLLLLL.L.LL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LL.LLLLLLLL.LLL.LLLLLLLLL..LL.LLLL.LLLLLLLLLLL..L.L.LLLLLLL.LL.LLLL.LLLLLLLLL.LLLLLLLLLL
....L.L..L.L...L....L..L...L.LLL...L..LL.L..L.LL.L....L.................L...LL.LL......L...L...LL.
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLL..LLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.L.LL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LL.LLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLLLLLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
.....L.LLLL.L.........LL.L..L...LL..LLL..L......LLL.....L.......L.LL.L.L........L...LLLLLL.L..LLL.
LLLL.LLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLLL.LLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.L.LLLLLL.LLLLLLLLLLLLL.LL.L.LLLLLLL.LLL.L.LLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL..LLLLLLLLLL.LLLLL.L.LLLLLLL.LLLLLLLLL.LLLLL.LLLL
LLLL.....L.L...L.....L..L.L..L......LL..L...LL...L.LLL.L.L..L....L......LL.LL.L..L.L....L...LL..LL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.L
LLLLLLLLL.L.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LL.LLL..LLLLLLLLLLL.L.LLLLLLLLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLLL.LL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLL.LL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LL.L..LLL.LLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLLLLLLLLLL.L.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.L.LL.LLLLLL.LLLLLLLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLLLL.LLLL.LL.LLLLLLLLLLLLLLLLLLLL
..LL.LL...L....LLLLL.....L.L..LL.L...LLLL.............L..L.LLL..........L.L...LL..LL.....LL.......
LLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LL.LLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLL..LLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLL.LL.LLLL.LLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLL.LLLLLLL.LLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLL.LLLLL.LLL.LLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLLLL.LLLL.LLLL.LLLLLLL.LLL.LL..LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LL.LLL.LLLL.LLLL.LLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL..LLLLLLLLLL
..LLLL.LLL...LLLLL..........L...L......L..LL.....L..L..L..L.L..L..L.L..L.......L..L....LL.L.L.L.L.
LLLLLL.LL.LLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLLLLLLL.LLL.LL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLL.L.LLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLL..LLLL..LLLLLLLLLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLL.LLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLL..LLLLLLLLL
LLLLLLLLL.LLLLLL.LLLLLLLLLLLLL.LLLLLLLL.LLLL.LLL..LLLL.LLL.LL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LL.LLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLL.LLLL.LLLLLLLLLL
LLLLLLLLLLLLLLLL.LLLL.LLLLLLLL.LLLLLLLL.LLLL.LLL..LLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL...LLLLLLLLL
L.LLLLLLL.LLLLLLL.LLL.LLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLL.LLLLLLLLLLL.L
LLLLLLL.L.LLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL..LLLLLLLLLL..LLLLLLL.LLLLLLLLLLLLLLLLLLLL
.LL...............L..L.L.LL...L.LL.....LL..L.LL.L.L...L.......L..L.LL..L.L...LL...L...............
LLLLLLLLL.LLLLLL..LLL.LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLL.LLLL.LLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLL.L.LLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
LLL.LLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLL.L.LLL.LLLLLL.LLL.LLLL.L.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLL.LLLLLLLL.LL.LLL.LLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLL
LLLLLLLLL.LLLLLLLLLLLLL.LLLLLL.LL.LLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLLLL
L.LLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLL.LLLL.LLLL.LLLLLL.LLLL.LLLLLL..LLLLLLL.LLLLLLLLL.LLLLLLLLLL

View File

@@ -0,0 +1,768 @@
S1
F17
S3
F56
W5
F11
N4
F94
W4
S1
L180
E2
F38
S3
F46
L90
N2
S3
W3
L90
E1
L180
F73
L90
E1
N3
R90
S5
E5
L90
W2
F1
E5
R270
W3
S4
W5
F55
E2
L90
W5
L90
E1
L90
F9
W5
F21
E4
F63
E1
F48
N1
F80
E5
L90
N1
E1
S4
R180
F48
F87
N5
W2
F90
S4
E5
F76
F37
R180
E5
F51
S3
R90
F79
F25
L90
W1
F100
S2
E3
L90
N1
W4
F41
S5
L90
W5
L90
W2
S4
W3
F75
L90
F20
E5
N5
R90
F99
N4
N1
L90
N5
N2
E2
S4
F29
L180
N1
W3
L90
W3
L180
F84
F25
E1
S3
R90
F64
L90
E1
F40
N3
R90
N3
F67
F37
L90
F17
E4
F87
N3
W5
S2
R90
E4
N1
W4
F75
E2
F18
R90
F6
S4
F13
E1
L270
F50
W2
R90
W4
S5
R90
F14
L180
N5
L180
F78
E1
S3
R90
E2
R270
E4
S1
L90
L180
F91
W3
W5
F45
N4
F44
L90
N3
L90
S2
L90
F76
W3
R90
F3
W3
F24
L90
F83
W2
F19
S4
L90
N4
E5
L180
N5
W5
F67
S3
R90
E4
F51
L90
E5
L90
F79
E2
N2
W4
E2
L90
F41
E4
N2
L90
N2
L90
N3
F51
F79
N2
W2
N5
W4
F60
N3
R90
W4
S1
F59
W1
F3
N5
L180
N5
F23
N4
E3
R90
F14
W4
F86
L90
N2
S1
W3
R90
N1
F25
L90
F22
E5
F88
L270
F14
N5
F32
N1
F98
S1
W2
E5
L180
E4
S2
F46
L180
W4
F87
E2
F83
R90
S5
F68
E5
F95
N1
F43
E2
F64
S3
F5
S1
W3
L90
E4
L90
F63
S3
F44
N4
R90
F95
S5
W1
N4
W4
F87
W3
N3
L180
W4
R180
N2
E2
N2
L90
W5
R90
W1
F22
L180
N4
W1
S1
R90
N3
R180
S5
W4
R90
E3
S1
E3
N1
L270
F96
E2
N1
F98
W4
L90
W1
W4
R90
W2
S3
F64
S3
F67
N2
R180
S5
F13
N4
F53
W1
N1
L90
F54
S1
E2
F28
R90
W3
L90
E3
N4
F34
R90
F51
L90
F24
R180
W4
N2
F88
F78
S2
E1
N2
L180
F58
E4
R90
N4
L90
N5
R180
N5
R270
W3
F41
S4
F61
R90
F71
S1
F9
R90
F47
W2
N4
L180
W5
F52
L90
N4
F11
W3
L90
W5
N4
F10
S1
F75
S5
L90
S2
F28
L90
F80
E3
R180
E4
F42
E4
F85
N1
W4
R90
E2
F38
R90
F77
F95
L90
S5
F86
R90
N1
E2
R90
N3
F28
R180
N5
F25
E3
F52
N4
E3
N4
E3
F37
L180
N1
E2
L180
E5
F82
N4
F100
N3
E3
L90
W3
S1
R270
E5
W5
R90
F44
F15
R180
S3
L90
E4
F44
R90
N1
E4
N4
F62
R90
S4
L180
S1
F13
E3
F70
L270
F52
L270
F80
L90
F89
N4
F79
W5
F55
R90
F62
E4
F91
R180
E2
F74
R90
F18
L90
E3
N5
E2
R90
W2
R180
N3
F69
W3
R90
F92
E2
F48
N2
L90
S3
F49
E3
L180
F6
R90
S5
F58
F67
E5
S2
L90
W5
F3
S1
F73
W1
E4
R180
N3
E2
F72
L90
S1
F31
W1
F44
L180
F100
W3
N1
W5
L90
S2
N3
R90
W4
S5
F62
E5
F55
L180
W2
L90
E1
F45
S3
W2
F49
N4
L90
E3
N2
R180
E5
N1
N5
E5
R90
W3
F73
E3
F66
L90
S2
E3
F100
S3
W2
S4
W5
R180
E4
S3
S1
W2
R90
F22
R90
F76
L270
S5
F95
L90
N3
F16
R270
S3
N5
F66
R90
F63
W5
F37
N2
L90
W1
F68
R90
F98
E4
S3
R90
E2
S1
F91
E1
F42
E1
F13
S4
F10
R180
E4
R90
N2
W4
L180
N5
R90
N3
F26
R90
F42
L180
E5
S3
L90
S3
E3
F79
R270
E4
F54
N5
W3
F16
W1
S3
R90
F100
S1
W3
N2
E1
S4
F1
R180
F66
W2
R90
W2
F27
E2
F16
R90
S3
F61
E1
F4
L90
N5
F45
L90
N1
L90
F50
W1
R90
N1
F44
S2
F53
S5
F59
E4
S3
E2
N5
E2
L90
E4
L90
N1
L90
N5
F31
R180
N2
F18
E2
F27
L90
F57
R90
F40
R180
E2
F94
S3
E2
S4
E4
R90
L90
E5
N5
E1
N3
F97
S3
F16
E3
W5
F80
S1
W2
S4
F18
N4
E5
R90
N1
F43
N4
E4
N1
E2
W1
F99
W4
F79
F20
E3
F63
W4
F21
E1
F82
E3
R90
F8
N5
W2
L180
W5
F13
S2
L90
N3
R180
N4
F9
L90
F39

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,323 @@
.#..#.....#....##..............
...#.#...#...#.#..........#....
#...###...#.#.....#.##.#.#...#.
#.....#.#...##....#...#...#....
##.......##.#.....#........##.#
#..#....#......#..#......#...#.
#..#......#.......#............
##...#.#..#...#........#....##.
#.#.#...#...#..#........#....#.
.......#...........##......#...
##.##.##......#..#............#
..#.###..#..............#......
.##..#.....#......#.#..........
........#.........#....#....###
#..........#........#.#.#......
...##.....#..####.###..#.##....
....#...###............#..#....
...#.#...#.#...#..#.#........##
.....#...#.............#..#....
....#.#.#.##.....##.##....#....
..#....#............#.##.##..#.
.#..#..#................#...###
#..###.#..##..#............#...
.......#.#....#.##.#.##........
##...###.#....#...........###.#
...#.#....#..####.........#....
....##........#.#.#.###........
#...#..#.....#....##..#.##...#.
##....................##..#....
.#....##...........##...##...#.
.#.#..#.........#.........#.#.#
#.#..#.....#.#..#..#..#.#......
...#.............#......#....##
....#.#.......#....#...#.##...#
#.#.#..###..........#...#......
......#.....#..#..#.......##..#
.#......#......#.....#...#.....
......#..#......#.#............
..#............#..#....#.#.....
.....#..##.......#...##.###.#.#
.....#........##....#.#...##..#
..........##.#..#.#...#..#....#
#.#.#.#.##...................#.
.....#....##.....#..#...#..#...
...#....#.............#....#.#.
.........#.##..##..............
#...#.#....#..#...#.......#....
.#...#......#.##.#...#.#..###..
..#.#.#......#..#...##..##.##..
.........#.....#......##....##.
...###.......#..#........#.....
...#....#...#.#.#......##....#.
.#.....#......#...##.##..#.....
..#.##...#....####...##........
..#.#.###....#..##.......##....
.....#....##...#......#.......#
.#....#......#..............#..
.......#.#......#..#....#.#.#..
.......#.#.........###....#....
.#...#.......#.#..#..####....#.
..#...#.#......#..#.##.###..#..
..##.........#............#.#.#
#.........##.##.........#.###..
...#....#.......#..#..##.......
.#....##........##.......#..#..
...#.....#.#.##.#.#.....##.....
.#.#........#.......#.#..#..#..
.....####..##.##.#.#....#......
..#.##.#.#.#....###..#....#.#..
..##..#.#......##.#..#.........
....#..#.#.##.......#...##.....
....###.....#..###...#....###.#
..#....#.......#......#...##..#
..#..##......#....#.###..#..##.
..#..#...............#.#.#.....
...##...#.#..#.#...#......#....
#....#...#.#.#.#.#....#....#...
....##...#....#.....##..#.....#
......##.....#...##..#.......#.
......###......#....#.##..#....
.....#........#........#...#..#
.#..##.....##....#.#......#.#..
#..#.#.....#........#......#.#.
.#..#.##.....#####.#....#.#....
....##........#..........#.#...
.......#.....#.......#...#.#...
.#....#...##.###....#.#......#.
#...#...........##.#...........
#...##.......#..#........#.#..#
.....#..##..###....#.#.#....#..
..#..#.....#............#.#....
............#......#.....#.....
.#..#.....##.........#....###.#
#.........#....#....#.#..#...#.
##.#...##....#..#...#.#...#....
....###..##...................#
....##...#......#...#.#...#...#
#....#....###..........#...#..#
.....##.#....###.###....#..###.
#.....#...........#...........#
##..###.##........#..#.#..#.#..
.##...#..#.......#.#....#.....#
......##..#..#.......#.#...##..
......#..#..#.#...###..#.#....#
#.##.#..#......#...##........##
.....#..........##.....#...#...
........#....##......#......#.#
..#..#.#...#.#.#.......#......#
.#....#........#............#..
......##.....#...#.............
#......##..#.......##....##.#..
.....#..#..#...#.......#..#....
...#..##.#..#.#....##.....#..##
......#...#.#...#.#......###.#.
.#.#...#.....#..###.....#......
#..####.#....#.......##...#....
.##.......#.....#.........#....
#......##.#...............#....
.######.#...##...#...#...#..##.
....#...####....##.#..#...##...
.#...................#.#..#..#.
.#.#....##...#...#.#..#.#.#.#..
......#......#........##.#...#.
##..#...#..#.............##.#..
#.............#..........#.#...
...##.....#.............#......
......###.....#................
#.#.#....#..##.#.....#.........
.#.#........#.........#.#.##.#.
......#...##...#.#.....#....#..
#...#.........##.##.#..........
#..............#..#.......##...
#...#......#.#......#...#....#.
...#...#........#.#......#.###.
##.....#...#.#..#..#..#.......#
..#.##..##.........#...##.##...
#....#....#.....#..........#...
#.####..#..###.....#..#..#.....
..#.....#.##.##..####....#.#.#.
...#.#....#...#.......#..#.....
......###...#.#..#..#..........
.........#..#.....#.#.##......#
.......#.#....##.....##.#..#.#.
.#..#.#..#......##.###...##..#.
....###...........#.....#....#.
.#.##.....#..#.....#......##...
#..##....#..........#.##.##..#.
.###.#.#..#.#.....#..##....#.#.
..##.#....#.....##..#..........
##........#...#..#........###.#
#...#...........##.......#.#...
...###.....##.#....#...#...#...
......#....#.#.......###....#..
...#...#.......##.......###.#..
..............#.#..........##..
#.#....###..#..#.........#.....
.###.#.......#.....#....#.#....
.....###...#.#..#.#.......#....
.........#.##.#......#.#..#....
.......#....#....#.#....#..##.#
...............#...##.#..#.#..#
.....##........#..##...........
.##.#..#....#..#.#...#.........
.#.#..##.#..#......#....#.#...#
##....#.......##...........#...
..#...#.............#.#....#..#
..#......#..#.....#...##.....#.
....##...#.#...##...#..##......
.....#..#..........#...........
..##....#..#.#....#..#........#
.###....#.....#.#....#..##.....
#.......##.......#..#..#....#.#
.##..#...........#..##..##..#..
.#.................#...#....#..
.######.......#............##..
.#.........#......##.#.#.#.#.#.
.#.......#...#...#....###....#.
....#...##.#.#...#.....#.#..#..
.#..#..#...#.....###....#......
...#.##.###........#.....##....
..#....#.#.#..........#..#..#..
......#.....#...#..#..##..#.#..
#.#.......##.......#....#.....#
..#...#..#.#....#.##.##........
..#....#..##..#..##......#.....
#....#..##.....#....###........
##...#......#..###.#.....#.....
#..###....#...#...#...#......##
.....###....#......#..#..#...#.
.##......#.......##...#........
....#.#.....##.....#.....#.....
...##.#.....#..##...#...##.#...
..#...#.#....#....#...##.......
......#....#..#....#.#.........
..........#.#.#...##....#......
...#....................#..#...
...#....###....#..#.....#.....#
..#....#....#..#.#..##.#...#...
..#.##....##.....#.#........#..
#.....###..#.#.#...#..#....#...
........#..#.#..#........##....
.##....#................##.#.##
..##...#.#.#.....##..#....#....
....#..#....#..#........#..##..
...#...##....#....#..##......#.
##........#...#.....#.....#...#
.#......#....##...#.........##.
##........#...#.....#..#...#.#.
...##..#..#.....#..###.#..#....
....#..#..............#.......#
.......#.##...#......#.###.....
#........##..##....#.#.#.......
#.#..##.#.......#..##.....###..
.....##...#..#.....#...........
...#..#..#......#...#.#........
.#....#....#.#.....#.....#....#
...#..#...#..#.##.#......#.#.#.
..##....#..#..#.....#....#....#
...#....#.##.#..#.###......#...
.......#..#.....#.......#..#...
..###.#####..#..##.#.........#.
...#.......##...#.#..#.#......#
....#...#.###..#..........#....
...........#...#..##........#..
.......#...#....#....#.#..#....
.........#..........#...#....##
.##.........##..#.......##.#...
........#......###...##...#.#.#
#.#...##.##...........#...#.#..
.....###...#..##......#..#.....
#.#.....#.#....##..........#..#
#..#.......#.#.........####....
#.#...#.....#........#.....#..#
.....#..#.#.###.....#.#.###....
.###..#......##..#..#..........
#....#.#......#...#.##......#..
..#.........##.#.....#.........
...#....#.....##.#..#..##.#..#.
##.....#.#..#.#....#......#....
....###.#.....#.......#..#.#...
#.....##.....##...........#....
..........#..#......#.##...#...
#...#.###....##....#.###..###..
##........#.#...#..#.........#.
##........##.......#.....###...
.##....###........#..##...#...#
......#..##....##.....#..#.#...
.....#..##..#.......#.......#..
......#....#.......##.#........
.#.####.#..#......#..#.........
.##..#....#...##.#....#....#...
..#..#..#####.........#...#....
....#.....#.#.#.#...#.#......#.
....#...#.#..#.##...#...#......
..#...#...#...#...#..#.#.##..#.
..#......#.#.#.##.##.##..#.....
#..###......#.##...#....#.##.#.
.#.#.......##..##....##...##.#.
.##......##....##.#.......#...#
..#...#...................#....
.#...#.......######.....#.#..##
......#.##.....#.#.............
...........##.#........#..#....
#.............#.#.....#....##..
#...........#...#..###.....#...
....#.......#.#..#..#.#........
......#...##.......#..##....#..
......#.##.##..#........#.#...#
.#..#...##...................#.
.#.............#...#.#.#.#...#.
.........#.....#........#.#....
#..#...#.............##.#.....#
...#.#....#...##............#..
..#...#.##.###.#.....#......##.
...#.#..###...#.#............#.
...#....#........#.#...........
.#......#.#.#.........#.#....#.
....#..#......#.##.....#.#.....
..#..###....#....#.........###.
#..#.#....##.#....#.##..#......
#..#.....#.#.....##..#.##......
......#...#.#.............#..#.
#.#....#.#..#...#......#.#.....
..#.........#.#....#...#.......
.#..#.#...#....#...#......#...#
.......#........#.#..#..#...#..
..##.#......#..##.##.#..#..#...
.##...#....##.....#.....#...##.
#.....##.#....#.#......##..#...
.......#.#..#...#.......#.#...#
..#...#.......#...#..##........
#....##..#...#..#.#......#..#.#
##.#....#....#....#...#..#.##..
###........#.#..#..#......#....
.#......#.....#....#.#..#...#..
.#.....#.....#...##.......#..##
#..##.#..#..........#..........
...#.##.........#.#.##.#.......
.#..#...............#...#.#.#..
.....#.#.....#...####..#.....#.
.#....#.##..##...#...##.#...#.#
....#......##...#.#.#.....#.##.
#...#..#.#...#.#.....##...#....
..#..#....##..###......#..#....
.........#......##.....##....#.
.......#....#...#........###...
.....#..#..#...#...#......#....
..#..#...#.....#.....###..#.###
............#.#..#..#....#.....
...#..#...###.......#.......#..
#.........#........#.....##....
.#.#........#.....#........###.
....#.##.#...#.#.#.....#....#..
.##...#..#.......#.#...........
##...#.##...#...........#.....#
##....#.#.....##..#.......#....
##....#...#....#..#.......####.
......#...#..#.....#.#....#...#
.......#.....#..###............
#.#.#..#.....#.............#..#
.#..#.....##.....#...#.......##
..#.##........##...........#.#.
....##.#..###.#.........#...##.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
ecl:gry pid:860033327 eyr:2020 hcl:#fffffd
byr:1937 iyr:2017 cid:147 hgt:183cm
iyr:2013 ecl:amb cid:350 eyr:2023 pid:028048884
hcl:#cfa07d byr:1929
hcl:#ae17e1 iyr:2013
eyr:2024
ecl:brn pid:760753108 byr:1931
hgt:179cm
hcl:#cfa07d eyr:2025 pid:166559648
iyr:2011 ecl:brn hgt:59in

View File

@@ -0,0 +1,932 @@
FFBBFFFLRL
FFBBFBBRRL
FBBBFFBLRL
BBFBFFBLRR
BFBBBFFLLL
BFBBBBBLLR
FBFBFBFLLR
BFBFBBFLLR
FBBFBFBLLL
BBBFBFBRLL
BFBBBFBLRL
FBBFFFBLLR
BFFBFBFLRL
FBBBBFBRLR
FFBBBBBRRL
FBBFBFFLRL
FBBBBBBLLR
FBBFBBBRRL
FBBFFBFRLL
FBFBBBBRRR
BFFBFBFRRL
BFBFBBBLLR
FFFFBFBLRL
FBFFBFFLRL
FFBFBBBRRR
FFBFFFFLRR
FBBBFFFLLR
FFFFFBFLLL
BFFFFFFLRL
FBBBBBFRLR
BBBFFBBRRR
FFFFBBBRLL
FBFFBBBRLR
BFBBBFFRRL
BBFBBFBLRL
BFBFBFFRRR
BBFBFFFLLL
FBFBFBFRRR
BFBFBFFRRL
BBFBBFBRRL
FFBBFBFLRL
FBFFFFFRLR
FBBFFFBLLL
FBBBBFFRLL
FFBBBBBLLL
BFFBBFFRLR
FFFBBFBRRR
FBBBFFFRLL
FFFBFBFLRL
BFFBBFFLRL
BFBBBBBLRL
BFFFFFBRRR
FFFBBFBLRL
FBBBFBFRLL
FBBFBFBLRR
BBFBBFFLRR
FBFFBBFLLL
FFFFFBBRLL
FFBBFFBRLR
BBFFFFFLLL
BFFFFBFLRR
FBFBBFFRRL
BFBFFBBLLR
FBBBFBBRLR
BBBFBFFRLL
BBFFBBFRLR
FFBFFBBRLR
FFBBBFBRLR
BBBFFFBLRR
BBFBFBFLRR
BFBBBBBRLR
BFFFFFBLLR
FBFFBFFRLL
BBBFFBBRLR
FFBBBFBRRR
BFBBBFBRLR
FBFFFBBLRL
FFFBFFFRLL
BBFFBFFLLL
BFFBBFFRRR
FFBFBFBRRL
FFBBBFBRRL
FBBFFBBRLR
FBFFBBFRLR
BFBFFBBRRR
BBFBFBBRLR
FFBFFFFRRL
BBFFBFFLLR
FBBFBFBRRR
BFBFBBBRRL
FBFBFFBRRL
FFFBBFFRLL
BFBFFFFRRR
FBBFFBFLLR
FFBFBFFRLL
FBFFBFBLLL
FBFBFFFLRL
BBFFFFFRRR
FBFFBBFLRR
FBFFFBFLRL
FBBBFBBRRL
BFFBFFFRLR
FFBBBBFLLR
BFFFFBFLRL
BFFBFFBRRR
FFBFBFBLRL
BBFFFBBRLL
FFBFBBFRRR
FFFBFBFRRL
FBFFBFBRRR
FBBBBFBRRL
FBFFFFFLLR
FFBFFFFLLR
FBBBBFFRLR
BBBFFBBLRR
BBBFFBFLRR
FBBFBBBLRR
FBBFBBFRRL
FFFBFFBLLL
FBFFFFBLLL
BBFFFFBLLL
FBFFFBFLRR
FFBFBFFLRR
BBFBFFFRLL
FFFBBBFRLR
FFBFFBBRLL
BBBFBFFRRL
BFFBBBBLRR
BFFFFFFLLL
BBBFFFBLLL
FBBBBBFRLL
FBBFBBBLLR
BBFBFFFRRR
BBFFFBBLLL
FBBFFBFLRL
BBFBFFFLRR
BFBFFBFRLL
BFFFBFBLLR
BBBFBFBLLL
BBBFFBFRLR
FBFFBFBRLR
BFBBFFFLLL
BBFFFFBLRR
BBFFFBBRRL
BBBFBFFLLL
BFBFFBFLLL
FBBBBFFLLR
FFBFFFFRLR
FFBBBFBRLL
BFFFFFFRRL
BFBFFBBLRL
BBFBBBFRLL
BFFFBFFLLR
BBFBFFBRLL
BFBBFFFRLL
BBFBBFBRLR
FFFBBFBRLR
BFFFBBFLRL
FFBFFBFRLL
FFFBFFBLRL
BFBBBFFRLR
BBBFFBBLRL
BFFBBBBRRL
FFBBFFFRLL
BFBFFBFLRL
BFFBBBBRRR
BBFBFBFRRL
BBBFFBFRRL
BFFFBFBLRL
FFFBFBFRLR
FBFFBBBLRR
FFFFBBBLLL
BBBFBBFLLR
BFFBFBFRRR
BFBFFFBRRR
BBFBBBBLLR
FFBBBBBLRL
FFBFFBFLRR
FFBBBFBLRR
BBFBBFBRRR
FFFFFFBRRR
BFBFBFBRRL
BBFFBBBLRR
BBFBFFFRLR
FBBFBFBLLR
BFBBFFBRLL
FFFFBFBLLR
BFBFFBBRLR
FBFFFBFRRR
BFFBFFFRLL
FBBBFFFRRR
FFFBBBFLLL
FBBBBBBRRL
FBBFFBBLLR
BBBFBFFLRR
BFBBFBFLRR
FFFBBBBRRR
BFFFBBFRLR
FBFFBBFLLR
FBFFFFFRRL
BBBFBBFLLL
BBBFFFFRLR
FFFFBBBRRR
FBBBFBBLLL
BFFBFFBLLL
FBFBBFBRLR
FFBFFBBLLR
FFFFBFFLRR
FBBFFBFLLL
FBFBBFBRRR
BBBFBFBLLR
BBFFBFBLLL
FFBFFBFRLR
FBBBFBBLRR
BBFBBFBLLL
FFBFFBFRRR
FBBBBFFLRL
BFBBFBFLLR
FBFBBBFRLR
BFBBFFBLLR
FFFBBBFLLR
FFFBBBFRRL
BFFFBFBRLR
BBBFBBFLRR
BBFBBFFLLR
BBFBBBBRLR
FBBFFFFLRR
FBFBBFFRLL
FFBFFFFRRR
FFFBBFFRRL
FFFBBFBRRL
FFFBFBFLLR
FFBBBBFRRR
BFFFFBBRRL
BFFFFBFRRR
BFBBBFBLRR
FFBBFFFRRL
FBBBBBBRRR
BBFBFFBLLR
FBFFFFBRLL
BFBBFBFLLL
FBFFFBBRLL
FBBBFFBLLR
BBFBBBFRLR
FBFBBFBLRR
FFFFFBFLLR
FBFBBBFLRL
FFBFFFBRRR
FFFBBFFLRL
BBBFFFFLLR
BFBFFFFRRL
FBFBFBBLLR
FBBBFBFRRL
BBFBBBBRRL
BFBBFBFLRL
BFFBBFFLLR
BFBFFBBRLL
FBFFBFFRLR
FBFBFBFLRR
BFBFBBFRRR
FBBBBFBLRL
FFBBBFFRRR
FFBBFFBRLL
FFBBBBBRLL
FBFFFBFRRL
FFFBBBFLRL
BBBFBFFRRR
FFFBFFFRRR
FBFFBFFLLL
FFBBFFBRRL
BFFBFFBRRL
FFBBBFFRLR
BBBFFFFRRR
BBFBFBBRRR
FBFBBBBLRR
BFBFBFBLLL
FFBBFFBLLR
BFFFBBBRLR
BFBBFBBRLR
BFFFFBBLLR
FBFBFBBRLR
BFFBBBFLLR
FBFFBFBLRL
BFBFBBBRLL
BFBBBFFLRL
FFFBFFFLRR
BFFBBFBRLL
FFBBBBFRLL
BBFFFBBLLR
FBFBFBFRLR
BBBFFFBRLR
BFFFFFBRLR
BBBFFFFLLL
FFFBBFBRLL
BFFFFFBRRL
FBFFBBBRRL
FBFBFBBLLL
FBFBBFBRRL
FBBFBBBRRR
BFBFFBBRRL
FBBBBFBLLL
FBBBBBBRLR
BBFFFBFRRL
FFFFBFBLLL
FFFFBBFLRR
FFFFBFFLRL
BFFFBBFRLL
BBFFFFBRRR
BFBFFFFRLL
BFFFFBFLLR
BBBFFBBRRL
BBFBBFBLLR
BFFFFBFRLR
FBBBFBFLLR
FFFFFBBLRR
BFBFFFFLRR
FBFBBFFLRL
FBFFFBBRRR
BBFBBBFLRL
BFBBBFFLLR
BFBFBBFRRL
FBFFFFBLRL
FBBFBFFRLR
BFBFBBBLRR
BFBFBBFLRL
BBFFBFFRLL
FBFFBBBLRL
BFBFBFFLLR
FFFBFFBLLR
FFFBFBBRRR
BBFBFFFLLR
FBBBFBFRLR
FBFFBBBLLL
FFBFBBFLRR
FBFBFFFLLL
BBFFFFFLRL
FBFBBFBLRL
BBFFFBFLLR
BBFBBBBRRR
BFBBBFFRRR
FFFBFFBRLL
FBBBFFFRLR
BBBFBFBLRL
FBFFFFBRLR
BFFFFFBLLL
FBFFFFBLLR
BFBBFFBLRR
BFBFBBBRRR
BBBFBFBRRR
FFFBBFFRRR
FBBBFFFLRR
BBFBFFFRRL
BFBFBBFRLR
BFFFBFBRLL
FBFFFFFLLL
FFFBBBBLRL
FFFBBFFLLL
FBFFFFBRRR
FFBFBFBRLR
BFBFFFBLRR
BFFFBFBLLL
FBBFBFFRLL
FBFBFFFRLL
FBBBFFBRRR
FBBBFFBRLL
FFBBFBBLLL
FBBBBFBRRR
BFBBBFBLLR
FBBBBBFLLR
FFBBFBFLRR
BFFBBFBLLR
FBFFFFBLRR
BFFBFFFRRR
BFFFBBBRLL
FBFBBBFRLL
BFBBBFBRRL
FFBFFFBRRL
FBBFFFFRLR
BFBFBFFLLL
FFBFBFBLLL
FBFBBFBRLL
FBFBFFBRLR
BFFFFFBLRR
FBBBFFBRLR
BFBBFBBLLL
BBFFBFBRRR
FFFBFBBRRL
FFBBBFFRLL
BFFFFFFRLL
BFBFFFBRLL
FFFFFBFRLL
BBBFFFBRRL
FFBBBBFRRL
BFFFBBBLRL
FFFFFBBLLR
BFFFFBBLRR
BFBFFFBLLL
FFFFFBBRLR
BBFBFBFLLL
FBFBBBBRLR
FBBFBFBRRL
FFBFBFBRRR
FBBBBBFLRL
BBFBFFBLLL
BBFFFFBRLL
BBBFBFBRLR
BBFBFBBLLL
BFBBBBBLRR
BBFFFBFRRR
FFFBFBFRLL
BFFBBFBLLL
FBFFBBBRRR
FFFBFBFLLL
BBFFBBFLRL
BBFFFFBRLR
BFBFBBBRLR
BBBFBFFLLR
FFBBBBFRLR
BBFFBFFRRL
BBFBFFBRRR
BFBFFBFLLR
FBFFBBFRLL
BBFFFFBLLR
FBFBFFFRLR
FFBFBFBLLR
BFBBFFBRRL
FBBFFBBRRL
BBFFBFBRLR
FFFFBFBLRR
FFFFBBBLRR
FFBFBFFLLL
FFBBBFFRRL
BBFFFBFRLL
FBFBBBFLRR
FBBFBFFRRR
FBBFBFFLLR
BFFBBBFLRR
FBBFBBFRLR
BFFBBBFLLL
BBFBBFBRLL
BBBFFBBLLR
BBBFBFBRRL
FBFBBBFRRL
FBBFFFBRLR
BFBBFBBLRL
FFBBFFFRRR
BFBFFFFRLR
BBFFFFFLLR
BBFBFFBRLR
BBFBFBFLRL
FBFFFFFLRL
FFBBBFFLRL
FBFBFBBLRR
FFBFBBBRLL
FFBFBFFRLR
FBBBFBFLRR
FBFFBFFLRR
BBFFBFBRRL
FBBFFFFLRL
FFFFBBFLRL
FFBBFFBLRR
BFBFFFBLLR
BFBFBBFLRR
BFBFBFBLLR
BFBBFBFRLL
BFBBFFBRLR
FBFFFBBLLL
FFFBBBBRRL
FBBFBFFLLL
FBFFBFBRLL
BFFBFFFRRL
FBFBFFBLLR
BBFFBBFLLL
FFBBBFBLLR
BFBBFFFLLR
FBBBFBFRRR
FBBBFFBRRL
FFFFBBFRRR
FFBFFFFLRL
FBBFBBFLRR
FFBBBFBLLL
FBFFFBFRLR
FFBFFBBRRL
FFFFBBFRRL
BBBFFFFLRL
FBBFFFBLRL
FFBFBFBLRR
FFFFBFFRRR
FFFBFBFRRR
BBFBBBBLLL
FFBBFFBRRR
FBBFFBBLRR
FBBFBBFLLL
BBFBBBFRRL
FFFBBBBLLR
FFBFFBBLRR
BBFBBFFRLL
BFBBBBFRLL
BBFBFFBRRL
BFFFBBFRRL
FBBBBBBLLL
FFBBFFBLLL
FFBBFBBLRR
BFBFBFBLRR
FBBBFBBLLR
BBFBFBFRLL
FBBFBFFLRR
FBBBFBFLLL
FFBBFFFLRR
BFFBBBFRLL
FBBBBFBLLR
BFBFFFFLRL
FFBFBBBLLL
FFBFFFBLRR
BFBFBFBRLL
FBFBFBFRLL
BFBBBBBLLL
FFBFBFBRLL
BFBFFFFLLR
BFFBBBBLLL
FFBBFBBRLL
FFFFBFBRLR
FBFBBFFLLR
BFBFBBFRLL
FFBFFFFLLL
FBBFFBFLRR
FFBFFFBRLL
FFFFBBBLLR
BFBBBBBRLL
FBBFBBBLRL
FBFFBBBRLL
FBFFFBBLLR
FFBBBFBLRL
FFFFBFFRLL
BBFFFBBLRL
BFFFBFFRRL
BFFBFBFLLL
BBFFFBFLLL
FFFFFBFLRL
FBBFFFFRRR
FBBBBBFLRR
FFBFFFBRLR
FBBBFFFLLL
FFBFBBBLRL
FFBFFFBLLL
FBFFBBBLLR
BBBFBFFRLR
FFFBFFFRLR
BBFBBBFLLR
FFBBFFFRLR
FFFFFBFRLR
FBBFFFBRRL
BFFBBBBRLR
BFFBFFBRLL
BFBBBFBRLL
FBFFBBFRRR
FBFBBFFLLL
BBFBFBBLRL
BBBFBBFLRL
FBFBFFBLRR
FBFFFFFRLL
BFBBFBFRRR
BFBFBBBLLL
FFBBBFFLRR
BFBBFBBLLR
FBBBBFFRRR
BFFFBFFLRL
FFFFBFBRLL
BFFFFBBLLL
BFFBFBBLLL
BFFBFBBRRL
BBBFFFBLRL
BBBFFFBRRR
BFFFBBFLRR
FFBBFBFRLL
BFFBBFBRLR
FFBFFBFLLR
FBFBBBBLRL
BFFBBFFRRL
BBFFFBBRRR
FBBBFBBRRR
BFFFFBFRRL
FFBFBBBRRL
BFFFBBBRRR
BFBBBFBRRR
BFBFBFFRLR
FFFFFBBRRR
FBFBFBFLRL
FFBBBBBLRR
BBFFFFBLRL
FFFBFFFLLR
FFFBFFFRRL
FBBBFBBLRL
BBFFBBFLLR
BBFFBFFLRR
BFFFFFFRLR
FBBFBBFRLL
BFBBBBFRRR
FBFBBBBLLR
FFFBBFFRLR
FBBFBBBRLR
FBBFBFBRLR
FBBBFFFLRL
FFBBFBBRLR
BFFFBBBLLL
BBFBBFFRRR
FBFBFFFLRR
BBFFBBFRRR
FBBFBFFRRL
BFFFFBFLLL
BBBFFBBLLL
BFBBBBFRRL
FBBFFFBRRR
BFBBBBFLLL
FFFBFFBRRL
BFFBFFBLLR
FFBBFBFRRL
FBFFFBBRLR
BFFFBBBLRR
FFBFBFFRRR
FBFBFFBRLL
BFBBBBFLRL
BFBBFFFRRR
FBFBFBFRRL
BBFBBFFLRL
FBBFFFFLLL
BBBFFBBRLL
FBFFFBBRRL
FFBFBFFLRL
FBFFBBFLRL
BFFBFBFLRR
BFFFFBBLRL
BBFBBBBLRL
FFBFBBFRLL
FBFFFBFLLL
BFFBFFBLRL
FBBFFFBLRR
FFFFBFFRRL
FBBFFBFRLR
BFFFBFFRRR
FFFFBFBRRL
BBFFBFBLRL
FBBFBFBRLL
BFBBFFFLRL
FFFBBBFRRR
BFFFFFFLLR
FBFBBFFRRR
BFFFFFBRLL
FFFFBBBRRL
BFFBFBFLLR
FFFFBFFRLR
BFFBBBFRRL
BFBBFBBRLL
FFFFFBFRRL
FFBBBBFLRL
FFBBFBFLLR
BBFFBBBRLL
BFFBFFFLLR
BBFBBBBRLL
BFFBFBBRLR
FFBFBFFRRL
FBBFBBFLRL
FFBFFBBLRL
BFBFFFBRLR
BFFBFFFLRR
BFFBBBBLRL
FFFBFBBRLR
FBBBBBFRRR
BFBFBFFLRL
BFBFFFBLRL
FBBBFBBRLL
FBFBFBFLLL
FBBFFBFRRR
FFFBFBBLRR
FFFBFFFLRL
BFBFBFBRRR
BFFBBFFLLL
BFFBFBBRRR
FFBFFBFRRL
FBFFFBFRLL
FFBFBBFLLL
FFBBFFBLRL
FBFBBBBRRL
BFFBBFBRRL
FBFBFBBLRL
BBFBFBFRLR
FBFFFFFLRR
BBBFFBFRLL
BFBFBFFRLL
FBBFFBBLRL
FBFBFBBRRL
FFBBBBBRLR
FBBFBBFLLR
FFFBFBBRLL
BBFFFFBRRL
BFBFBFBLRL
FBFBBFBLLR
BBBFBFBLRR
FFFFBBFRLL
FFBBBBBRRR
BFBBFFBRRR
BFFFBBBLLR
FBBBBBBRLL
FFBFBBFRLR
BBFFBBFRLL
BFFBFFFLRL
FFBBFFFLLL
BFFBFBBLRL
BBBFFFFRLL
BBFBBBFRRR
FBFFBFFRRR
FBBFFFFRLL
BFFFBBBRRL
FBFBBBFLLL
FFFFBBFLLR
FBBFBBFRRR
BBFFBBBRLR
BBFBBFBLRR
BFFFBFFLLL
BBFBFBFRRR
FFBFFFBLRL
BBFFFBBRLR
FBFBFBBRRR
BFBBFFBLRL
BFFFFBFRLL
BBFBFBBRLL
BFFFFBBRLL
FFFFBFFLLR
FFBBBBFLRR
FBFBFFFRRR
FFFBBFBLLR
FFBBFBFRRR
BFBBFBBRRR
FFBFBBBLLR
FFBFFBFLLL
FFFFBBBLRL
FFBFBFFLLR
BFBBBFFLRR
FBBFFFFLLR
FBFFFFBRRL
BFFBBFFLRR
FFBBFBBRRR
FFFFBFBRRR
BFBBBBFLLR
FBBFFBBRRR
BBFBFBBLRR
FFFBBBBLRR
FBFFFBBLRR
BFFBFBFRLR
BFBFFBFRLR
BFBBFFFRLR
FFBBFFFLLR
FFFFFBFLRR
BFFBBFBLRR
FFFFBBFRLR
BFFFBBFLLR
FBFBFFBRRR
BBFBFBBRRL
FBFBBFFLRR
BFBFFBFLRR
BBFFFBBLRR
FBFFBBFRRL
FBBBBBBLRL
FBBFFBBLLL
BFBFBBBLRL
BBBFFFBLLR
BFFFBFFLRR
BBFFBBFRRL
BFBFBBFLLL
FFBBBFFLLR
BFBBFBFRRL
FBFFBFFRRL
BFFFBFBLRR
BFBBFBBRRL
BBFBFFBLRL
BFFBBBFRRR
FBFBBFBLLL
BBFFBFFRRR
BBFFBFBRLL
BBBFFBFLLR
FFFBBFBLLL
FBBBFFFRRL
BFFBFFBLRR
BBFBFBBLLR
FFBBFBFRLR
BBFFFFFRLR
FBFFBFBLRR
BFFFFFFRRR
FFBBFBFLLL
BFBBFBBLRR
BBFFFBFRLR
BBBFFBFRRR
FFFFBBFLLL
BBFFBFBLRR
BFFBFBBRLL
FBFFFBFLLR
BFFFBBFRRR
FFBFBBFRRL
BFBFFBBLRR
FBBFFBFRRL
FFBBBBBLLR
BFBFFBBLLL
BFBBBBFLRR
FFFFBBBRLR
BFFBBBBLLR
BFFFFFFLRR
BFFFFBBRLR
FFFBBBBRLL
BFBBFFFLRR
BFFBBBFRLR
BFFBBFFRLL
FBFBBBBLLL
BFBFBFBRLR
BBFBBFFLLL
BBFBBBBLRR
FFBBFBBLLR
FBBFFFBRLL
FBBBBFFRRL
FFFBBFBLRR
FFFBFBBLLR
FFFFFBBRRL
FBFBBBFRRR
BBFFFBFLRL
FBFBFFBLLL
FBFBFFFRRL
BFBFFFBRRL
BBFFBFFRLR
BBFFBFBLLR
FFFBFBFLRR
BBFBBBFLLL
BFBBBFFRLL
BFFFBFBRRL
FFFFBFFLLL
FBBBBBFRRL
FBFBFFBLRL
FBBBBBBLRR
FFFBBBBRLR
BFFBFBBLLR
BBFFBBFLRR
BFFFFFBLRL
FFBBBBFLLL
BFFBFBBLRR
FFFBBBFLRR
FFBFBBFLRL
FBBFBFBLRL
BBBFFFFRRL
BBFBFBFLLR
BFBBBFBLLL
FFBFBBBLRR
BFFBFFBRLR
FFFBBBBLLL
BFFFBFFRLR
BFFFBBFLLL
FBBBBFBLRR
FBBFBBBRLL
BFBFFBFRRL
BFFFFBBRRR
BBFFBBBLRL
FBBBBFBRLL
BFBBFFFRRL
BBBFFBFLLL
BFBFFBFRRR
FFBFFBBRRR
FFBFBBBRLR
FBBBBFFLRR
BFBFBFFLRR
BFBBBBFRLR
FFFFFBFRRR
BFFBBFBRRR
BFBBBBBRRL
BFFBBFBLRL
FFFBFBBLRL
FFFBFBBLLL
FFBBFBBLRL
BBBFFFFLRR
FFFFFBBLRL
FBFFBFBLLR
FBFBBBBRLL
BFFBFBFRLL
BFFFBFFRLL
BFFFBFBRRR
BBBFBFFLRL
BFFBFFFLLL
BBFFFFFRRL
FBFBFFFLLR
FFBFFBBLLL
BBFFBFFLRL
BBFFBBBLLL
FFFFFBBLLL
BFBBFFBLLL
FFFBFFBRLR
FBBFFBBRLL
FBFBFBBRLL
BFFBBBFLRL
FFFBFFBLRR
FBFBBFFRLR
FFFBBFFLLR
FBFBBBFLLR
FBBFFFFRRL
BBFBBBFLRR
BFBBFBFRLR
FFBFFFBLLR
FFBFFBFLRL
BBFFBBBRRR
BBFFFFFLRR
FBFFBFBRRL
FBFFBFFLLR
FBBBFFBLLL
FBBBFFBLRR
BFBBBBBRRR
BBBFFFBRLL
FBFFFFFRRR
BBFBBFFRLR
BBFFBBBLLR
BBBFFBFLRL
BBFFFBFLRR
FFFBFFFLLL
FFBFBBFLLR
BBFFFFFRLL
BBFBBFFRRL
FBBFBBBLLL
FFFBFFBRRR
FBBBBFFLLL
FFFBBFFLRR
BBFFBBBRRL
FFBBBFFLLL
FBBBFBFLRL
BBFBFFFLRL
FFBFFFFRLL
FFFBBBFRLL
FBBBBBFLLL
BFBFFFFLLL

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
abc
a
b
c
ab
ac
a
a
a
a
b

View File

@@ -0,0 +1,594 @@
posh crimson bags contain 2 mirrored tan bags, 1 faded red bag, 1 striped gray bag.
bright gray bags contain 1 striped white bag, 4 vibrant cyan bags, 4 clear white bags, 4 muted gold bags.
pale plum bags contain 1 dark silver bag.
light tomato bags contain 5 plaid brown bags, 5 bright maroon bags, 5 shiny beige bags.
wavy brown bags contain 2 faded lavender bags, 2 wavy coral bags, 5 clear gold bags.
dark chartreuse bags contain 4 striped lavender bags, 2 shiny silver bags, 5 wavy plum bags.
dotted chartreuse bags contain 3 shiny teal bags, 4 posh maroon bags.
muted purple bags contain 2 pale lavender bags, 5 drab red bags, 3 wavy fuchsia bags.
shiny gray bags contain 5 pale red bags, 1 light chartreuse bag, 5 bright blue bags, 3 light gold bags.
dull cyan bags contain 2 light green bags, 2 vibrant fuchsia bags.
dotted gray bags contain 4 light bronze bags, 5 dim blue bags.
muted plum bags contain 3 shiny brown bags, 4 shiny teal bags.
bright magenta bags contain 1 plaid yellow bag, 1 dull white bag.
dotted lime bags contain 4 shiny gray bags, 2 bright teal bags, 5 dim fuchsia bags, 1 vibrant chartreuse bag.
mirrored beige bags contain 2 plaid crimson bags, 3 wavy tomato bags.
pale purple bags contain 2 faded chartreuse bags, 2 dark lime bags, 4 drab white bags, 4 shiny olive bags.
dull bronze bags contain 3 bright lavender bags.
striped bronze bags contain 1 dark olive bag, 5 dotted orange bags.
vibrant orange bags contain 1 plaid plum bag, 1 faded lime bag, 1 clear lavender bag, 1 muted brown bag.
dull blue bags contain 5 dotted tan bags, 2 light crimson bags.
mirrored red bags contain 1 shiny crimson bag.
vibrant coral bags contain 1 vibrant gray bag.
plaid tan bags contain 4 clear magenta bags, 5 posh brown bags, 5 drab lime bags.
dark yellow bags contain 2 striped bronze bags, 3 shiny tomato bags.
mirrored lime bags contain 3 bright orange bags.
mirrored salmon bags contain 3 dark white bags, 5 clear salmon bags.
light crimson bags contain 1 plaid cyan bag, 2 pale silver bags, 5 pale violet bags, 1 shiny crimson bag.
clear white bags contain 2 muted blue bags, 5 dotted olive bags.
muted magenta bags contain 4 dark purple bags.
clear red bags contain 4 dark gray bags, 3 striped beige bags.
plaid gray bags contain 3 faded olive bags.
posh teal bags contain 3 pale gray bags, 3 dim beige bags, 2 dark gray bags, 1 shiny coral bag.
pale violet bags contain 5 pale silver bags, 2 shiny crimson bags, 5 dull olive bags, 2 drab magenta bags.
shiny purple bags contain 5 shiny indigo bags, 3 dotted green bags, 2 wavy blue bags, 3 light salmon bags.
mirrored gold bags contain 2 muted coral bags, 4 shiny lavender bags.
drab brown bags contain 1 posh lime bag.
dull salmon bags contain 5 dotted lavender bags, 3 plaid gray bags, 5 dim coral bags.
striped coral bags contain 5 muted brown bags, 3 muted plum bags, 2 dim aqua bags.
dark violet bags contain 5 drab chartreuse bags.
dark lavender bags contain 3 posh lime bags.
plaid fuchsia bags contain no other bags.
faded yellow bags contain 3 posh lime bags, 4 wavy blue bags, 3 faded crimson bags, 2 shiny lavender bags.
faded crimson bags contain 2 dim yellow bags, 5 drab chartreuse bags.
dull red bags contain 3 dark silver bags, 5 faded plum bags.
dull lime bags contain 1 dim black bag.
vibrant tomato bags contain 3 dull gray bags.
light tan bags contain 3 dim brown bags, 5 striped lavender bags, 2 dull indigo bags.
pale turquoise bags contain 4 posh plum bags, 5 striped chartreuse bags, 5 dim magenta bags.
dim gray bags contain 2 mirrored indigo bags, 3 dim white bags.
bright salmon bags contain 5 bright lavender bags.
faded coral bags contain 5 striped blue bags, 3 dark plum bags, 3 mirrored blue bags.
mirrored bronze bags contain 3 dark gold bags, 1 faded teal bag.
bright aqua bags contain 2 vibrant olive bags.
wavy purple bags contain 3 wavy teal bags, 5 dim olive bags, 3 muted blue bags.
bright crimson bags contain 5 drab blue bags.
bright white bags contain 2 light cyan bags, 1 posh silver bag.
striped turquoise bags contain 5 mirrored gray bags.
drab magenta bags contain 4 vibrant green bags, 3 mirrored black bags, 4 muted white bags.
clear teal bags contain 1 wavy bronze bag, 5 dark turquoise bags, 2 drab teal bags.
dull aqua bags contain 4 dim fuchsia bags, 3 drab green bags, 3 muted tomato bags.
posh coral bags contain 4 wavy bronze bags, 4 mirrored blue bags, 2 pale white bags, 3 shiny brown bags.
faded olive bags contain 1 muted brown bag.
muted white bags contain 1 vibrant green bag.
plaid violet bags contain 5 drab magenta bags.
clear cyan bags contain 1 clear gray bag, 1 mirrored gold bag, 4 mirrored white bags, 5 clear brown bags.
dull coral bags contain 3 bright blue bags, 1 light plum bag, 4 dotted violet bags, 1 dim teal bag.
plaid blue bags contain 3 dark plum bags, 1 wavy aqua bag, 1 plaid turquoise bag.
posh indigo bags contain 4 dim black bags, 5 posh orange bags.
drab plum bags contain 1 bright tan bag, 3 faded bronze bags, 5 plaid bronze bags.
mirrored aqua bags contain 2 striped coral bags.
posh salmon bags contain 1 mirrored tomato bag, 2 shiny red bags.
pale yellow bags contain 5 striped fuchsia bags, 3 muted gray bags, 3 plaid green bags.
faded purple bags contain 5 mirrored tan bags, 2 faded lime bags.
faded blue bags contain 4 bright green bags, 5 dark crimson bags.
dark beige bags contain 3 pale magenta bags, 4 vibrant lavender bags, 4 posh aqua bags, 3 striped fuchsia bags.
bright cyan bags contain 3 pale violet bags, 5 pale coral bags, 4 shiny black bags, 1 dark blue bag.
wavy green bags contain 1 dotted purple bag, 4 muted gold bags.
pale orange bags contain 1 drab tomato bag, 3 muted purple bags, 3 muted coral bags.
vibrant violet bags contain 1 wavy olive bag, 2 plaid chartreuse bags, 5 light cyan bags.
vibrant plum bags contain 5 light olive bags.
shiny silver bags contain 1 faded coral bag, 2 dotted olive bags, 4 mirrored red bags, 3 clear fuchsia bags.
bright blue bags contain 3 striped gray bags, 2 dotted indigo bags, 5 clear magenta bags, 3 dotted green bags.
dotted red bags contain 3 mirrored white bags.
light lime bags contain 5 bright purple bags.
bright purple bags contain 2 bright lavender bags, 1 clear turquoise bag, 3 pale magenta bags.
faded tomato bags contain 2 shiny turquoise bags, 5 dim crimson bags.
light brown bags contain 3 pale violet bags, 2 striped blue bags, 1 wavy lavender bag.
posh silver bags contain 2 bright silver bags, 5 dim olive bags.
shiny chartreuse bags contain 4 striped black bags.
dull violet bags contain 1 striped white bag.
posh chartreuse bags contain 5 wavy crimson bags, 1 vibrant orange bag, 2 mirrored tan bags, 5 shiny brown bags.
plaid green bags contain 2 light aqua bags, 5 dull fuchsia bags.
pale bronze bags contain 5 dull white bags.
muted violet bags contain 3 pale red bags, 5 dull red bags, 5 light cyan bags.
wavy aqua bags contain no other bags.
posh plum bags contain 3 faded green bags.
wavy lavender bags contain 1 light gold bag, 2 faded teal bags, 1 shiny tomato bag, 1 pale white bag.
dull silver bags contain 5 mirrored indigo bags, 1 dim red bag, 2 shiny coral bags, 2 drab tan bags.
light teal bags contain 4 bright lavender bags, 4 bright yellow bags, 5 wavy crimson bags.
shiny maroon bags contain 2 clear magenta bags, 3 striped blue bags.
mirrored turquoise bags contain 2 dark violet bags, 5 dark aqua bags.
light orange bags contain 2 plaid lime bags.
dotted lavender bags contain 1 striped olive bag.
posh magenta bags contain 1 plaid teal bag, 1 muted salmon bag.
drab tan bags contain 4 dull tan bags, 5 faded teal bags.
wavy olive bags contain 5 plaid aqua bags, 3 dull turquoise bags, 5 faded aqua bags, 2 plaid maroon bags.
muted beige bags contain 2 mirrored tomato bags, 4 dotted salmon bags.
muted chartreuse bags contain 1 plaid white bag, 1 dull beige bag, 5 vibrant maroon bags, 3 drab gray bags.
striped teal bags contain 4 wavy yellow bags, 1 dull lime bag, 1 pale green bag, 4 drab chartreuse bags.
pale green bags contain 1 dim violet bag, 1 mirrored beige bag.
dim lime bags contain 4 dotted aqua bags, 2 pale red bags.
clear purple bags contain 5 clear lavender bags.
plaid beige bags contain 1 bright olive bag, 1 light brown bag, 1 muted blue bag, 4 dotted green bags.
dark blue bags contain 1 dim red bag, 2 wavy cyan bags.
shiny lime bags contain 3 dull tomato bags, 2 bright gray bags, 1 pale fuchsia bag.
muted lavender bags contain 2 mirrored tan bags, 1 vibrant orange bag, 2 light gold bags.
drab violet bags contain 1 dotted beige bag, 5 faded purple bags, 1 pale green bag.
striped lime bags contain 3 plaid orange bags.
posh gold bags contain 3 dark bronze bags, 3 posh chartreuse bags, 1 clear lime bag, 5 shiny coral bags.
mirrored white bags contain 4 dull red bags, 1 pale crimson bag, 2 posh blue bags.
dotted brown bags contain 1 vibrant lavender bag, 3 dark lavender bags, 5 bright salmon bags.
faded salmon bags contain 2 mirrored violet bags, 5 dark chartreuse bags, 5 dull silver bags, 1 mirrored teal bag.
dull purple bags contain 2 light brown bags, 2 mirrored tan bags.
muted black bags contain 4 vibrant indigo bags, 2 wavy crimson bags, 4 light cyan bags, 5 dim salmon bags.
muted cyan bags contain 2 posh olive bags, 5 dark gray bags, 2 plaid green bags, 2 clear brown bags.
shiny violet bags contain 1 vibrant gray bag, 4 posh teal bags.
dim lavender bags contain 1 dim coral bag, 4 light silver bags, 3 dull teal bags, 3 wavy coral bags.
dotted tan bags contain 5 plaid tan bags, 2 plaid plum bags, 3 vibrant crimson bags.
faded aqua bags contain 3 light purple bags, 1 pale white bag, 5 muted turquoise bags.
drab coral bags contain 4 vibrant turquoise bags, 1 dull yellow bag, 4 clear turquoise bags, 5 dull beige bags.
mirrored olive bags contain 5 plaid magenta bags, 5 light indigo bags.
light salmon bags contain 2 dull plum bags, 1 striped blue bag.
vibrant magenta bags contain 5 muted lime bags, 3 dull tomato bags, 2 clear tomato bags, 3 dim brown bags.
dark brown bags contain 4 dull gray bags.
striped plum bags contain 2 plaid turquoise bags.
drab tomato bags contain 1 mirrored black bag, 1 dull beige bag.
dotted black bags contain 4 light cyan bags.
shiny plum bags contain 5 drab magenta bags.
plaid purple bags contain 1 dark black bag.
muted bronze bags contain 4 muted white bags, 1 dotted bronze bag, 3 bright crimson bags.
striped aqua bags contain 5 mirrored silver bags, 2 dim blue bags, 2 drab purple bags.
light indigo bags contain 1 muted olive bag, 5 shiny plum bags.
drab lavender bags contain 4 dotted aqua bags, 1 dull chartreuse bag, 5 drab teal bags, 3 light brown bags.
wavy fuchsia bags contain 4 posh maroon bags.
dim blue bags contain 2 mirrored purple bags, 2 dim gold bags, 3 vibrant chartreuse bags, 1 dull red bag.
muted olive bags contain 2 pale crimson bags, 4 mirrored green bags, 1 dim white bag.
striped tomato bags contain 4 posh tan bags, 2 pale crimson bags, 2 shiny fuchsia bags, 5 striped gray bags.
faded white bags contain 3 vibrant tan bags.
dotted gold bags contain 5 plaid gray bags, 5 mirrored cyan bags, 2 vibrant purple bags, 5 light orange bags.
vibrant crimson bags contain 2 mirrored violet bags, 3 faded chartreuse bags, 3 wavy lavender bags.
light lavender bags contain 2 light gold bags.
muted fuchsia bags contain 4 drab blue bags.
clear tomato bags contain 3 plaid aqua bags.
shiny fuchsia bags contain 1 wavy lavender bag, 5 striped blue bags.
shiny cyan bags contain 5 dim red bags, 3 dim brown bags.
wavy crimson bags contain 3 bright lavender bags, 2 faded plum bags.
light cyan bags contain 1 striped fuchsia bag.
mirrored crimson bags contain 3 wavy lavender bags, 4 vibrant tan bags, 5 faded plum bags.
dark tomato bags contain 5 mirrored gray bags, 5 muted fuchsia bags, 2 plaid lavender bags, 4 light purple bags.
plaid magenta bags contain 1 muted silver bag, 5 light lavender bags, 4 muted brown bags, 3 drab turquoise bags.
vibrant olive bags contain 1 plaid cyan bag, 5 drab white bags, 1 bright indigo bag, 5 plaid yellow bags.
dull crimson bags contain 5 pale silver bags, 3 posh blue bags, 5 dull olive bags.
mirrored gray bags contain 4 dull olive bags, 1 shiny fuchsia bag, 5 mirrored black bags, 2 clear magenta bags.
dim aqua bags contain 3 mirrored indigo bags, 5 muted maroon bags, 4 dark orange bags.
bright tan bags contain 2 bright teal bags, 5 vibrant indigo bags, 1 dull black bag.
dark white bags contain 3 dark violet bags.
dull black bags contain 5 posh cyan bags, 5 shiny tomato bags, 1 light yellow bag.
mirrored orange bags contain 3 posh coral bags, 1 bright silver bag, 3 faded plum bags, 2 dotted coral bags.
mirrored tan bags contain 2 pale violet bags, 1 dim gold bag, 2 faded green bags, 2 posh blue bags.
shiny turquoise bags contain 1 vibrant silver bag.
plaid chartreuse bags contain 4 striped white bags, 5 vibrant bronze bags, 1 pale brown bag.
mirrored plum bags contain 1 shiny fuchsia bag, 4 bright indigo bags, 4 muted maroon bags, 2 drab red bags.
faded lavender bags contain 3 faded chartreuse bags, 5 muted plum bags, 3 light brown bags.
dim green bags contain 5 pale plum bags, 2 clear magenta bags.
bright green bags contain 5 posh lime bags.
dim yellow bags contain 1 plaid fuchsia bag, 1 dotted olive bag.
pale silver bags contain 1 muted brown bag, 3 clear lavender bags.
dark turquoise bags contain 2 wavy lavender bags, 4 posh gray bags, 3 plaid tan bags.
muted gray bags contain 4 drab teal bags.
striped maroon bags contain 1 striped fuchsia bag, 1 vibrant green bag.
clear crimson bags contain 1 light black bag, 4 dim aqua bags, 2 dull red bags.
dotted bronze bags contain 3 muted purple bags, 5 muted lime bags, 5 pale plum bags.
wavy coral bags contain 1 dull white bag.
dotted purple bags contain 2 dim blue bags.
pale cyan bags contain 1 dark beige bag, 1 drab crimson bag, 2 plaid black bags, 3 dim tomato bags.
clear green bags contain 4 muted lime bags, 1 mirrored white bag, 4 pale lavender bags, 2 muted gold bags.
plaid yellow bags contain 3 muted silver bags.
pale tan bags contain 4 shiny cyan bags.
clear brown bags contain 2 dull maroon bags, 4 posh orange bags, 3 mirrored blue bags.
striped cyan bags contain 1 muted tomato bag, 2 dim magenta bags.
clear lavender bags contain 3 plaid fuchsia bags.
dull gold bags contain 5 dim salmon bags.
dark cyan bags contain 4 pale gold bags, 2 muted tan bags.
plaid olive bags contain 5 posh tan bags.
vibrant aqua bags contain 3 striped violet bags, 3 muted turquoise bags.
dim white bags contain 2 plaid fuchsia bags, 1 dull olive bag, 4 faded teal bags.
mirrored silver bags contain 2 mirrored gray bags, 4 muted blue bags, 4 dull gray bags.
wavy violet bags contain 5 bright green bags, 3 pale silver bags, 5 dark aqua bags, 4 shiny tomato bags.
bright coral bags contain 2 striped chartreuse bags, 4 clear aqua bags, 5 vibrant olive bags, 3 wavy tomato bags.
plaid coral bags contain 3 clear turquoise bags, 2 muted olive bags, 2 faded crimson bags, 5 dull yellow bags.
posh purple bags contain 4 dull cyan bags.
muted maroon bags contain 5 striped white bags, 2 pale blue bags, 3 dull crimson bags, 1 pale lavender bag.
mirrored black bags contain 5 plaid fuchsia bags, 3 vibrant green bags, 1 faded chartreuse bag.
vibrant turquoise bags contain 4 plaid black bags, 1 shiny brown bag, 5 wavy purple bags, 2 dim red bags.
muted gold bags contain 3 clear lavender bags, 2 dotted chartreuse bags, 3 dim green bags, 2 mirrored black bags.
dark lime bags contain 5 dark aqua bags, 2 plaid plum bags.
posh brown bags contain 3 drab fuchsia bags, 1 dim gold bag, 4 drab magenta bags, 3 wavy aqua bags.
clear yellow bags contain 3 wavy indigo bags.
muted blue bags contain 1 wavy crimson bag, 5 mirrored red bags, 5 shiny crimson bags, 4 plaid fuchsia bags.
drab white bags contain 5 dull olive bags, 2 posh maroon bags, 2 pale silver bags, 5 muted brown bags.
dim gold bags contain no other bags.
faded plum bags contain 4 plaid turquoise bags, 5 drab chartreuse bags, 2 dotted olive bags, 3 plaid fuchsia bags.
light blue bags contain 4 plaid coral bags, 5 dotted violet bags.
vibrant gold bags contain 2 dim fuchsia bags, 3 faded white bags.
plaid crimson bags contain 1 plaid plum bag.
dim fuchsia bags contain 3 faded teal bags.
mirrored chartreuse bags contain 3 wavy black bags.
mirrored fuchsia bags contain 1 faded teal bag, 5 light coral bags.
muted coral bags contain 3 light magenta bags, 5 faded green bags, 1 dull olive bag, 2 muted silver bags.
dim teal bags contain 4 pale teal bags, 1 plaid maroon bag, 2 plaid yellow bags, 1 plaid orange bag.
faded green bags contain 4 striped gray bags.
vibrant beige bags contain 2 muted blue bags, 3 vibrant gray bags.
muted silver bags contain 3 dotted violet bags.
dotted cyan bags contain 2 mirrored gray bags, 5 muted purple bags, 2 faded bronze bags.
bright turquoise bags contain 1 pale tan bag, 1 pale salmon bag.
wavy gold bags contain 2 pale olive bags.
faded turquoise bags contain 2 vibrant fuchsia bags, 2 drab fuchsia bags, 4 striped black bags.
faded lime bags contain 4 dim gold bags, 5 vibrant yellow bags.
faded black bags contain 2 dark coral bags, 2 shiny crimson bags, 4 clear gray bags.
vibrant silver bags contain 1 shiny teal bag, 5 dotted chartreuse bags, 1 pale magenta bag, 3 clear coral bags.
dim brown bags contain 1 posh gray bag.
dim cyan bags contain 2 drab tan bags, 4 posh white bags.
bright fuchsia bags contain 1 dark crimson bag, 3 posh coral bags.
clear tan bags contain 1 light tomato bag, 5 bright olive bags, 1 dull violet bag, 2 bright green bags.
pale red bags contain 5 mirrored tomato bags, 4 dull red bags, 3 shiny teal bags.
drab chartreuse bags contain 1 vibrant green bag, 3 shiny crimson bags, 3 dotted olive bags.
dark gray bags contain 4 dotted coral bags, 2 shiny teal bags, 1 muted blue bag, 4 bright silver bags.
dim purple bags contain 5 dotted gold bags.
shiny crimson bags contain no other bags.
posh maroon bags contain 4 light magenta bags, 4 muted tan bags.
mirrored purple bags contain no other bags.
wavy silver bags contain 5 faded lavender bags, 4 clear lime bags.
dark indigo bags contain 3 light plum bags, 5 dotted crimson bags, 1 wavy plum bag, 4 light gold bags.
wavy gray bags contain 3 clear gold bags.
pale gray bags contain 2 bright gold bags.
muted turquoise bags contain 1 wavy bronze bag, 1 muted blue bag.
dull yellow bags contain 3 posh olive bags, 5 faded red bags.
mirrored tomato bags contain 3 striped olive bags, 4 light chartreuse bags, 5 pale silver bags.
dotted crimson bags contain 3 muted brown bags, 4 dim blue bags, 4 dark silver bags, 3 pale lavender bags.
pale magenta bags contain 3 clear bronze bags, 1 plaid brown bag, 1 dim gold bag.
faded brown bags contain 3 plaid fuchsia bags, 1 faded chartreuse bag.
clear salmon bags contain 1 plaid fuchsia bag, 4 wavy coral bags, 5 shiny coral bags, 3 clear turquoise bags.
clear coral bags contain 5 faded chartreuse bags, 1 drab chartreuse bag, 2 dim gold bags.
dull magenta bags contain 2 dark coral bags, 4 drab indigo bags, 3 posh maroon bags.
posh black bags contain 4 dim white bags, 2 dark lime bags, 5 faded green bags, 2 plaid green bags.
dim beige bags contain 2 striped lavender bags, 5 posh lavender bags.
clear turquoise bags contain 2 muted brown bags.
faded red bags contain 2 vibrant salmon bags, 3 dark orange bags.
shiny aqua bags contain 1 shiny salmon bag, 2 light olive bags, 4 dotted magenta bags.
dotted yellow bags contain 3 striped green bags, 5 posh tan bags.
dark silver bags contain 4 posh maroon bags, 4 clear lavender bags.
dull gray bags contain 3 plaid violet bags, 3 dark silver bags, 3 mirrored black bags, 1 drab indigo bag.
drab indigo bags contain 2 faded plum bags, 4 clear turquoise bags, 2 pale white bags, 3 drab magenta bags.
dotted indigo bags contain 1 dim olive bag.
drab crimson bags contain 3 plaid turquoise bags, 2 pale purple bags.
pale coral bags contain 3 posh blue bags.
shiny tomato bags contain 5 muted salmon bags, 4 faded plum bags, 1 drab chartreuse bag, 5 muted brown bags.
wavy yellow bags contain 4 striped black bags, 1 dull turquoise bag.
faded indigo bags contain 4 wavy crimson bags, 1 dark orange bag, 5 dotted coral bags.
light white bags contain 2 bright blue bags, 3 pale lavender bags, 3 dull lime bags, 2 pale coral bags.
dark black bags contain 4 light orange bags, 5 shiny coral bags.
dull white bags contain 3 striped fuchsia bags.
bright tomato bags contain 5 shiny cyan bags, 4 plaid bronze bags, 1 muted salmon bag.
vibrant lime bags contain 1 dotted gray bag, 3 drab crimson bags, 3 faded crimson bags.
dotted orange bags contain 2 dark purple bags, 4 faded lavender bags.
dim black bags contain 3 dark turquoise bags, 5 posh gray bags, 4 dull tan bags.
light bronze bags contain 1 striped blue bag.
dotted salmon bags contain 3 muted crimson bags, 1 faded gold bag, 1 wavy violet bag, 3 striped gray bags.
shiny coral bags contain 1 shiny fuchsia bag.
clear beige bags contain 1 dim yellow bag, 3 mirrored tomato bags.
mirrored blue bags contain 1 plaid fuchsia bag.
bright yellow bags contain 3 dotted violet bags, 5 dull teal bags.
drab bronze bags contain 1 dim black bag, 5 faded indigo bags.
posh red bags contain 1 pale silver bag.
dark bronze bags contain 4 dotted fuchsia bags, 5 light salmon bags, 1 muted brown bag, 1 posh blue bag.
pale indigo bags contain 4 vibrant bronze bags.
light violet bags contain 2 shiny tomato bags, 1 wavy maroon bag.
muted crimson bags contain 4 clear gold bags, 4 dark coral bags.
faded chartreuse bags contain no other bags.
muted tan bags contain no other bags.
clear lime bags contain 1 bright lavender bag, 4 dim olive bags, 4 pale plum bags.
plaid lime bags contain 1 drab lime bag.
mirrored green bags contain 4 dim tomato bags, 3 clear coral bags, 2 shiny lavender bags.
bright orange bags contain 5 bright salmon bags, 4 plaid maroon bags.
dim plum bags contain 1 striped chartreuse bag, 3 dotted violet bags, 1 faded teal bag, 1 dim green bag.
faded tan bags contain 4 mirrored black bags.
wavy salmon bags contain 1 faded tomato bag.
dim coral bags contain 3 dull indigo bags, 3 wavy tomato bags.
dim turquoise bags contain 2 wavy yellow bags, 4 dull silver bags.
dull chartreuse bags contain 5 mirrored purple bags, 4 pale coral bags, 2 shiny purple bags.
drab fuchsia bags contain 4 dotted olive bags, 2 dim gold bags, 4 shiny crimson bags.
dull tomato bags contain 2 striped indigo bags.
striped lavender bags contain 5 plaid cyan bags, 5 faded green bags, 1 posh gray bag.
clear gold bags contain 5 clear turquoise bags, 2 dull tan bags.
dark orange bags contain 5 dotted olive bags, 3 pale magenta bags, 2 posh blue bags, 1 vibrant green bag.
clear plum bags contain 4 posh olive bags.
dark olive bags contain 5 faded silver bags, 1 vibrant tan bag, 3 bright crimson bags.
striped magenta bags contain 3 shiny lavender bags, 5 faded green bags, 4 striped lavender bags, 2 mirrored black bags.
dim chartreuse bags contain 4 striped turquoise bags, 5 mirrored tomato bags.
faded teal bags contain 3 dull olive bags, 1 dull tan bag, 5 posh maroon bags.
wavy cyan bags contain 1 shiny magenta bag.
dim tomato bags contain 1 plaid plum bag, 2 plaid fuchsia bags, 5 mirrored blue bags.
drab maroon bags contain 4 faded coral bags, 2 dotted black bags, 3 posh orange bags, 2 faded indigo bags.
posh white bags contain 2 clear coral bags, 3 plaid turquoise bags, 2 mirrored black bags.
shiny orange bags contain 4 light coral bags.
bright teal bags contain 3 clear gray bags, 2 clear turquoise bags, 3 faded crimson bags.
clear aqua bags contain 3 muted silver bags, 5 dim white bags, 5 drab lime bags, 4 clear gold bags.
vibrant black bags contain 1 dim violet bag, 5 pale indigo bags, 4 wavy indigo bags, 5 muted green bags.
clear chartreuse bags contain 1 dull black bag, 3 dotted olive bags, 3 dull indigo bags.
posh lavender bags contain 5 vibrant orange bags, 2 dim white bags, 1 dull beige bag.
dark crimson bags contain 5 faded tomato bags, 1 striped fuchsia bag.
light black bags contain 3 muted tomato bags, 5 clear bronze bags, 4 drab chartreuse bags.
wavy plum bags contain 3 dotted coral bags, 5 vibrant olive bags.
plaid salmon bags contain 4 dull salmon bags.
wavy chartreuse bags contain 1 mirrored turquoise bag.
vibrant fuchsia bags contain 2 mirrored gold bags, 5 dull bronze bags.
dim violet bags contain 1 faded fuchsia bag, 1 mirrored red bag, 2 posh fuchsia bags, 4 mirrored turquoise bags.
vibrant tan bags contain 2 clear salmon bags, 5 drab red bags, 3 dotted gray bags.
dim bronze bags contain 1 drab green bag.
shiny lavender bags contain 3 muted salmon bags.
striped fuchsia bags contain 4 dim gold bags, 2 dotted crimson bags.
dim tan bags contain 2 plaid red bags, 2 bright chartreuse bags, 2 dim salmon bags.
dotted violet bags contain no other bags.
dull maroon bags contain 4 faded chartreuse bags.
clear violet bags contain 1 drab lime bag, 5 muted coral bags, 1 clear lavender bag.
plaid maroon bags contain 1 drab red bag, 3 muted gold bags.
vibrant gray bags contain 1 plaid fuchsia bag.
light yellow bags contain 4 mirrored blue bags, 2 plaid fuchsia bags, 1 wavy tomato bag.
dotted teal bags contain 3 light tan bags.
vibrant chartreuse bags contain 1 shiny crimson bag, 2 plaid fuchsia bags.
dull lavender bags contain 1 light crimson bag.
dark gold bags contain 3 muted olive bags, 1 posh tan bag, 5 vibrant purple bags.
light aqua bags contain 1 wavy bronze bag.
dim crimson bags contain 3 plaid beige bags, 1 plaid yellow bag.
plaid brown bags contain 5 dotted olive bags, 4 muted salmon bags, 3 dim gold bags.
dotted magenta bags contain 1 wavy coral bag, 2 drab turquoise bags, 5 mirrored tomato bags.
muted tomato bags contain 4 wavy fuchsia bags, 4 pale magenta bags.
posh tomato bags contain 1 striped beige bag, 1 faded brown bag.
faded gray bags contain 4 plaid maroon bags, 5 muted silver bags, 5 muted maroon bags, 4 vibrant fuchsia bags.
plaid lavender bags contain 3 dim blue bags, 4 vibrant gray bags, 2 light silver bags, 1 dull green bag.
muted indigo bags contain 2 dark coral bags, 1 vibrant indigo bag, 3 dim yellow bags, 4 muted aqua bags.
posh turquoise bags contain 4 drab red bags, 2 faded teal bags, 4 dull maroon bags.
bright red bags contain 5 wavy lime bags, 4 bright black bags, 1 muted white bag.
pale tomato bags contain 1 posh olive bag.
dim maroon bags contain 5 vibrant red bags, 3 vibrant orange bags, 1 dark chartreuse bag.
shiny teal bags contain 2 plaid fuchsia bags, 4 dotted olive bags, 2 vibrant chartreuse bags, 4 muted brown bags.
plaid gold bags contain 3 clear olive bags, 1 faded chartreuse bag.
shiny beige bags contain 5 wavy lavender bags, 3 muted salmon bags.
drab green bags contain 1 clear bronze bag, 2 posh teal bags, 1 dotted green bag, 5 pale white bags.
light beige bags contain 5 vibrant red bags.
clear indigo bags contain 4 plaid violet bags.
clear black bags contain 5 striped olive bags, 5 posh red bags, 4 posh brown bags, 4 shiny olive bags.
wavy red bags contain 1 dull red bag, 2 shiny magenta bags, 4 shiny black bags.
striped indigo bags contain 1 striped black bag, 2 plaid cyan bags.
clear bronze bags contain no other bags.
shiny salmon bags contain 1 muted tan bag, 5 striped white bags, 5 striped fuchsia bags.
mirrored teal bags contain 5 light lime bags.
dotted blue bags contain 4 dark aqua bags, 3 clear bronze bags, 4 dull olive bags.
shiny blue bags contain 3 bright green bags, 5 pale lavender bags.
faded cyan bags contain 3 dark red bags, 4 drab cyan bags, 5 faded beige bags.
light purple bags contain 3 posh silver bags.
vibrant teal bags contain 4 dotted gold bags, 1 plaid yellow bag, 1 mirrored cyan bag, 5 dull indigo bags.
wavy bronze bags contain 2 muted silver bags.
dim red bags contain 3 clear bronze bags, 5 faded plum bags.
muted yellow bags contain 2 muted blue bags, 5 striped beige bags, 2 drab indigo bags, 5 drab red bags.
mirrored lavender bags contain 3 dull maroon bags.
pale white bags contain 3 vibrant chartreuse bags, 5 posh maroon bags, 4 muted brown bags, 3 plaid turquoise bags.
vibrant maroon bags contain 2 shiny purple bags, 2 dim yellow bags.
dull teal bags contain 2 mirrored black bags, 5 drab white bags.
bright olive bags contain 5 clear bronze bags, 2 drab red bags.
shiny white bags contain 2 clear brown bags, 4 muted white bags.
muted aqua bags contain 4 dim green bags, 3 shiny tomato bags, 2 posh chartreuse bags, 4 muted lavender bags.
dull fuchsia bags contain 5 mirrored red bags, 4 dark lime bags.
pale brown bags contain 4 striped indigo bags, 4 dotted coral bags, 4 shiny maroon bags, 5 striped white bags.
plaid tomato bags contain 4 drab turquoise bags, 1 posh plum bag, 5 dotted indigo bags.
pale teal bags contain 5 dull plum bags, 5 dim crimson bags, 5 shiny purple bags.
mirrored yellow bags contain 1 posh olive bag.
dim silver bags contain 4 clear magenta bags, 3 plaid silver bags, 1 striped maroon bag.
posh cyan bags contain 5 pale coral bags, 2 faded magenta bags, 4 dim cyan bags.
clear silver bags contain 1 muted red bag, 1 faded turquoise bag.
shiny black bags contain 1 dim blue bag.
bright silver bags contain 4 shiny teal bags, 1 dull red bag, 4 bright olive bags, 2 shiny brown bags.
drab aqua bags contain 3 vibrant indigo bags, 5 wavy cyan bags, 3 shiny violet bags, 2 dull bronze bags.
vibrant lavender bags contain 1 muted turquoise bag, 5 light crimson bags, 3 wavy crimson bags.
pale lavender bags contain 2 posh blue bags, 5 dim red bags.
plaid black bags contain 2 faded green bags, 1 bright black bag.
dotted white bags contain 5 shiny gold bags, 2 dotted magenta bags.
wavy maroon bags contain 3 striped white bags, 3 mirrored black bags, 3 plaid turquoise bags.
dotted plum bags contain 1 faded coral bag.
striped salmon bags contain 4 plaid indigo bags, 1 light brown bag, 4 posh tomato bags, 1 bright chartreuse bag.
faded violet bags contain 5 shiny coral bags.
dotted fuchsia bags contain 3 dim red bags, 1 muted purple bag, 3 striped indigo bags, 3 drab magenta bags.
dark coral bags contain 4 pale lavender bags, 2 posh coral bags, 5 striped olive bags, 1 clear bronze bag.
posh tan bags contain 2 dark silver bags.
dotted green bags contain 3 drab white bags, 4 drab red bags, 4 pale magenta bags.
clear blue bags contain 2 plaid fuchsia bags, 2 dotted purple bags, 2 faded violet bags, 1 dim blue bag.
dotted olive bags contain 3 plaid fuchsia bags, 2 dim gold bags, 1 shiny crimson bag, 2 muted tan bags.
plaid red bags contain 3 dull violet bags, 1 dotted crimson bag, 1 dull plum bag.
plaid teal bags contain 4 muted tomato bags, 5 posh tan bags.
striped green bags contain 5 dotted gray bags, 1 faded green bag, 1 muted brown bag.
pale gold bags contain 4 shiny purple bags, 2 dim cyan bags.
dim salmon bags contain 3 bright green bags, 2 dim magenta bags, 1 dim black bag.
drab beige bags contain 3 light lime bags, 2 faded teal bags, 3 light fuchsia bags.
shiny green bags contain 5 wavy gray bags, 1 mirrored tan bag.
dark red bags contain 4 mirrored silver bags, 5 pale plum bags, 1 wavy violet bag.
wavy black bags contain 1 drab white bag, 4 shiny chartreuse bags, 2 striped white bags.
vibrant white bags contain 5 shiny lavender bags, 4 dark black bags, 1 dull bronze bag.
faded silver bags contain 3 vibrant purple bags, 5 mirrored blue bags, 5 dull chartreuse bags, 1 faded bronze bag.
mirrored brown bags contain 5 dull plum bags, 3 mirrored orange bags, 1 light gold bag, 5 light cyan bags.
striped brown bags contain 4 muted indigo bags, 3 dim coral bags, 3 drab turquoise bags.
faded beige bags contain 1 drab chartreuse bag, 5 faded fuchsia bags, 1 clear salmon bag, 2 dim cyan bags.
pale salmon bags contain 1 dotted tomato bag, 5 faded silver bags, 2 dim beige bags.
striped chartreuse bags contain 1 light magenta bag.
pale chartreuse bags contain 3 dark white bags, 5 shiny aqua bags.
wavy teal bags contain 2 light orange bags, 3 dull cyan bags.
dull tan bags contain 3 mirrored purple bags, 5 plaid turquoise bags, 5 posh blue bags, 5 shiny crimson bags.
wavy white bags contain 5 wavy olive bags.
clear magenta bags contain 1 pale lavender bag.
light gold bags contain 1 posh maroon bag, 1 dull olive bag, 3 striped chartreuse bags.
striped olive bags contain 4 clear magenta bags, 3 clear gold bags, 3 shiny black bags.
plaid aqua bags contain 5 posh tan bags, 4 mirrored indigo bags, 3 drab white bags, 1 drab red bag.
dark maroon bags contain 4 dim purple bags, 5 dark turquoise bags.
mirrored magenta bags contain 3 striped lime bags, 4 posh lime bags, 2 shiny olive bags.
bright brown bags contain 5 dim yellow bags.
bright black bags contain 4 posh brown bags, 3 shiny beige bags, 2 wavy lavender bags.
light olive bags contain 1 dark purple bag, 2 clear fuchsia bags, 2 striped blue bags, 4 pale brown bags.
dull beige bags contain 5 shiny fuchsia bags, 4 muted brown bags, 5 posh gray bags, 4 posh maroon bags.
bright indigo bags contain 5 dotted coral bags, 2 dull red bags, 5 dotted olive bags.
drab cyan bags contain 1 mirrored brown bag, 4 dim aqua bags, 4 mirrored plum bags.
faded magenta bags contain 2 dull silver bags, 3 clear gold bags.
pale aqua bags contain 1 bright indigo bag, 2 posh maroon bags, 1 pale lavender bag.
light red bags contain 3 muted magenta bags, 4 pale olive bags.
vibrant salmon bags contain 3 dim tomato bags, 1 vibrant lavender bag, 4 muted plum bags.
striped blue bags contain 1 dull tan bag, 3 muted silver bags, 2 dotted green bags.
shiny olive bags contain 1 plaid cyan bag, 5 dark violet bags, 3 clear bronze bags.
drab black bags contain 1 faded black bag.
posh bronze bags contain 5 plaid brown bags, 1 striped white bag.
posh blue bags contain 3 plaid fuchsia bags, 1 muted silver bag, 1 drab chartreuse bag.
posh fuchsia bags contain 5 plaid red bags, 5 vibrant silver bags, 4 faded coral bags.
clear olive bags contain 1 plaid orange bag, 5 dim cyan bags.
striped red bags contain 3 clear crimson bags, 5 clear lime bags, 4 faded bronze bags, 2 posh teal bags.
dotted coral bags contain 2 pale silver bags.
drab teal bags contain 2 pale violet bags, 1 mirrored red bag.
pale black bags contain 5 dull olive bags.
vibrant brown bags contain 1 mirrored indigo bag, 3 clear white bags.
pale olive bags contain 1 pale white bag, 1 dark plum bag, 1 dim tomato bag, 1 vibrant beige bag.
faded orange bags contain 1 striped coral bag, 3 dull plum bags, 3 drab silver bags, 3 clear fuchsia bags.
plaid silver bags contain 3 drab chartreuse bags.
pale beige bags contain 5 clear yellow bags, 2 vibrant purple bags, 1 faded salmon bag.
dark magenta bags contain 2 wavy lavender bags, 4 shiny tomato bags, 2 faded plum bags.
dark purple bags contain 2 clear brown bags, 1 vibrant chartreuse bag, 1 vibrant fuchsia bag, 5 pale blue bags.
vibrant yellow bags contain 5 drab chartreuse bags.
light silver bags contain 5 shiny crimson bags.
clear maroon bags contain 2 plaid teal bags, 4 muted tomato bags, 3 faded tan bags.
drab turquoise bags contain 1 plaid yellow bag, 4 wavy bronze bags, 3 vibrant olive bags.
drab salmon bags contain 1 dark white bag, 3 light plum bags, 3 posh silver bags, 3 clear salmon bags.
shiny magenta bags contain 1 striped chartreuse bag.
dull indigo bags contain 2 striped green bags.
posh green bags contain 4 muted gold bags, 2 light chartreuse bags.
striped crimson bags contain 5 striped turquoise bags.
posh aqua bags contain 5 light magenta bags.
vibrant bronze bags contain 4 pale magenta bags, 4 light silver bags, 2 vibrant yellow bags, 2 wavy yellow bags.
bright bronze bags contain 3 dark violet bags, 1 dim black bag, 2 dark silver bags.
plaid orange bags contain 3 dim tomato bags, 3 drab turquoise bags.
drab lime bags contain 1 drab white bag, 5 muted white bags.
bright lime bags contain 5 shiny teal bags, 3 muted purple bags.
wavy lime bags contain 5 dull maroon bags.
dim indigo bags contain 4 pale cyan bags, 2 dotted turquoise bags, 2 striped blue bags, 2 posh brown bags.
wavy blue bags contain 2 pale plum bags.
muted brown bags contain 1 muted silver bag, 1 dotted olive bag, 1 drab fuchsia bag.
shiny bronze bags contain 2 dotted gray bags, 2 shiny magenta bags, 4 posh black bags.
light fuchsia bags contain 3 mirrored brown bags, 1 faded purple bag, 2 wavy violet bags, 1 posh salmon bag.
light maroon bags contain 4 dull chartreuse bags, 4 dotted cyan bags, 2 muted tan bags.
muted teal bags contain 2 muted coral bags, 1 dotted aqua bag, 2 vibrant gray bags, 5 dim crimson bags.
shiny yellow bags contain 4 bright olive bags.
bright maroon bags contain 2 clear maroon bags, 2 striped cyan bags.
pale crimson bags contain 1 posh blue bag, 4 posh maroon bags, 2 clear lavender bags.
dim orange bags contain 5 striped fuchsia bags, 3 posh tan bags, 1 striped beige bag.
vibrant green bags contain 3 dotted violet bags, 2 shiny crimson bags, 1 clear lavender bag.
striped orange bags contain 3 bright white bags, 2 dotted maroon bags, 5 drab indigo bags.
dull plum bags contain 1 striped fuchsia bag, 3 faded crimson bags, 3 dim green bags, 2 posh lavender bags.
drab olive bags contain 2 posh white bags, 3 bright salmon bags.
dull green bags contain 5 wavy turquoise bags, 4 mirrored gray bags, 3 light maroon bags.
mirrored cyan bags contain 1 plaid beige bag.
plaid cyan bags contain 5 faded chartreuse bags, 5 shiny crimson bags, 3 drab fuchsia bags, 4 wavy aqua bags.
posh yellow bags contain 5 dark chartreuse bags.
clear orange bags contain 3 bright green bags, 4 shiny gold bags.
dim magenta bags contain 5 faded crimson bags, 3 plaid tan bags, 5 mirrored orange bags, 1 pale lavender bag.
bright beige bags contain 4 bright gold bags, 5 pale chartreuse bags.
dark plum bags contain 2 pale silver bags.
bright violet bags contain 1 dotted green bag.
vibrant cyan bags contain 1 dark turquoise bag.
posh gray bags contain 3 pale crimson bags, 3 muted white bags, 4 shiny brown bags, 3 clear magenta bags.
striped beige bags contain 5 dull bronze bags, 4 dim blue bags, 1 dotted olive bag.
shiny gold bags contain 5 vibrant green bags, 4 pale violet bags, 4 dull olive bags, 3 pale white bags.
dark salmon bags contain 3 muted bronze bags, 4 muted silver bags, 2 pale purple bags.
wavy tan bags contain 3 light turquoise bags, 5 dark bronze bags.
light plum bags contain 5 wavy bronze bags, 4 dull crimson bags, 5 dim aqua bags.
drab silver bags contain 2 dim fuchsia bags, 3 wavy bronze bags.
plaid indigo bags contain 3 plaid tomato bags, 5 clear beige bags.
pale lime bags contain 2 striped cyan bags, 2 mirrored lavender bags.
faded gold bags contain 4 faded tomato bags, 2 light cyan bags, 2 pale orange bags, 1 wavy bronze bag.
striped tan bags contain 1 bright silver bag, 2 faded green bags, 5 dim blue bags, 1 shiny maroon bag.
drab purple bags contain 3 dull red bags, 3 light olive bags, 3 shiny red bags.
muted orange bags contain 1 mirrored brown bag, 2 muted green bags.
dull brown bags contain 3 dim silver bags, 4 posh lavender bags, 5 dark white bags.
wavy tomato bags contain 1 drab lime bag, 1 shiny teal bag, 5 dotted violet bags, 4 light crimson bags.
dark green bags contain 2 posh orange bags, 4 mirrored tan bags, 5 mirrored violet bags.
wavy turquoise bags contain 4 light salmon bags, 2 shiny maroon bags, 1 muted salmon bag.
posh orange bags contain 5 dull red bags, 1 drab lime bag, 2 shiny gold bags.
vibrant indigo bags contain 5 dark violet bags.
faded fuchsia bags contain 5 clear lavender bags, 1 dull silver bag, 5 drab lime bags, 3 bright white bags.
wavy beige bags contain 3 vibrant green bags, 3 faded teal bags, 4 muted indigo bags.
pale fuchsia bags contain 1 drab lime bag.
muted salmon bags contain 1 dotted violet bag, 4 vibrant chartreuse bags, 3 muted silver bags.
shiny red bags contain 2 dull gray bags, 3 pale white bags, 1 faded brown bag.
clear gray bags contain 1 posh maroon bag, 1 shiny beige bag.
muted green bags contain 1 drab magenta bag, 3 pale fuchsia bags, 5 dark fuchsia bags, 1 dull gray bag.
vibrant purple bags contain 1 vibrant yellow bag, 4 muted aqua bags.
dark fuchsia bags contain 5 mirrored lavender bags, 2 dim red bags, 5 shiny teal bags, 5 vibrant beige bags.
striped purple bags contain 2 dim aqua bags, 1 posh teal bag, 5 pale brown bags.
posh lime bags contain 2 wavy aqua bags.
striped violet bags contain 2 dotted chartreuse bags.
muted lime bags contain 1 shiny brown bag, 2 bright purple bags, 2 drab chartreuse bags, 4 clear lavender bags.
light gray bags contain 5 dull maroon bags, 4 dull crimson bags, 5 mirrored cyan bags.
mirrored maroon bags contain 1 mirrored chartreuse bag, 1 muted cyan bag.
light turquoise bags contain 2 bright yellow bags.
vibrant blue bags contain 4 muted tomato bags, 2 dull salmon bags.
mirrored indigo bags contain 3 light chartreuse bags, 5 dark turquoise bags.
faded bronze bags contain 5 dotted chartreuse bags.
dotted beige bags contain 4 bright purple bags, 2 striped green bags, 3 posh brown bags.
drab red bags contain 2 vibrant chartreuse bags, 1 dim red bag, 4 dark silver bags, 4 pale magenta bags.
wavy orange bags contain 3 striped bronze bags, 4 dotted tan bags.
striped black bags contain 1 shiny tomato bag.
drab gold bags contain 1 plaid lime bag, 2 wavy lavender bags.
shiny brown bags contain 5 dull tan bags.
posh beige bags contain 1 drab gold bag, 3 dull beige bags, 1 posh blue bag, 2 drab red bags.
light green bags contain 3 mirrored tan bags.
mirrored coral bags contain 5 mirrored lavender bags, 5 dark white bags, 5 pale silver bags.
plaid bronze bags contain 3 pale lavender bags, 1 muted silver bag, 2 faded teal bags, 1 dull teal bag.
light chartreuse bags contain 1 muted blue bag, 4 posh chartreuse bags, 2 wavy aqua bags, 4 vibrant orange bags.
drab yellow bags contain 2 shiny aqua bags.
plaid turquoise bags contain no other bags.
drab orange bags contain 1 posh salmon bag, 5 dark violet bags.
dark teal bags contain 4 bright indigo bags, 3 plaid coral bags, 1 dark violet bag, 5 shiny tomato bags.
drab gray bags contain 4 dotted maroon bags.
dotted maroon bags contain 4 plaid turquoise bags, 5 pale bronze bags.
muted red bags contain 5 posh brown bags.
dim olive bags contain 3 posh brown bags, 2 faded plum bags, 4 wavy tomato bags.
pale maroon bags contain 5 dark gold bags, 3 dotted silver bags, 3 shiny tomato bags.
dotted turquoise bags contain 1 plaid blue bag, 5 dim green bags, 5 dull plum bags.
dotted tomato bags contain 2 dotted indigo bags, 2 clear fuchsia bags.
dark aqua bags contain 5 posh olive bags.
dark tan bags contain 5 dotted chartreuse bags, 5 posh red bags, 3 plaid cyan bags, 5 pale plum bags.
bright chartreuse bags contain 4 posh white bags, 4 shiny maroon bags, 1 shiny tomato bag.
striped gray bags contain 4 shiny gold bags, 3 drab white bags, 3 plaid cyan bags.
dull olive bags contain 4 plaid brown bags, 2 plaid turquoise bags, 2 plaid cyan bags, 1 vibrant green bag.
shiny indigo bags contain 3 shiny black bags, 1 dark orange bag, 1 posh white bag.
bright lavender bags contain 1 muted salmon bag, 5 posh maroon bags.
plaid white bags contain 5 wavy silver bags.
light coral bags contain 3 pale silver bags.
plaid plum bags contain 4 shiny brown bags, 1 dark silver bag, 4 pale lavender bags.
light magenta bags contain 5 drab chartreuse bags.
shiny tan bags contain 4 vibrant chartreuse bags, 5 dim brown bags.
wavy magenta bags contain 1 vibrant turquoise bag, 4 dull violet bags, 5 clear indigo bags.
pale blue bags contain 2 posh lime bags, 1 shiny brown bag.
dull orange bags contain 5 dull lime bags, 1 pale crimson bag.
striped white bags contain 1 posh aqua bag, 3 pale magenta bags, 2 posh gray bags.
dotted aqua bags contain 2 plaid teal bags.
wavy indigo bags contain 4 dark blue bags, 3 dotted black bags, 2 pale violet bags, 4 pale silver bags.
bright plum bags contain 3 muted green bags.
bright gold bags contain 3 dull beige bags, 3 faded plum bags, 1 mirrored gray bag, 5 muted lime bags.
clear fuchsia bags contain 3 clear orange bags, 5 dull crimson bags, 3 drab red bags, 5 vibrant silver bags.
posh olive bags contain 2 vibrant green bags.
faded maroon bags contain 2 vibrant chartreuse bags, 5 drab tomato bags, 3 dim tomato bags.
posh violet bags contain 1 dim gold bag, 2 light chartreuse bags, 4 faded indigo bags, 2 plaid violet bags.
drab blue bags contain 4 muted purple bags, 5 bright olive bags.
dull turquoise bags contain 5 pale lavender bags, 3 light aqua bags, 3 drab teal bags.
striped silver bags contain 4 wavy black bags, 5 plaid magenta bags.
striped gold bags contain 3 shiny tomato bags, 2 light fuchsia bags, 1 bright salmon bag.
mirrored violet bags contain 4 mirrored blue bags.
vibrant red bags contain 4 striped lavender bags, 1 clear fuchsia bag.
striped yellow bags contain 3 vibrant red bags.
dotted silver bags contain 1 muted blue bag, 3 shiny teal bags, 2 plaid coral bags, 1 dim aqua bag.

View File

@@ -0,0 +1,9 @@
nop +0
acc +1
jmp +4
acc +3
jmp -3
acc -99
acc +1
jmp -4
acc +6

View File

@@ -0,0 +1,624 @@
acc -7
acc +6
acc +4
nop +191
jmp +199
acc +44
acc -9
jmp +505
acc -12
acc +45
jmp +204
jmp +129
acc +17
nop +287
jmp +584
acc +16
jmp +363
acc +4
nop +142
acc +34
nop +345
jmp +522
jmp +53
acc -10
jmp +524
jmp +492
jmp +319
acc -9
jmp +550
acc -19
jmp +15
acc +24
jmp +30
acc -19
acc +12
acc -2
jmp +274
nop +91
acc +10
acc +4
jmp +501
acc +49
acc +29
jmp +488
jmp +504
jmp +277
acc +20
acc +34
jmp -40
acc +10
acc -4
acc -19
acc +38
jmp +239
acc -16
acc -3
nop +513
jmp +526
jmp +131
nop +539
acc -11
jmp +470
acc +30
jmp +166
acc +17
acc -16
nop +315
jmp +364
acc +15
nop -61
acc -12
nop +147
jmp -31
acc -9
jmp +324
acc +0
jmp +1
jmp +321
acc +0
acc +6
acc -17
acc +13
jmp +461
jmp +184
acc +22
jmp +182
jmp +504
nop +131
acc +12
acc -6
acc +29
jmp +187
acc +17
jmp +67
jmp -2
acc +50
acc +17
jmp +442
acc +8
nop +146
acc -12
acc +32
jmp +237
jmp +1
acc +34
acc +1
acc +18
jmp +274
acc +17
acc -12
jmp +282
acc +49
acc +11
acc +28
acc +40
jmp +79
acc +19
acc -8
nop +87
jmp +347
acc +48
nop +189
jmp +419
acc +31
jmp +1
acc +31
jmp +1
jmp -94
nop -45
nop +412
acc -14
acc +35
jmp -49
jmp +177
jmp +127
jmp +360
jmp +114
acc -11
nop +248
jmp -64
acc +31
acc +23
acc +4
nop +110
jmp +61
acc +45
nop +444
jmp +218
jmp -131
acc +36
jmp -142
nop +361
acc -3
acc +6
jmp +161
acc +24
acc -7
acc +4
acc +31
jmp +91
jmp -20
jmp +1
nop -11
jmp -146
acc +25
acc +33
jmp +52
acc -7
jmp +82
acc +7
acc +21
acc +6
jmp +397
acc +12
acc +5
acc -9
acc +24
jmp +371
acc +50
acc +47
acc +19
jmp +238
jmp +396
acc -16
nop +394
jmp +180
acc +1
acc +40
jmp +237
acc +22
nop -30
jmp -129
acc +22
jmp +232
acc +23
acc +27
acc +47
jmp +133
acc +0
nop +30
acc +11
acc -9
jmp +381
jmp +75
jmp -64
acc -15
acc +29
acc +49
jmp +195
nop +113
acc -16
nop +312
acc +6
jmp -44
acc +26
acc +40
jmp +272
jmp +83
jmp +365
acc +24
acc +4
jmp +29
acc +8
jmp -137
acc +13
jmp +1
acc +33
nop -182
jmp +22
jmp +9
nop +20
acc +14
nop +291
jmp -28
jmp -83
acc +18
acc +5
jmp +32
acc +48
nop -128
acc +28
jmp +225
acc +29
nop +280
jmp +304
acc +37
acc +50
acc +30
jmp +131
jmp -60
acc +27
jmp +272
jmp +358
acc -1
acc +37
jmp +203
acc +1
acc +37
acc +12
acc -16
jmp +263
acc -16
acc +30
jmp +86
acc +26
acc +6
jmp +344
jmp -147
jmp -185
acc -5
acc -3
acc +7
acc +9
jmp -205
nop -85
acc -4
acc -1
jmp +266
acc +19
nop -143
acc -3
jmp -12
acc +12
acc -18
jmp +326
acc +39
jmp +165
nop -279
acc +19
acc +46
acc +5
jmp -163
acc -13
jmp +1
acc +33
acc +44
jmp -62
acc -10
acc +7
jmp +240
acc -19
jmp -190
acc -12
jmp -167
acc -2
nop -288
acc -13
jmp +303
acc +24
jmp -283
jmp +309
nop +190
acc +38
acc -12
jmp -47
acc +15
acc +31
jmp -259
nop +154
acc +25
acc +8
jmp -295
acc +37
acc +34
acc -18
acc +41
jmp +156
acc +17
acc +37
jmp -243
nop -318
acc +45
acc +33
jmp +139
acc -6
acc +34
acc +25
acc +3
jmp +260
jmp +1
acc +24
jmp +154
acc +34
acc -19
jmp +211
acc +28
jmp +98
acc +45
jmp -143
acc +41
acc +8
acc +33
nop +217
jmp +119
acc +21
jmp -150
acc +25
acc +19
jmp +1
acc +20
jmp +209
acc +43
acc +18
acc +2
jmp -159
acc +25
acc +20
acc -4
acc +45
jmp +89
nop +33
acc +27
jmp +190
acc +47
acc +36
jmp +180
acc +3
jmp +1
jmp -349
jmp -6
jmp -244
acc +2
acc +42
jmp -357
acc +3
jmp -377
acc +31
nop -292
acc +6
acc +9
jmp -212
jmp -91
acc +11
jmp +119
acc -18
acc +38
acc +31
jmp -261
jmp +1
acc +2
jmp -197
acc +0
jmp +1
acc +40
acc +31
acc +4
acc +45
jmp -68
acc -17
acc +8
nop -384
jmp -193
acc +22
nop +170
acc -19
acc +34
jmp -321
acc +46
jmp +130
acc -19
jmp +115
acc -12
acc +23
acc +16
jmp -94
acc +11
nop -286
jmp -276
acc +36
acc +25
jmp -32
acc +6
acc +39
jmp +171
acc -5
nop -131
jmp -368
acc +41
acc -7
nop -336
jmp -428
acc +21
acc +45
jmp -225
acc -2
acc +14
acc +29
jmp -439
acc +36
acc +26
jmp -433
acc +29
acc +36
acc +31
jmp -232
nop -210
nop -44
jmp -382
nop -119
acc +43
jmp +1
jmp -24
acc -13
acc +22
acc +16
jmp +90
nop -443
acc +23
acc +15
acc -3
jmp -225
jmp -448
acc +21
acc -19
acc +23
jmp +1
jmp -447
acc +36
acc -1
acc +31
nop +8
jmp +97
jmp -96
acc -16
acc +7
acc -2
jmp +1
jmp -237
jmp +1
acc -12
acc +29
acc -1
jmp -188
acc +8
jmp -453
nop -234
acc +46
acc +20
acc +24
jmp -68
jmp -178
acc +42
jmp -469
acc +19
acc +35
jmp -4
acc +49
jmp +65
nop +15
nop -209
acc +27
jmp -261
acc +15
jmp -344
acc +13
acc +43
jmp -194
jmp +1
jmp -335
nop -424
acc -13
nop -387
jmp -333
acc +33
acc +30
jmp -272
acc +16
acc +5
acc +21
acc +41
jmp -312
acc +50
jmp -429
nop +57
jmp -212
acc +7
acc -13
jmp -252
jmp -277
jmp -114
jmp -528
jmp -40
jmp -275
acc +27
nop -322
jmp -356
acc -11
jmp -96
nop -9
acc -15
jmp -194
acc +9
acc +47
acc +44
jmp -459
acc -2
acc -12
nop -354
jmp -166
acc +44
acc +23
jmp -503
acc +47
acc +39
acc +10
acc +14
jmp -543
acc +43
jmp -25
jmp -52
acc -19
jmp -423
acc +35
acc +22
acc +10
acc +16
jmp -527
jmp -482
acc +2
acc +21
acc -17
jmp -417
jmp -282
acc +16
nop -424
nop -527
jmp -207
acc +23
acc +21
jmp -503
acc +17
acc -14
jmp -189
acc +43
acc +14
acc +11
nop -427
jmp -54
acc +8
nop -37
nop -542
jmp -332
acc +27
jmp +7
jmp -98
acc +50
acc +0
acc +48
acc +0
jmp -517
acc +15
acc +10
jmp -478
jmp -141
acc +0
acc +18
jmp -468
acc +49
jmp -112
nop -536
acc -14
acc -13
acc +34
jmp +1

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
package year2021;
enum LineType {
Incomplete(expected:Array<String>);
Corrupt(char:String);
}

View File

@@ -0,0 +1,15 @@
package year2021;
import haxe.ds.Option;
typedef Board = {
uncalled:Array<Array<Option<Int>>>,
called:Array<Array<Option<Int>>>,
won:Bool
};
typedef GameState = {
numbersToCall:Array<Int>,
boards:Array<Board>,
boardsByNumber:Map<Int,Array<Board>>,
};

View File

@@ -0,0 +1,10 @@
package year2021;
typedef Line = {
x1:Int,
y1:Int,
x2:Int,
y2:Int
};
typedef Point = Array<Int>;

View File

@@ -0,0 +1,22 @@
package year2021;
import kiss.Prelude;
import haxe.Constraints;
import haxe.ds.Option;
import haxe.Int64;
import haxe.Int64Helper;
import hx.strings.ansi.Ansi;
#if day4
import year2021.Day4;
#end
#if day5
import year2021.Day5;
#end
#if day10
import year2021.Day10;
#end
using hx.strings.Strings;
@:build(kiss.Kiss.build())
class Solutions2021 {}

View File

@@ -0,0 +1,96 @@
(load "../UtilMacros.kiss")
(defMacro dictInc [theMap key amount]
`(let [&mut theMap ,theMap key ,key amount ,amount &mut count (dictGet theMap key)]
(unless count
(dictSet theMap key (set count 0i64)))
(dictSet theMap key #{count + amount;}#)))
// Remove and return an arbitrary key-value pair from the given Map
(function :Array<Dynamic> dictShift [:Map<String,Dynamic> m]
(let [key (.next (m.keys))
val (dictGet m key)]
(m.remove key)
[key val]))
(function run []
(day 1
(load "day1.kiss")
(assert (= 1475 (countIncreases (Util.readInts "src/year2021/inputs/day1.txt"))))
(assert (= 1516 (countIncreases (for trio (slicesOf (Util.readInts "src/year2021/inputs/day1.txt") 3) (apply + trio))))))
(day 2
(load "day2.kiss")
(assert (= 2150351 (apply * (simulateSubCommands (readSubCommands "src/year2021/inputs/day2.txt")))))
(assert (= 1842742223 (apply * (simulateSubCommands (readSubCommands "src/year2021/inputs/day2.txt") true)))))
(day 3
(load "day3.kiss")
(let [inputs (Util.readLines "src/year2021/inputs/day3.txt")]
(assert (= 845186 (* (rate inputs false) (rate inputs true))))
(assert (= 4636702 (* (otherRate inputs false) (otherRate inputs true))))))
(day 4
(load "day4.kiss")
(assert (= 4512 (winningScore "src/year2021/inputs/day4-example.txt")))
(assert (= 46920 (winningScore "src/year2021/inputs/day4.txt")))
(assert (= 1924 (lastWinningScore "src/year2021/inputs/day4-example.txt")))
(assert (= 12635 (lastWinningScore "src/year2021/inputs/day4.txt"))))
(day 5
(load "day5.kiss")
(assert (= 5 (numHotPositions "src/year2021/inputs/day5-example.txt")))
(assert (= 7473 (numHotPositions "src/year2021/inputs/day5.txt")))
(assert (= 12 (numHotPositions "src/year2021/inputs/day5-example.txt" true)))
(assert (= 24164 (numHotPositions "src/year2021/inputs/day5.txt" true))))
(day 6
(load "day6.kiss")
(assert (= "5934" (countAfter "src/year2021/inputs/day6-example.txt" 80)))
(assert (= "26984457539" (countAfter "src/year2021/inputs/day6-example.txt" 256)))
(assert (= "346063" (countAfter "src/year2021/inputs/day6.txt" 80)))
(assert (= "1572358335990" (countAfter "src/year2021/inputs/day6.txt" 256))))
(day 7
(load "day7.kiss")
(assert (= 2 (bestPosToAlignAt (crabPositions "src/year2021/inputs/day7-example.txt"))))
(let [positions (crabPositions "src/year2021/inputs/day7.txt")]
(assert (= 356958 (fuelToAlignAt (bestPosToAlignAt positions) positions)))
(assert (= 105461913 (fuelToAlignAt (bestPosToAlignAt positions true) positions true)))))
(dayTodo 8)
(day 9
(load "day9.kiss")
// (highlightLowPoints "src/year2021/inputs/day9.txt")
(let [exampleLowPoints (lowPoints "src/year2021/inputs/day9-example.txt")]
(assert (= 4 (count exampleLowPoints)))
(assert (= 9 (count (basinAround (.next (exampleLowPoints.keys)) "src/year2021/inputs/day9-example.txt")))))
(let [realLowPoints (lowPoints "src/year2021/inputs/day9.txt")
realBasins (for =>lp _ realLowPoints (basinAround lp "src/year2021/inputs/day9.txt"))
basinSizes (for b realBasins (count b))]
(assert (= 480 (apply + (for =>_ height realLowPoints (+ 1 height)))))
(assert (= 1045660 (apply * (.slice (reverse (sort basinSizes)) 0 3))))))
(day 10
(load "day10.kiss")
(assert (= 462693 (apply + (map (map (Util.readLines "src/year2021/inputs/day10.txt") getLineType) score))))
(let [completionScores (sort (filter (map (map (Util.readLines "src/year2021/inputs/day10.txt") getLineType) completionScore)))]
(assert (= 3094671161 (nth completionScores (Math.floor (/ completionScores.length 2)))))))
(day 11
(load "day11.kiss")
(assert (= 35 (flashesAfter 2 "src/year2021/inputs/day11-example.txt")))
(assert (= 1656 (flashesAfter 100 "src/year2021/inputs/day11-example.txt")))
(assert (= 1723 (flashesAfter 100 "src/year2021/inputs/day11.txt")))
~(firstSimultaneousFlash "src/year2021/inputs/day11.txt"))
(day 12
(load "day12.kiss")
(assert (= 10 .length (allPaths "start" "end" "src/year2021/inputs/day12-example.txt")))
(assert (= 36 .length (allPaths "start" "end" "src/year2021/inputs/day12-example.txt" true)))
(assert (= 3421 .length (allPaths "start" "end" "src/year2021/inputs/day12.txt")))
(assert (= 84870 .length (allPaths "start" "end" "src/year2021/inputs/day12.txt" true))))
(dayTodo 13)
(dayTodo 14)
(dayTodo 15)
(dayTodo 16)
(dayTodo 17)
(dayTodo 18)
(dayTodo 19)
(dayTodo 20)
(dayTodo 21)
(dayTodo 22)
(dayTodo 23)
(dayTodo 24)
(dayTodo 25))

View File

@@ -0,0 +1,5 @@
(function countIncreases [l]
.length (filter (for [a b] (pairs l false) (> b a))))
(function slicesOf [l size]
(for i (range (- l.length (- size 1))) (l.slice i (+ i size))))

View File

@@ -0,0 +1,36 @@
(function :LineType getLineType [:String line]
(let [expected []]
(doFor char (line.split "")
(case char
("(" (expected.push ")"))
("[" (expected.push "]"))
("{" (expected.push "}"))
("<" (expected.push ">"))
((when (= (last expected) c) c)
(expected.pop))
(otherwise
(return (Corrupt char)))))
(Incomplete expected)))
(function score [:LineType line]
(case line
((Corrupt ")") 3)
((Corrupt "]") 57)
((Corrupt "}") 1197)
((Corrupt ">") 25137)
(otherwise 0)))
(function completionScore [:LineType line]
(let [&mut :Float score 0]
(case line
((Incomplete expected)
(doFor char (reverse expected)
(*= score 5)
(+= score (case char
(")" 1)
("]" 2)
("}" 3)
(">" 4)
(otherwise (throw ""))))))
(otherwise))
(if (= score 0) null score)))

View File

@@ -0,0 +1,52 @@
(function readGrid [file]
(for line (Util.readLines file) (map (line.split "") Std.parseInt)))
(function :Array<Array<Int>> neighboringPoints [:Array<Int> point]
(let [[col row] point]
(apply concat (for c (range (- col 1) (+ col 2))
(for r (range (- row 1) (+ row 2)) [c r])))))
// Return true if any new flashes were triggered, so handleFlashes can be called again
(function :Bool handleFlashes [:Array<Array<Int>> grid]
(let [&mut newFlash false]
(doFor row (range grid.length)
(doFor col (range .length (first grid))
(when (<= 10 (nth (nth grid row) col))
(set newFlash true)
(setNth (nth grid row) col 0)
(doFor [c r] (neighboringPoints [col row])
(when (and
(< c .length (first grid))
(>= c 0)
(< r grid.length)
(>= r 0)
!(= 0 (nth (nth grid r) c)))
(setNth (nth grid r) c (+ 1 (nth (nth grid r) c))))))))
newFlash))
(function _stepGrid [:Array<Array<Int>> grid]
(let [newGrid
(for line grid (for octo line (+ octo 1)))]
(while (handleFlashes newGrid) 0)
newGrid))
(var stepGrid (memoize _stepGrid))
(function _flashes [:Array<Array<Int>> grid]
(apply + (for line grid (count line ->num ?(= num 0)))))
(var flashes (memoize _flashes))
(function flashesAfter [steps file]
(let [&mut grid (readGrid file)
&mut :Float f 0]
(doFor i (range steps)
(set grid (stepGrid grid))
(+= f (flashes grid)))
f))
(function firstSimultaneousFlash [file]
(let [&mut grid (readGrid file)
&mut step 0]
(until (= (* grid.length .length (nth grid 0)) (flashes grid))
(set grid (stepGrid grid))
(+= step 1))
step))

View File

@@ -0,0 +1,48 @@
(function link [from to :Map<String,Array<String>> m]
(unless (m.exists from)
(dictSet m from []))
(.push (dictGet m from) to))
(function pathsMap [file]
(let [:Map<String,Array<String>> m (new Map)]
(doFor line (Util.readLines file)
(let [[from to] (line.split "-")]
(link from to m)
(link to from m)))
m))
(function :Array<kiss.List<String>> allPaths [start end file &opt part2]
(let [pMap (pathsMap file)
&mut :Array<kiss.List<String>> paths [[start]]
&mut :Array<Map<String,Bool>> pathsVisited []
&mut :Array<Bool> pathsDoubleVisited [false]
:Array<kiss.List<String>> finishedPaths []]
(let [pathVisited (new Map)]
(dictSet pathVisited start true)
(pathsVisited.push pathVisited))
(while paths
(let [:Array<kiss.List<String>> nextPaths []
:Array<Map<String,Bool>> nextPathsVisited []
:kiss.List<Bool> nextPathsDoubleVisited []]
(while paths
(let [path (paths.pop)
pathVisited (pathsVisited.pop)
pathDoubleVisited (pathsDoubleVisited.pop)
position (last path)]
(when (= end position)
(finishedPaths.push path)
(continue))
(doFor nextPosition (dictGet pMap position)
(let [alreadyVisited (dictGet pathVisited nextPosition)]
(when (or !alreadyVisited (and part2 !pathDoubleVisited !(= nextPosition start)))
(nextPathsDoubleVisited.push pathDoubleVisited)
(when alreadyVisited (setNth nextPathsDoubleVisited -1 alreadyVisited))
(nextPaths.push (concat (path.copy) [nextPosition]))
(let [nextPathVisited (pathVisited.copy)]
(when (nextPosition.isLowerCase)
(dictSet nextPathVisited nextPosition true))
(nextPathsVisited.push nextPathVisited)))))))
(set paths nextPaths)
(set pathsVisited nextPathsVisited)
(set pathsDoubleVisited nextPathsDoubleVisited)))
finishedPaths))

View File

@@ -0,0 +1,34 @@
(defMacro readSubCommands [file &builder b]
(let [s (Stream.fromFile (eval file))
commands []]
(until (s.isEmpty)
(commands.push (b.call (read s) [(read s)]))
(s.dropWhitespace))
`(lambda [] ,(b.begin commands))))
(var &mut :Int subX)
(var &mut :Int subY)
(function simulateSubCommands [commands &opt fixed]
(set subX 0)
(set subY 0)
(set aim 0)
(set forward (if fixed forward2 forward1))
(set down (if fixed down2 down1))
(set up (if fixed up2 up1))
(commands)
[subX subY])
(var &mut :Function forward)
(var &mut :Function down)
(var &mut :Function up)
(function forward1 [x] (+= subX x))
(function down1 [x] (+= subY x))
(function up1 [x] (-= subY x))
(function forward2 [x] (+= subX x) (+= subY (* aim x)))
(function down2 [x] (+= aim x))
(function up2 [x] (-= aim x))
(var &mut :Int aim)

View File

@@ -0,0 +1,40 @@
// Silly but fun implementation of a binary->decimal conversion
(function :Int binaryStringToDecimal [:String binary &opt :Bool invert]
(apply +
(for [idx digit] (enumerate (reverse (binary.split "")))
(*
(let [digit (Std.parseInt digit)] (if invert (- 1 digit) digit))
(^ 2 idx)))))
(assert (= 22 (binaryStringToDecimal "10110")))
(assert (= 9 (binaryStringToDecimal "10110" true)))
(function :String mostCommonBit [:String binary &opt :String tieBreaker]
(let [&mut ones 0.0
&mut total 0.0]
(doFor digit (binary.split "")
(+= total 1)
(case digit
("1" (+= ones 1))
(otherwise)))
(if (and tieBreaker (= ones (/ total 2)))
tieBreaker
(Std.string (Math.round (/ ones total))))))
(function :Int rate [:Array<String> inputs :Bool epsilon]
(binaryStringToDecimal
(.join
(for idx (range .length (first inputs))
(mostCommonBit (.join (for input inputs (input.charAt idx)) "")))
"")
epsilon))
// Part 2
(function :Int otherRate [:Array<String> inputs :Bool co2]
(doFor idx (range .length (first inputs))
(let [mcb (mostCommonBit (.join (for input inputs (input.charAt idx)) "") "1")
o2filter ->input (= (input.charAt idx) mcb)
co2Filter ->input !(o2filter input)]
(set inputs (filter inputs (if co2 co2Filter o2filter))))
(when (= 1 inputs.length) (return (binaryStringToDecimal (first inputs)))))
null)

View File

@@ -0,0 +1,75 @@
(function :GameState readState [file]
(let [lines (filter (Util.readLines file))
:Map<Int,Array<Board>> boardsByNumber (new Map)]
(objectWith
[
numbersToCall (map (.split (lines.shift) ",") Std.parseInt)
boards (for group (groups lines 5)
(let [numbers (map (apply concat (for line group (filter (line.split " ")))) Std.parseInt)
board (object
uncalled (for line (groups numbers 5) (for number line (Some number)))
called (for y (range 5) (for x (range 5) None))
won false)]
(doFor number numbers
(unless (boardsByNumber.exists number) (dictSet boardsByNumber number []))
(.push (dictGet boardsByNumber number) board))
board))
]
boardsByNumber)))
// Return true if the board wins as a result of the given number being called
(function :Bool stepBoard [:Board board numberCalled]
(doFor [y row] (enumerate board.uncalled)
(doFor [x square] (enumerate row)
(whenLet [(when (= numberCalled number) (Some number)) square]
(setNth row x None)
(setNth (nth board.called y) x (Some number)))))
(boardWon board))
(function :Bool boardWon [:Board board]
(let [:Array<Array<Option<Int>>> linesOfFive
(cast (concat
board.called
(for x (range 5) (for row board.called (nth row x)))))]
(doFor line linesOfFive
(let [&mut won true]
(doFor square line
(case square
(None (set won false) (break))
(otherwise)))
(when won (return true))))
(return false)))
// Return the winning score(s) when a board(s) win
(function :Null<Array<Int>> stepState [:GameState state]
// Keep returning the last score if there are no more numbers to call
(let [numberCalled (state.numbersToCall.shift)
winningScores []]
(when (state.boardsByNumber.exists numberCalled)
(doFor board (dictGet state.boardsByNumber numberCalled)
(unless board.won
(when (stepBoard board numberCalled)
(set board.won true)
(winningScores.push (boardScore board numberCalled))))))
winningScores))
(function :Int boardScore [:Board board numberCalled]
(* numberCalled (apply + (for row board.uncalled (apply + (for square row (case square ((Some v) v) (otherwise 0))))))))
(function winningScore [file]
(let [state (readState file)]
(loop
// Assume that for potential solutions to the AOC problem, only one board wins at a time.
(whenLet [[score] (stepState state)]
(return score))))
(throw ""))
(function lastWinningScore [file]
(let [state (readState file)
&mut finishedBoards 0]
(loop
(whenLet [winningScores (stepState state)]
(+= finishedBoards winningScores.length)
(when (= finishedBoards state.boards.length)
(return (first winningScores))))))
(throw ""))

View File

@@ -0,0 +1,40 @@
(function :Array<Line> parseLines [file]
(for textLine (Util.readLines file)
(let [[p1 p2] (textLine.split " -> ")
[x1 y1] (map (p1.split ",") Std.parseInt)
[x2 y2] (map (p2.split ",") Std.parseInt)]
(objectWith x1 y1 x2 y2))))
// An inclusive range whose start may be greater than its end
(function :Array<Int> inclusiveRange [start end]
(let [s (min start end)
e (max start end)]
(let [r (collect (range s (+ e 1)))]
(if (> start end)
(reverse r)
r))))
(function :Array<Point> pointsCoveredBy [:Line line :Bool part2]
(cond
((= line.x1 line.x2)
(for y (inclusiveRange line.y1 line.y2) [line.x1 y]))
((= line.y1 line.y2)
(for x (inclusiveRange line.x1 line.x2) [x line.y1]))
// Diagonal lines:
(part2
(cast (zipThrow (inclusiveRange line.x1 line.x2) (inclusiveRange line.y1 line.y2))))
(true
[])))
(function :Map<String,Int64> ventsByPos [file :Bool part2]
(let [lines (parseLines file)
:Map<String,Int64> theMap (new Map)]
(doFor line lines
(doFor point (pointsCoveredBy line part2)
(dictInc theMap (Std.string point) 1)))
theMap))
(function :Int numHotPositions [file &opt :Bool part2]
(let [theMap (ventsByPos file ?part2)
two (Int64Helper.fromFloat 2)]
(count theMap ->vents #{ vents >= two; }#)))

View File

@@ -0,0 +1,35 @@
// Store the simulation state in a map of age => count.
(function :Map<Int,Int64> ageMap [:String file]
(let [:Array<Int> list (map (.split (first (Util.readLines file)) ",") Std.parseInt)
:Map<Int,Int64> theMap (new Map)]
// special key -1 corresponds to total count
(dictSet theMap -1 (Int64Helper.fromFloat list.length))
(doFor age (range 9)
(dictSet theMap age 0i64))
(doFor age list
(let [count (dictGet theMap age)
one 1i64]
(dictSet theMap age #{count + one;}#)))
theMap))
(function :Map<Int,Int64> stepAgeMap [:Map<Int,Int64> theMap]
// Lanternfish are guaranteed to be between 0-8 years old
(let [:Map<Int,Int64> newMap (new Map)]
(dictSet newMap -1 (dictGet theMap -1))
(doFor age (range 9)
(let [count (dictGet theMap age)]
(case age
// Lanternfish giving birth:
(0
(dictInc newMap 8 count)
(dictInc newMap -1 count)
(dictInc newMap 6 count))
(otherwise
(dictInc newMap (- age 1) count)))))
newMap))
(function :String countAfter [file days]
(let [&mut ageMap (ageMap file)]
(doFor i (range days)
(set ageMap (stepAgeMap ageMap)))
(Int64.toStr (dictGet ageMap -1))))

View File

@@ -0,0 +1,32 @@
(function crabPositions [file]
(map (.split (first (Util.readLines file)) ",") Std.parseInt))
(function :Int summation [n]
(/ (* n (+ 1 n)) 2))
(function :Int fuelToAlignAt [x :Array<Int> positions &opt :Bool part2]
(apply + (for crabX positions
(let [distance (Math.abs (- x crabX))]
(if part2
(summation distance)
distance)))))
(function :Int bestPosToAlignAt [:Array<Int> positions &opt :Bool part2]
(let [&mut minX (apply min positions)
&mut maxX (apply max positions)]
(loop
(let [middleX (Math.floor (/ (+ minX maxX) 2))
middleFuel (fuelToAlignAt middleX positions ?part2)
leftBy1Fuel (fuelToAlignAt (- middleX 1) positions ?part2)
rightBy1Fuel (fuelToAlignAt (+ middleX 1) positions ?part2)]
~[minX middleX maxX]
(cond
((= minX middleX maxX)
(throw ""))
((< middleFuel (min leftBy1Fuel rightBy1Fuel))
(return middleX))
((< leftBy1Fuel middleFuel)
(set maxX middleX))
((< rightBy1Fuel middleFuel)
(set minX middleX)))))
(throw "")))

View File

@@ -0,0 +1,78 @@
(function :Map<String,Int> pointMap [file]
(let [:Map<String,Int> m (new Map)
lines (Util.readLines file)]
(for [y line] (enumerate lines)
(for [x tile] (enumerate (line.split ""))
(dictSet m (mapKey [x y]) (Std.parseInt tile))))
m))
(function :String mapKey [:Array<Int> coords]
"$(first coords),$(second coords)")
(function :Array<Int> coordinates [:String key]
(map (key.split ",") Std.parseInt))
(function :Array<String> adjacentPoints [:String key]
(let [[x y] (coordinates key)]
(map
[
[(+ x 1) y]
[(- x 1) y]
[x (+ y 1)]
[x (- y 1)]
]
mapKey)))
(function :Map<String,Int> adjacentPointMap [:String key :Map<String,Int> allPoints]
(let [:Map<String,Int> m (new Map)]
(doFor point (adjacentPoints key)
(whenLet [h (dictGet allPoints point)]
(dictSet m point h)))
m))
(function :Map<String,Int> lowPoints [file]
(let [allPoints (pointMap file)
pointsToCheck (pointMap file)
:Map<String,Int> lowPoints (new Map)]
(while !(= 0 (count pointsToCheck))
(let [[key height] (dictShift pointsToCheck)
adj (adjacentPointMap key allPoints)
&mut isLow true]
(doFor =>adjKey adjHeight adj
(cond
((> adjHeight height)
(pointsToCheck.remove adjKey))
((<= adjHeight height)
(set isLow false))))
(when isLow (dictSet lowPoints key height))))
lowPoints))
(function :Map<String,Int> basinAround [:String lowPoint file &opt :Map<String,Int> basinAlready :Map<String,Int> allPoints :Map<String,Int> pointsToCheck]
(set allPoints (or allPoints (pointMap file)))
(set pointsToCheck (or pointsToCheck (pointMap file)))
(set basinAlready (or basinAlready (new Map<String,Int>)))
(dictSet basinAlready lowPoint (dictGet allPoints lowPoint))
(pointsToCheck.remove lowPoint)
(doFor =>point _ (adjacentPointMap lowPoint allPoints)
(whenLet [(when (< h 9) h) (dictGet pointsToCheck point)]
(basinAround point file basinAlready allPoints pointsToCheck)))
basinAlready)
(function :Void highlightLowPoints [file]
(let [writer (Ansi.writer (Sys.stdout))
m (lowPoints file)
lines (Util.readLines file)
&mut isRed false]
(doFor [y line] (enumerate lines)
(doFor [x height] (enumerate (line.split ""))
(if (m.exists (mapKey [x y]))
(unless isRed
(writer.fg RED)
(set isRed true))
(when isRed
(writer.fg WHITE)
(set isRed false)))
(writer.write height))
(writer.write "\n"))))

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,10 @@
[({(<(())[]>[[{[]{<()<>>
[(()[<>])]({[<{<<[]>>(
{([(<{}[<>[]}>{[]{[(<()>
(((({<>}<{<{<>}{[]{[]{}
[[<[([]))<([[{}[[()]]]
[{[{({}]{}}([{[{{{}}([]
{<[[]]>}<{[{[{[]{()[[[]
[<(<(<(<{}))><([]([]()
<{([([[(<>()){}]>(<<{{
<{([{{}}[<[[[<>{}]]]>[]]

View File

@@ -0,0 +1,90 @@
({[[{{({<<<<(<{}()><()[]>)[([]{}){<>[]}]><[{<>()}{<><>}]<(()[])([]<>)>>>){<([(())<()<>>][{{}{}}[(){
({{<{<<(([({<[[]()]<()<>>>{(()())(<>())}}[{[(){}]}(<{}[]>[<>])])<[[[{}()](<>{})]]<<{{}()}[<>]>[({})[{}()]]>>
<[<{{<<{[{{([(())<{}{}>][{<><>}(<><>)])}}]((<(<{[]<>}>(<()()>[[]()]))>))}([(<<({[]()})>(({[][]}([]{})){(()()
({<{{{{<<{([{[<>()][<>()]}[((){})([]())]])[[<[()()]<()<>>>[{<>()}{(){}}]][[{<>{}}[{}[]]][([]())[{}()
[((<[[{<[<{[<[<>[]]<(){}>><(()[])(()())>]((<<>{}>[<><>]){[()<>]{{}<>}})}>]<<[<[<()()>](({}{})(
[{{([([[<([[<[()()][()<>]>][<<{}{}>[<>{}]>(((){}){[][]})]][<[<()()><{}()>](<<><>><[]{}>)><<<<>()><{}<>>>(([](
<{[{(<{<[[{{{[[]{}]<{}<>>>{{{}()}<[]<>>}}([(()[])]{[{}<>][<>()]})}((<(<>{})<<>[]>>[[{}[]][{}{}]])
[<[<(<{[<([({(<>())[{}()]}[[<><>]])]){<{(((){})[{}<>])<<<>[]>(()[])>}(<([]{})<<>[]>><[{}<>][{}()]>)><<({(
(([{[<[{{[<[{{{}{}}<[]{}>}[[{}{}]{(){}}]][(<{}()>([][])){<<><>>({}[])}]>[(<(<>{})<<>{}>><{(){}}[
<<[{[{[(<(<({{[]{}}[<>]])[{{[]{}}{[]()}}(<<>{}>[<>{}])]>{{(<{}[]>[{}[]])<{[]{}}<[]<>>>}{<{{}[]}([](
({<<<[[({(<{{<{}()><()<>>}[{[]{}}<[]<>>]}>[<({<>{}}[[]<>])(<(){}>{[]<>})>[[(()()}(<>[])][(<><>)<{}
[(<[{[[(<{({<[[]<>]><<()[]>[{}()]>}([{<>}<[]<>>]({{}()}<{}{}>])){({(()[])([][])}<<{}{}>({}{})
{(<<<(([[((<(<()<>>{(){}}){{{}[]}{{}()}}><(({}){<>()})<((){})({}())>>))][[{[<[<>[]]{(){}}>](
{[<((<[[[<<[[<{}<>>{[]()}]<[{}<>][[]{}]>]{<<{}>[()[]]>{[<><>][<>]}}>{{{{{}()}}[{[]<>}<<><>>]}}>]<
([(<[[<({{[([{[]()}{<>()}]{[()<>]<<>{}>})({{()()]([]<>)})]{<((<>())[[][]])[[()<>][<>[]]]>}}}{{[[(<<><>>
<({{({<([[({<{[][]}[{}[]]>}([(<>[])((){})]([[]<>]([]{}))))}({{<<[][]>[()()]>[<()[]>{<>{}}]}[{[{}{}]
<<<[<<(<(<{{[[()()]{[][]>]<<[]()><[]<>>>}[{(<>()){<><>}}[<()<>>[[]<>]]]}>{(<(<<>>[<><>])([
[[{({[<{(([<<[<>()](<><>)>{({}<>)(()[])}>{(({}<>){{}<>})}]([<[()[]]>><[(<>[])[<>()]]>)))[{{(({
[<[<[{{[{{(([{()[]}{<><>}]<[{}()]({}{})>)([{()<>}{[][]}]({<><>}([]<>))))<<{<{}{}]}<(<>())([]
([(<{<{([<[((<()<>>{[][]}))([<<><>><[]{}>]({()[]}(<>())))]([<[[]<>](())><[(){}]{()[]}>]{[[[]
[{[{({{[[(([[<{}()]{{}{}}]]){([([][])([]<>)]<[()<>](<>())>){[<(){}>[<>()]]{[{}<>][{}<>]}}})(<[<{()()}([]<>)
(({<[<[<{({[(<[]<>>{(){}})[<[][]>([]{})]]{<<<>{}>(()<>)>[[()[]]}}})}{<<<((()<>)[{}{}]){<<>{}>[<>()]}><<
<[{[<[([[{{<{(<><>)[{}[]]}<<<>{}><{}()>>>}}{<<(({}[])([]{})}{(<>{}){[]<>}}>((([]<>)<{}()>){{{}<>}})><<<<
[<[([[{({(<<<(<>())>(([]())[<>{}])><<<[]()>[()<>]><(<>){<>{}>>>><({[[]{}]<{}[]>}([<>{}][{}<>
{(<[<<(<[({(({[]()}<[]{}>)({[]<>}{<><>})){<(()[]){[][]}>([()]<<>()>)}}{{((<>())[()]){[{}<>]<<>
(<{{<(({{{<[[([]()>]<{<>()}[{}{}]>]>[([[()<>](<>())][{<>{}}<[][]>])<[<()[]>]({()[]}[[]()])>]}}}))>[[<
((({{<[{[((<(<[][]>([]())){[()<>][{}{}]}>){<{{<><>}<<><>>}<([]<>)>>{([{}()][()[]])}})<[<{{<>}[[][]]}[[()[]]
([<((<(<{<{{[<[]<>>{(){}}](<{}[]>(()[]))}}>}>)<{([{<<{()()}{()[]}>[{{}()}({}[])]><[[{}[]](<>())]{[()(
<<[<<(({({((([[][]]<[]{}>)<({}<>){()()}>)[<[{}<>][[]()]>{<[]()><<>>}])})}{(([[[<[][]><[]{}>](<{}[]>{
<<[(<<(((<([[{()()}<(){}>]({()<>}[()<>])][{((){})(<><>)}{<<>[]>({}{})}]){(<{()[]}[<>()]>)<({<><>}){[
{(<[{([<(<[(({<>()})<[{}<>]{()<>}>)(([<>()]{[][]}))]{[<{[]{}}>[(()<>)])(<({}{})><[{}<>]{<><>}>)
{((<{[<{{[[{(<<>[]>{{}[]})}{[({}<>)[<>[]]]}]]<[[[[()]{{}<>)]{({}()){[][]}}]<[{<><>}<[][]>]((<>
{(<({[<<<(<<{[{}{}]}([[]()]({}[]))>(({<>()}<[]>)<{{}()}{{}{}}>}>)(<{{[()[]]{()}}(<<>()>{[]<>})}>)>[([[<{<
(<<[<<[(([[{({()}[<>[]])}][<(<[][]>{(){}})>(<<{}{}>{{}[]}>[({}<>)<<>[]>])]]))]((({[{{<[]{}>{{}()}}[([][])({}<
(({{<({<{{(<<{<>{}}{()[]}><[(){}][()[]]>><[<<>[]>{{}}](<()[]>{[]{}})>)}<{<([()<>]{<>{}})[([
(<<[<{<{{<(({({}())([]{})}<({}())>)[[({}{})[<>()]]]>{{<{{}{}}<{}()>>(({}{})[{}{}])}}>({({<<
[[{([{<<<{<({[()[]][{}()]})>[{[({}{})[()()]](<<>()><<>[]>)}<(<<><>><[]{}>)<(<><>)<[]()>>>]}>>>}])}({(<<[[
(<{(<<({[[{({{{}{}}[<>()>}[[<><>]])}]<{(<{()<>}{[]()}>[([][])[{}[]]])<[[<>][(){}]]{<[][]>([]{})}>}[((<<><>
<(({[(<<[<[[{{()()}(<>())}(<[][]><<><>>)]][[(<[]>[<>[]])([[]{}]{<>()})]{{[[]{}](<>[])}({()()}([]()))}]>]({({
<<([<(((<{{[(<<>()>(()[])){{[]<>}<[]{}>}]<{[<>()][(){}]}>}<<[<{}<>>]>{([<><>]{<><>}){{{}[]
(([{[[[<{[{[[[()()]<()>]<[{}{}][(){}]>]}]}{[<{{[()<>][()[]]}}[{{()()}}[[<>[]][{}()]]])<<({<>()}<{}()>)>({([
{[(<{{({[{{[{([]>({}<>)}<<{}[]>>][[{(){}}[<><>]]{<(){}>({}())}]}}[{([({}()){()[]}]{({})<[]<>>})[[[[]<>]]([<>
(([{[({{<([[([[]{}]<()[]>)(<<>>[<>[]])]{[{()()}<{}{}>](<{}()>([]{})>}])<[<{{<>{}}}<[<>[]]>>{[{[]
{({<<({<<<<{(([]()))(<<>()>)}({<()<>>{{}{}}})>[{[(<>)]{<[][]>[{}()]}}]>({[[[{}[]]({}[])]]})>>{{
[(<[<((<[(([((<><>)([]{})){([][])[()()]}]<{{{}{}}{(){}}}>)<{{({}{})<()>}({()()}[[]{}])}<[[<>()]{()<>}>({<>}
<{{[(({{<((<({[]{}}(()()))[[{}{}]{{}<>}]>[([<>[]>(()<>))]))[[([{<><>}<<>[]>][[()<>]([][])]){<((){}){{}[
((<[({<<({{[<[(){}](<><>)>[{[][]}[{}[]]]]}<([(<><>){[]{}}])([[()()]<()[]>])>}(([[[[]()]{{}{}}]{[{}<>]{()
(({{[<<<[[{<<[<><>]<{}<>>>[<<>()>(<>{})]>}<{(<()()><{}()>)<([]())[<>{}]>}>]]<<{([(<>{})[<>()]]{{[]()}{()(
<[{{{<<<[{[{<[()[]]({}[])>}[{({}{}){<>[]}}{<<>[]>[{}[]]}]]<[<({}{})>(([]())<{}{}>)]{([{}[]]([]<>)
{<<<[[(([{{[[(()<>)<()()>]][[{{}[]}[()()]]]}<<{[{}()]<{}[]>}[{()[]}<[]<>>]>>}]))][{(<[(<[<<><>>(()())]<({}{
(<<<{{(<{[[[[(()())<<>[]>]<[[][]]>]((<{}<>><[][]>)[([]())[()()]])]([(<{}>(()[]))<([]()){[]{}}>]))}>)}({
({<(({{{<{{[{<()<>>[<>[]]}([[]()][()()])]{([()<>]({}())){{{}()>{[]<>}}}}}>}<[{[<[<{}()>[{}{}]]<<()()><()(
<[{<<<([{<[{{<[][]><[]{}>}{[{}]{{}}}}<<{()[]}([]{})>([{}[])(()()))>][<[{[][]}{(){}}]{[()[]
{<[{{[<([[[[<{()[]}[<>()]>{<<>[]>{{}()}}]<({[]{}}{()<>}){{()[]}(<>{})}>]({[<()[]]([]{})][<<>()>(<><>)]}<<
({{[(([<[<[[{(()[])}{(()[])[()()]}]{[(<><>){<>{}}]<<[]<>><<><>>>}]>]<[(([<<>[]>]))]<((<{{}{}}{(){}}>
({[[(({[[<(<({<>{}})[([]<>)([]{})]>[<([][])<{}{}>>(<()()>)]){<[[<>()]{[]{}}]({{}{}}([]()))>}>]]}<{<{
[[{([<({[[[<<<[]{}>({}())>([{}<>][<><>])>{<(()<>)<<><>>>{[<>{}]{[]{}}}}]{{((()[]))[({}[])<[]{}>]}[({<>{}
([[(([<[<([(<(<>()){{}{}>><<<>[]>[{}<>]>)<(<[]()>[()[]])>])>(<{([{[][]}<<>()>]<[<>[]]>)(<<{
([{({<<<<[[({[[]<>]({}<>)}[({}[])(<>{})])][<{((){}){[]()}}<[{}[]]<[]{}>>>(<<()[]><{}<>>]{[<><>][{}<>]}
<<<<{{({<{{[([<>()][[][]]){{[]{}}<{}()>}][(<[]{}>[{}<>]>[{<>[]}((){})]]}}(<<<{[]{}}{{}}><([]{})({}<>)>>({((
[[<<{<{<(<{({{{}[]}}((<>)(<>[]))){{{[]()}<()()>}[{<>()}<[]{}>]}}{[{({}{})<{}[]>}({<>[]}{[]<>})]{([{}
{{{[{[([[{{[{<{}>({}<>)}[([][]){<><>}]]([{{}[]}])}[<[[[]()]]{[[]{}]}>{<{<>()}>}]}]{[{[[[<>{}]{[]}]((
(<[[<<<({[[{{[<>[]]<(){}>}}<({<><>}{<>{}}){((){})([]<>)}>](<[[{}[]][[]]][{{}<>}[{}{}}]>((([][])[()()]){<()
{([((<{{{[[<<{()()}<[])>[{<>()}<()()>]>]((<[{}<>]<{}()>>{{{}<>}(()())}){{<()[]>(<><>)}{[[]()](<>())}})]}
{{<<<<({[<{<([{}<>]([][]))<<{}[]>([]{})>><[{<>()}{[]()}](<(){}><[]()>)>}<[<<[][]>({}())>(<[]
{[<[[((<({<<[<{}<>><{}()>]><<<{}<>>{<>}>{{{}[]){()<>}}>>([[{[][]}(()[])](({}[]){{}{}})])}<<({(<>
[[[<([[([<[{[{()[]}{{}[]}][(()()){[]{}}]}{{{<><>}{[][]}}{<{}<>]({}())}}]>[[<[{()<>}<{}{}>]<{[]()}({}<>)>>{<<
({[{<[[[([[((({}<>)((){})){({}{}){{}()}})[[(()())<{}[]>]]>[[[<{}()>]<[[]]<()[]>>][<(()<>){[]()}
[[<[{[<<<<{{({[]<>}({}[]))[<<><>>([]{})]}[<{<><>}<[]{}>><([]())[()<>]>]}<([{<><>}<()()>]<[(){}]({})>
[{(<<{{((({[<{<>[]}>](<[[]]({}[])>(<{}{}>{()()}))}<([({}<>)<{}()>]({[][]}({}())))>)<{{((<><>
{{((<(<[[<<(<([]()){()<>}><[()()]{[]{}}>)[[({}{})({}{})]<<{}{}><[][]>>]>[(<(())[<>[]]>)<<[<>()
[{([({<<{<<[{<[]>({}{})}((<>[])<<><>>)][<([])><{[]<>}<[]{}>>]><{({<>()}<<>[]>)}>>(([[({}{})[()[]]]
<{([({{{{(([{<[]()>(<>())}{{{}{}}{{}()}}]<{<{}()>[()<>]}({()[]}{<><>})>)<((<<>()>{<>{}}))({([]<>)[{}{}]}<([]
<{<[(<<({<(([(<><>)([]())]){{<<>()>}(<{}{}>{<>[]})})[{[{()<>}[<>[]]]([()()]{{}})}{([<>()]<[]()>)<[<>[]]{{}()
<{<{[[({<[[([[{}<>][{}<>]][(<>[]){()[]}])<([()[]])[<()<>>[{}()]]>}{[{[{}[]]<[]<>>}[(<>[])<()()>]]([<
[<{(<{<(([{[<<()()><()[]>>{({}{})<[][]>}]<(<(){}>)>}[<<<[]()>>[({}<>)([]())>><<((){}){<><>
[[[(((<({[([[<<>()>]{(<><>)<[]<>>}]([<[]()>{()()}]{[{}()]{<>}}))[[([<><>](<>[]))({<>()})]]](<(([[]
<{({(([{<[(<{{[]()}}>({[{}{}]{[]{}}}[{()}(<>{})>))]<(([[()][[][]]])<<<{}<>><(){}>>>)({<(<>{})>(([]())({}<>))
<([([[[<([(<(([]<>)){[[]()][()]}>{[{<>()}([]{})]{([]<>)({}[])>})]<[<({(){}}(()<>)){{{}()}<[]{}>}><[[<>{}]
([(<[({<<(<{{(()<>)<(){}>}{<{}{}>}}>[<<(<>())<{}[]>><[<>()][<><>]>><<([]{}){[]()}>>])<[<{<[]()>[[]{}]}{([])<(
(<<{[<[(<(<<[<(){}>[[]{}]][({}())<[]{}>]>>{[<(<>())<{}()>>][<{{}<>}<[][]>><[<>()](()())>]}]>{({[<<[]()
[([<<<([<<[{{<()()><{}()>}{<[]{}>}}]{[{[[]()]}]({<(){}>(()[])})}>(<{{<<>{}>{()()}}<(()[])[[]()]>}(<<(){}>{
<(<([((<((({(((){})]{{{}}<{}>}}<<(()())({}())>((<>[])([]()))>)){{[<((){})<<><>>>]}})><<[<[({[]{}}(<><>)){(<
<{[<[[({<[<<{(<>[])[()[]]}{<<>>(()[])}><[{(){}}[<>()]][{[][]}(()<>)]>>{<<(<>[])[[]()]>{{<>()}<{}
<<({[({{[([{[<[]><<>[]>]}<{{{}[]][()<>]}{{()[]}[{}<>]}>])]}<<{([{(<>[]){{}<>}}]([[<>()][()<>]]))({(<{
(<{{{[[([<[{{{[]<>}[()<>]}<<<>()>>}[((()[]){()[]})]]>{{([([][])])<([<><>]{()<>})(<<>{}><<>{}>)>}{<<<[]
[[([<([[<[<{({()<>}{[]{}}){[{}[]][<>[]]}}>]>]{{({(([{}[]]({}{})){[<>{}]{{}<>}})<((<>()))[{[]{}}]>}((((
({[<<[[[{{{[<<[]>([]<>)>(([]<>)<[]{}>)][<<{}[]>({}{})>]}([[<{}{}>[()[]]]((()<>)[<>[]])]{([()<>]{[][]}){{<><
{<[{({[<({({[{{}[]}[[]{}]]({{}{}}([]()))}[(<()<>>{[]{}}){<[]{}>[()]}])}<({<{[]()}({}[])>[(()){<>()}]}
[([{{(([[{<[{(()())[{}[]]}<<<>><{}[]>>]{[{[]()}[[]<>]](<{}{}>[()()})}>}[([(<{}<>><{}<>>)(<<>{}>([]{}))]({([]{

View File

@@ -0,0 +1,10 @@
5483143223
2745854711
5264556173
6141336146
6357385478
4167524645
2176841721
6882881134
4846848554
5283751526

View File

@@ -0,0 +1,10 @@
2238518614
4552388553
2562121143
2666685337
7575518784
3572534871
8411718283
7742668385
1235133231
2546165345

View File

@@ -0,0 +1,7 @@
start-A
start-b
A-c
A-b
b-d
A-end
b-end

View File

@@ -0,0 +1,24 @@
rf-RL
rf-wz
wz-RL
AV-mh
end-wz
end-dm
wz-gy
wz-dm
cg-AV
rf-AV
rf-gy
end-mh
cg-gy
cg-RL
gy-RL
VI-gy
AV-gy
dm-rf
start-cg
start-RL
rf-mh
AV-start
qk-mh
wz-mh

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,19 @@
7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7

View File

@@ -0,0 +1,601 @@
59,91,13,82,8,32,74,96,55,51,19,47,46,44,5,21,95,71,48,60,68,81,80,14,23,28,26,78,12,22,49,1,83,88,39,53,84,37,93,24,42,7,56,20,92,90,25,36,34,52,27,50,85,75,89,63,33,4,66,17,98,57,3,9,54,0,94,29,79,61,45,86,16,30,77,76,6,38,70,62,72,43,69,35,18,97,73,41,40,64,67,31,58,11,15,87,65,2,10,99
42 47 77 49 67
64 82 32 94 78
96 62 45 11 43
55 92 81 66 88
12 95 19 24 71
96 40 25 11 89
84 33 10 55 16
22 90 54 42 86
73 13 70 32 56
18 78 41 81 50
58 48 24 3 40
38 61 95 39 36
45 21 2 90 57
42 41 22 83 67
73 77 59 0 85
2 11 17 28 22
93 1 27 85 13
37 72 54 94 86
25 40 57 60 71
38 46 83 30 92
14 88 34 10 87
31 47 46 72 28
26 1 50 81 76
98 2 17 59 39
80 99 84 62 44
22 80 28 31 27
21 92 5 64 65
73 85 35 66 76
11 29 75 81 37
90 69 53 97 67
84 89 93 1 37
99 13 17 52 81
31 0 28 12 91
92 20 41 36 35
40 26 23 51 64
72 50 20 87 82
28 88 15 9 24
47 54 3 84 76
14 34 33 65 78
53 60 23 21 77
76 17 7 38 25
72 82 96 83 2
94 86 56 43 97
26 93 59 48 55
3 85 29 19 4
58 95 50 21 47
85 33 76 97 62
39 70 42 25 71
53 79 87 41 91
45 27 3 92 88
9 38 32 18 56
40 5 62 70 41
1 30 39 90 79
69 84 74 59 35
65 54 21 27 73
92 85 69 5 29
91 74 1 26 60
63 87 37 71 62
59 15 56 45 95
86 67 39 34 89
89 30 39 15 3
71 37 38 56 77
67 13 41 85 36
32 7 12 97 87
50 42 21 33 23
11 40 38 96 6
88 39 64 33 86
51 79 63 12 3
47 7 69 41 80
10 28 91 37 89
90 14 52 49 93
62 2 35 46 42
87 3 85 29 68
15 96 72 10 59
50 80 5 20 44
58 92 96 48 74
2 17 54 93 32
39 46 76 91 10
26 21 52 11 65
23 36 78 77 43
79 5 10 41 97
80 45 81 32 87
18 78 21 92 74
14 49 94 59 37
6 62 76 57 35
52 59 3 78 89
6 49 90 54 15
82 30 64 7 85
51 50 73 71 60
17 26 18 98 94
71 86 8 0 34
77 81 47 13 53
99 93 29 28 85
76 49 51 1 4
90 65 88 16 98
89 32 50 77 71
35 34 66 60 27
52 24 57 42 37
31 1 70 13 62
33 91 61 7 30
55 10 86 85 46
2 96 68 40 24
44 49 6 13 99
93 36 31 52 67
84 81 48 14 1
84 92 66 24 95
70 26 67 25 32
52 11 55 76 78
82 33 83 93 37
21 68 15 94 10
95 45 58 25 27
15 93 10 76 86
59 90 87 99 72
4 71 31 3 37
52 35 83 54 33
73 39 32 89 84
5 70 47 61 18
16 92 78 26 8
94 37 14 53 27
44 30 68 77 63
94 24 54 1 49
27 90 84 79 69
6 70 25 36 80
14 16 53 92 44
61 33 55 89 23
85 92 37 64 59
70 67 55 60 27
69 62 45 48 57
30 75 99 18 43
82 7 10 19 38
78 46 32 95 58
67 66 39 77 62
50 53 47 55 70
23 42 38 22 60
30 29 10 40 84
27 89 46 75 73
84 48 7 12 82
34 15 81 98 65
24 83 87 4 86
9 55 47 8 36
30 70 5 21 82
95 11 49 37 48
68 74 41 63 85
93 35 7 8 80
45 31 53 55 26
98 75 47 9 18
44 97 26 73 64
62 99 13 43 0
51 37 10 74 94
35 68 22 76 83
35 9 82 95 40
30 10 99 7 47
12 77 54 25 34
73 97 38 11 17
70 41 87 29 57
95 50 69 58 93
89 52 23 24 8
20 53 43 22 84
60 4 19 64 6
92 21 10 26 85
37 48 98 80 77
15 76 12 75 52
94 41 40 69 63
92 28 74 14 17
3 62 86 19 82
40 1 33 53 64
60 9 76 50 44
0 34 51 98 12
6 84 72 86 15
18 80 13 5 23
40 86 96 61 34
13 0 39 88 32
36 91 82 51 97
83 87 63 94 26
53 30 23 14 45
93 20 29 9 66
25 72 10 54 30
31 51 41 15 47
71 61 96 55 81
3 50 36 94 27
8 23 14 30 10
91 36 58 40 92
74 84 33 44 96
86 20 82 57 5
87 11 95 46 31
95 51 73 41 10
31 15 70 56 39
83 11 37 38 42
13 58 53 77 14
79 71 5 29 93
21 59 62 60 87
92 90 51 15 57
38 68 26 78 36
31 84 97 81 74
12 48 35 70 93
13 52 95 80 87
71 77 74 35 61
37 41 14 73 46
62 90 54 0 88
67 20 56 22 85
95 56 68 49 44
34 18 65 13 71
52 94 87 90 19
36 30 45 3 77
84 89 64 20 41
17 6 13 27 64
14 34 60 32 40
51 97 8 57 88
44 79 82 31 2
15 99 59 62 50
86 16 33 27 39
3 34 42 15 48
84 2 85 31 87
97 41 49 13 23
51 6 71 82 10
82 25 17 28 48
95 7 29 55 81
97 3 26 64 11
98 75 45 89 96
49 70 84 41 57
5 51 65 35 27
89 17 18 66 37
16 68 56 87 33
71 86 52 48 23
47 10 53 7 55
76 88 50 5 83
23 63 13 26 41
84 60 36 80 68
37 79 47 74 1
59 55 58 99 65
48 51 12 74 9
31 26 67 95 98
54 46 56 3 80
10 57 17 37 92
78 87 28 82 52
49 85 57 58 30
77 76 92 97 3
69 66 14 25 83
63 98 47 37 78
22 96 89 91 95
5 24 38 66 88
32 18 82 26 23
41 36 14 91 21
56 51 99 83 58
28 27 78 3 43
55 65 60 13 11
10 41 9 39 62
75 85 12 61 66
35 43 64 94 48
44 28 1 92 2
19 81 21 33 15
48 55 91 95 7
34 90 64 50 97
23 43 60 3 26
16 22 67 58 9
83 33 88 16 47
13 98 43 24 34
45 9 27 2 76
4 57 80 77 87
61 11 66 81 50
17 62 88 23 5
57 25 84 55 65
60 85 39 90 99
83 79 37 34 46
29 54 92 12 51
28 59 78 96 55
12 77 46 81 23
60 54 17 16 45
42 89 62 63 47
26 98 31 85 7
86 91 2 39 0
67 73 62 69 38
6 94 25 66 7
26 41 81 59 79
71 44 33 46 10
24 22 21 82 62
48 74 83 17 64
66 23 4 78 36
54 80 38 20 14
47 85 96 39 12
72 56 75 34 59
20 22 90 87 97
24 95 61 91 74
51 38 7 18 21
73 57 89 80 92
42 23 22 5 37
72 77 88 63 7
44 80 62 10 69
91 1 60 70 25
67 97 75 45 55
3 45 91 4 13
14 6 34 49 82
31 98 35 23 85
10 71 16 40 15
11 99 7 32 28
42 44 52 27 25
31 28 11 86 81
35 80 20 65 24
17 8 93 49 58
16 92 78 63 61
57 60 34 95 46
78 25 79 42 36
65 84 74 82 91
33 44 9 47 90
53 69 54 0 76
67 29 7 82 73
87 49 44 10 14
40 98 89 41 12
58 20 27 13 53
51 78 96 59 80
75 8 73 47 4
46 67 28 78 5
29 62 65 19 13
48 95 21 81 50
80 38 51 96 91
45 41 80 64 32
14 93 40 76 70
15 77 49 0 98
19 68 16 18 92
81 83 47 36 44
56 3 88 97 72
60 46 98 11 51
52 8 54 89 9
67 41 78 17 82
99 2 6 7 77
66 20 48 64 9
19 52 74 56 59
42 81 29 93 6
72 75 83 15 76
99 23 14 44 50
77 90 79 49 3
51 76 2 41 74
86 96 36 84 16
85 5 95 18 47
73 33 32 45 58
82 72 86 18 84
59 60 6 22 7
31 19 90 47 58
65 71 4 67 92
17 95 44 35 26
14 81 55 51 29
44 64 99 41 43
82 72 53 33 10
95 38 76 68 56
57 88 39 0 5
15 47 2 78 9
13 36 41 29 97
86 18 57 69 49
79 37 91 88 59
21 23 87 1 30
39 45 56 8 89
2 42 66 3 70
75 80 17 64 97
32 35 60 23 88
18 51 99 7 38
30 54 83 88 74
52 15 91 77 86
2 79 12 16 50
40 14 97 63 35
33 71 25 21 94
37 85 35 10 22
52 31 77 48 82
51 3 49 95 20
24 75 0 89 97
78 63 14 46 42
91 26 28 38 31
55 32 0 95 10
68 25 45 57 56
36 14 69 30 15
81 3 37 13 40
75 30 8 28 44
60 79 59 74 9
81 50 66 92 61
29 2 88 15 99
87 91 26 7 96
74 75 81 72 89
44 8 94 3 97
93 46 37 0 56
63 21 29 91 55
41 4 31 49 33
55 8 57 29 63
85 36 58 89 33
44 75 67 23 39
49 46 32 10 84
15 7 59 56 12
1 91 65 67 4
31 5 34 30 37
93 66 18 79 19
28 6 0 47 42
21 98 87 89 81
79 30 10 21 69
56 19 27 90 72
77 57 93 92 97
15 45 4 18 68
59 2 29 26 83
21 41 53 30 31
85 18 17 52 39
49 38 4 57 54
63 74 59 16 8
66 62 27 10 37
28 94 59 97 5
91 17 72 84 80
21 6 60 77 98
50 70 44 85 95
92 61 43 16 93
10 91 27 84 63
69 97 9 83 89
6 47 42 87 77
20 94 34 4 64
0 12 38 39 18
4 54 55 76 64
39 15 80 42 9
57 56 87 61 28
70 85 36 25 75
38 53 12 71 47
83 97 32 29 0
60 30 31 92 61
1 42 17 94 67
20 39 36 91 10
18 69 47 43 76
63 74 68 71 92
85 94 8 41 35
39 32 62 67 87
70 95 40 84 51
52 30 53 22 1
17 39 74 50 55
72 7 88 4 68
94 91 45 15 77
48 53 62 46 67
69 12 70 32 35
56 89 96 51 14
23 77 62 4 22
88 87 27 5 94
6 28 40 11 83
33 86 99 80 63
2 96 16 33 81
18 9 45 39 49
3 21 59 27 58
48 31 28 42 77
37 83 61 25 71
13 1 6 34 23
56 40 66 50 99
46 28 65 32 27
60 67 22 17 0
29 43 21 8 59
90 86 69 22 5
72 96 29 62 59
40 1 54 87 55
41 78 28 43 33
77 49 82 13 61
82 8 39 68 51
97 13 22 7 92
60 88 84 16 30
86 54 71 50 87
72 24 41 25 48
9 35 43 49 77
24 29 1 70 80
15 4 93 48 6
31 17 0 99 95
28 13 56 41 97
24 75 16 59 98
86 5 7 93 10
42 71 6 91 21
43 69 78 94 33
3 45 73 11 20
19 3 17 58 89
11 54 53 34 14
66 82 44 46 41
1 22 62 69 25
65 98 76 84 13
37 93 47 15 20
43 46 82 53 75
18 90 25 69 92
54 42 83 41 17
44 14 22 70 4
78 72 96 86 89
64 61 69 79 85
10 59 37 18 46
5 22 31 81 7
40 57 53 66 32
8 77 33 81 90
27 2 94 24 59
79 28 30 97 60
32 18 10 1 38
58 12 5 87 17
68 76 4 63 16
75 66 19 50 14
73 24 22 6 33
99 61 87 1 47
35 83 48 39 20
42 39 28 87 37
89 12 75 82 84
17 74 49 3 5
56 76 66 92 85
27 18 86 8 58
71 83 21 29 63
46 38 62 3 67
56 72 40 96 64
95 89 91 4 47
7 92 80 69 61

View File

@@ -0,0 +1,10 @@
0,9 -> 5,9
8,0 -> 0,8
9,4 -> 3,4
2,2 -> 2,1
7,0 -> 7,4
6,4 -> 2,0
0,9 -> 2,9
3,4 -> 1,4
0,0 -> 8,8
5,5 -> 8,2

View File

@@ -0,0 +1,500 @@
432,708 -> 432,160
579,594 -> 579,448
351,791 -> 351,595
520,836 -> 564,880
30,443 -> 666,443
868,157 -> 563,157
112,186 -> 853,927
493,387 -> 456,424
846,165 -> 160,165
811,805 -> 292,805
454,333 -> 885,333
32,407 -> 32,933
907,590 -> 368,51
117,904 -> 375,904
913,145 -> 913,798
245,402 -> 245,755
855,910 -> 427,482
677,252 -> 189,252
65,30 -> 956,921
808,114 -> 808,76
62,946 -> 92,946
478,756 -> 581,756
387,812 -> 495,812
197,606 -> 413,390
173,640 -> 515,640
456,26 -> 456,345
888,69 -> 888,436
157,959 -> 824,959
832,519 -> 43,519
891,258 -> 660,258
929,176 -> 815,176
309,893 -> 309,831
841,825 -> 914,825
168,260 -> 168,389
264,969 -> 763,969
527,553 -> 118,962
251,413 -> 228,413
163,759 -> 550,759
776,650 -> 914,650
178,99 -> 887,808
368,92 -> 646,92
705,583 -> 394,583
547,278 -> 597,328
24,941 -> 264,941
599,588 -> 597,588
308,668 -> 308,369
462,335 -> 462,251
109,343 -> 594,343
928,980 -> 727,980
955,955 -> 100,100
655,716 -> 688,716
797,64 -> 354,64
100,633 -> 100,39
639,757 -> 630,757
22,962 -> 878,106
236,687 -> 130,687
117,881 -> 404,881
590,334 -> 590,984
864,888 -> 864,126
648,164 -> 396,164
749,446 -> 191,446
41,973 -> 955,59
247,725 -> 193,725
736,136 -> 736,545
919,33 -> 122,830
66,986 -> 735,317
262,989 -> 262,440
25,86 -> 59,86
329,151 -> 953,151
387,105 -> 310,105
216,197 -> 307,106
568,574 -> 681,574
982,801 -> 982,853
965,606 -> 634,606
901,854 -> 72,25
875,278 -> 569,584
500,240 -> 355,240
790,448 -> 438,96
922,863 -> 559,863
772,727 -> 129,84
25,11 -> 897,883
568,609 -> 318,859
876,875 -> 453,452
181,471 -> 544,834
323,377 -> 655,377
418,20 -> 418,963
449,392 -> 401,440
601,958 -> 296,653
527,343 -> 519,343
763,328 -> 290,328
889,262 -> 499,262
390,478 -> 879,478
298,764 -> 25,764
753,86 -> 40,799
311,350 -> 353,350
132,817 -> 504,817
34,121 -> 837,924
535,27 -> 535,539
932,257 -> 932,983
44,833 -> 596,833
141,34 -> 910,803
781,61 -> 453,389
929,28 -> 449,508
679,958 -> 679,618
894,273 -> 894,778
735,697 -> 735,395
266,693 -> 561,988
402,586 -> 402,983
141,459 -> 368,459
721,723 -> 721,914
845,69 -> 871,95
196,370 -> 728,902
110,725 -> 110,391
901,670 -> 664,433
542,601 -> 244,899
365,386 -> 365,655
647,738 -> 197,738
292,250 -> 292,29
441,603 -> 571,603
847,146 -> 847,941
629,282 -> 629,700
132,44 -> 805,44
972,31 -> 17,986
437,303 -> 186,303
982,416 -> 245,416
498,258 -> 752,258
300,815 -> 228,743
10,69 -> 925,984
26,275 -> 227,275
969,358 -> 969,833
19,593 -> 136,593
436,451 -> 436,364
181,847 -> 199,865
559,409 -> 902,409
664,570 -> 749,485
170,176 -> 170,254
469,908 -> 635,742
94,496 -> 341,743
142,913 -> 142,987
968,143 -> 552,559
577,847 -> 629,847
888,354 -> 214,354
756,769 -> 756,835
117,696 -> 756,696
966,297 -> 699,297
187,800 -> 504,800
467,739 -> 264,942
952,83 -> 85,950
167,478 -> 167,480
846,257 -> 814,225
427,787 -> 867,787
287,886 -> 287,256
538,594 -> 838,594
987,989 -> 11,13
205,825 -> 876,154
433,437 -> 29,437
954,943 -> 105,94
53,143 -> 615,143
116,438 -> 116,136
31,48 -> 826,843
522,637 -> 522,976
201,322 -> 146,322
873,214 -> 873,564
719,460 -> 719,295
879,886 -> 12,19
688,723 -> 688,677
769,779 -> 962,586
109,887 -> 940,56
359,57 -> 147,57
809,857 -> 22,857
239,860 -> 239,523
329,907 -> 67,907
796,165 -> 979,348
661,385 -> 661,606
638,685 -> 53,100
727,787 -> 883,943
324,414 -> 229,414
323,363 -> 323,357
201,440 -> 201,316
778,54 -> 68,764
528,151 -> 528,549
909,970 -> 20,81
978,12 -> 17,973
944,574 -> 944,499
625,85 -> 452,258
708,618 -> 148,618
40,957 -> 40,31
113,288 -> 113,424
262,109 -> 262,982
90,359 -> 319,359
635,21 -> 635,433
337,310 -> 918,891
512,701 -> 100,289
830,946 -> 60,176
233,959 -> 257,959
460,702 -> 156,702
587,96 -> 508,17
954,552 -> 906,552
359,268 -> 324,268
571,416 -> 422,416
147,684 -> 379,684
817,274 -> 631,88
722,85 -> 527,85
845,457 -> 288,457
50,687 -> 282,919
368,310 -> 704,310
156,20 -> 920,784
888,89 -> 347,89
173,27 -> 173,984
659,450 -> 507,298
144,857 -> 671,857
575,976 -> 455,856
452,531 -> 452,67
858,506 -> 858,205
903,486 -> 610,193
936,165 -> 498,165
864,336 -> 875,336
113,15 -> 113,492
153,892 -> 153,20
65,401 -> 669,401
261,743 -> 261,693
511,401 -> 241,401
272,683 -> 875,683
630,871 -> 630,868
249,68 -> 249,500
242,532 -> 111,532
140,125 -> 220,125
878,457 -> 435,457
18,723 -> 693,48
853,234 -> 853,953
285,507 -> 155,507
139,873 -> 139,339
965,327 -> 965,696
68,616 -> 68,484
886,659 -> 701,659
162,836 -> 886,112
119,281 -> 119,776
445,706 -> 430,706
420,705 -> 420,263
941,764 -> 941,442
910,932 -> 910,289
24,11 -> 249,11
476,296 -> 564,296
960,822 -> 450,312
802,852 -> 272,852
527,127 -> 527,408
928,132 -> 382,678
102,297 -> 109,297
308,586 -> 308,894
35,913 -> 99,977
950,392 -> 950,405
96,531 -> 892,531
700,451 -> 291,42
219,197 -> 219,201
863,861 -> 267,265
104,55 -> 944,895
309,909 -> 165,909
732,458 -> 790,458
877,959 -> 45,959
30,902 -> 907,25
314,36 -> 974,36
665,580 -> 665,882
526,288 -> 865,288
312,166 -> 312,464
556,380 -> 820,644
870,959 -> 602,959
273,69 -> 726,69
161,885 -> 882,164
251,332 -> 251,989
853,962 -> 348,962
523,47 -> 577,47
559,503 -> 128,934
625,681 -> 477,533
179,352 -> 800,973
609,847 -> 609,218
249,521 -> 249,930
237,903 -> 299,903
59,373 -> 59,127
788,558 -> 377,147
242,792 -> 421,792
449,874 -> 449,901
821,263 -> 964,263
162,121 -> 561,520
31,35 -> 600,604
622,649 -> 622,97
33,967 -> 985,15
877,745 -> 56,745
688,688 -> 688,385
227,137 -> 728,638
839,54 -> 593,54
662,36 -> 88,610
845,500 -> 163,500
131,579 -> 131,592
632,28 -> 632,387
335,79 -> 979,79
33,95 -> 302,95
981,13 -> 28,966
737,165 -> 170,732
869,751 -> 14,751
420,367 -> 420,949
623,618 -> 558,553
964,34 -> 15,983
567,75 -> 553,75
674,835 -> 674,886
374,727 -> 199,552
880,953 -> 579,953
320,664 -> 777,207
290,198 -> 290,689
405,778 -> 405,253
801,164 -> 801,766
722,572 -> 722,721
704,890 -> 905,890
80,909 -> 974,909
50,643 -> 371,964
903,810 -> 42,810
451,102 -> 13,102
944,151 -> 337,758
781,514 -> 417,514
875,828 -> 77,30
551,210 -> 728,210
280,447 -> 484,447
934,926 -> 144,136
341,182 -> 485,182
611,748 -> 321,458
135,483 -> 22,483
590,577 -> 590,307
962,48 -> 962,95
285,770 -> 395,880
740,804 -> 362,426
942,72 -> 530,484
750,893 -> 750,725
707,916 -> 769,978
424,344 -> 47,344
267,891 -> 267,955
718,112 -> 367,463
917,148 -> 80,985
679,682 -> 51,682
72,641 -> 72,729
717,760 -> 153,196
600,341 -> 600,312
530,258 -> 747,258
703,434 -> 703,266
381,291 -> 34,291
889,645 -> 640,645
488,877 -> 958,407
263,375 -> 43,155
865,33 -> 408,33
373,337 -> 412,337
584,15 -> 76,15
431,447 -> 263,447
176,644 -> 176,875
603,487 -> 257,487
857,45 -> 144,758
833,108 -> 64,877
23,173 -> 23,156
175,434 -> 330,434
988,22 -> 28,982
26,793 -> 26,680
164,221 -> 901,958
832,672 -> 250,90
805,537 -> 805,600
393,302 -> 871,302
633,709 -> 171,247
833,118 -> 990,118
806,943 -> 806,447
348,345 -> 967,964
825,747 -> 399,321
976,339 -> 371,339
857,26 -> 857,737
348,474 -> 715,474
260,678 -> 820,678
735,301 -> 347,689
150,591 -> 150,838
538,285 -> 19,804
845,904 -> 60,119
440,963 -> 440,586
500,72 -> 500,819
772,742 -> 772,828
737,452 -> 113,452
238,818 -> 941,115
123,343 -> 123,639
927,370 -> 635,78
373,745 -> 235,745
140,77 -> 140,262
517,375 -> 178,714
72,423 -> 821,423
437,251 -> 210,251
170,51 -> 941,822
135,467 -> 515,467
886,920 -> 89,123
374,302 -> 550,478
289,592 -> 289,557
79,112 -> 944,977
303,831 -> 419,831
369,32 -> 348,53
404,13 -> 890,499
377,781 -> 260,781
288,769 -> 981,76
924,188 -> 628,188
399,313 -> 959,313
970,52 -> 196,826
623,984 -> 169,984
572,644 -> 749,644
426,533 -> 343,533
94,155 -> 721,782
328,268 -> 544,268
878,124 -> 89,913
966,170 -> 610,526
108,841 -> 766,183
115,808 -> 688,235
45,835 -> 806,74
152,932 -> 152,938
229,814 -> 634,409
649,647 -> 649,850
437,904 -> 321,904
115,116 -> 784,785
19,657 -> 19,415
831,833 -> 616,833
88,954 -> 970,72
11,981 -> 707,285
261,255 -> 909,903
883,875 -> 97,89
872,21 -> 872,820
34,229 -> 34,690
10,10 -> 989,989
986,178 -> 986,963
413,933 -> 413,907
897,756 -> 897,88
771,408 -> 771,468
327,198 -> 327,421
938,900 -> 938,721
533,629 -> 533,661
177,701 -> 489,389
601,839 -> 40,278
969,38 -> 70,937
797,698 -> 140,41
794,107 -> 156,745
730,410 -> 730,727
115,14 -> 358,14
608,382 -> 608,959
457,788 -> 393,788
592,729 -> 363,500
742,964 -> 87,309
230,790 -> 433,587
302,878 -> 725,455
353,722 -> 353,512
219,856 -> 824,856
92,44 -> 938,890
547,179 -> 458,90
953,368 -> 193,368
767,26 -> 932,26
883,96 -> 883,311
679,136 -> 679,656
32,117 -> 393,478
619,704 -> 260,704
101,96 -> 985,980
169,61 -> 800,692
545,902 -> 306,902
948,16 -> 52,912
546,691 -> 546,887
611,294 -> 611,324
942,89 -> 942,688
34,838 -> 34,734
68,98 -> 68,876
485,73 -> 485,779
573,976 -> 573,364
331,233 -> 729,631
616,116 -> 616,432
909,947 -> 904,947
901,139 -> 864,102
289,511 -> 289,371
269,845 -> 269,597
934,86 -> 80,940
18,883 -> 790,111
154,436 -> 154,464
628,901 -> 96,901
573,154 -> 159,154
118,475 -> 118,339
12,12 -> 989,989
44,760 -> 512,760
45,859 -> 888,16
103,826 -> 827,102
41,22 -> 945,926
769,339 -> 188,339
136,658 -> 748,46
297,37 -> 297,160
261,575 -> 293,543
910,724 -> 910,634
30,31 -> 962,963
747,285 -> 122,910
451,976 -> 32,976
558,524 -> 165,524
631,395 -> 631,48
584,382 -> 874,382
246,838 -> 246,980
750,460 -> 577,460
736,747 -> 560,747
604,889 -> 604,150
206,819 -> 18,819
989,974 -> 116,101

View File

@@ -0,0 +1 @@
3,4,3,1,2

View File

@@ -0,0 +1 @@
1,5,5,1,5,1,5,3,1,3,2,4,3,4,1,1,3,5,4,4,2,1,2,1,2,1,2,1,5,2,1,5,1,2,2,1,5,5,5,1,1,1,5,1,3,4,5,1,2,2,5,5,3,4,5,4,4,1,4,5,3,4,4,5,2,4,2,2,1,3,4,3,2,3,4,1,4,4,4,5,1,3,4,2,5,4,5,3,1,4,1,1,1,2,4,2,1,5,1,4,5,3,3,4,1,1,4,3,4,1,1,1,5,4,3,5,2,4,1,1,2,3,2,4,4,3,3,5,3,1,4,5,5,4,3,3,5,1,5,3,5,2,5,1,5,5,2,3,3,1,1,2,2,4,3,1,5,1,1,3,1,4,1,2,3,5,5,1,2,3,4,3,4,1,1,5,5,3,3,4,5,1,1,4,1,4,1,3,5,5,1,4,3,1,3,5,5,5,5,5,2,2,1,2,4,1,5,3,3,5,4,5,4,1,5,1,5,1,2,5,4,5,5,3,2,2,2,5,4,4,3,3,1,4,1,2,3,1,5,4,5,3,4,1,1,2,2,1,2,5,1,1,1,5,4,5,2,1,4,4,1,1,3,3,1,3,2,1,5,2,3,4,5,3,5,4,3,1,3,5,5,5,5,2,1,1,4,2,5,1,5,1,3,4,3,5,5,1,4,3

View File

@@ -0,0 +1 @@
16,1,2,0,4,2,7,1,2,14

View File

@@ -0,0 +1 @@
1101,1,29,67,1102,0,1,65,1008,65,35,66,1005,66,28,1,67,65,20,4,0,1001,65,1,65,1106,0,8,99,35,67,101,99,105,32,110,39,101,115,116,32,112,97,115,32,117,110,101,32,105,110,116,99,111,100,101,32,112,114,111,103,114,97,109,10,720,75,471,1142,1442,166,896,138,61,643,1331,315,365,43,4,289,577,1249,30,53,117,956,28,385,27,168,92,110,127,331,27,93,730,122,27,19,1563,708,849,190,1620,1135,878,74,60,424,500,10,7,1687,375,159,566,228,1069,1603,194,463,387,2,890,1060,600,27,578,66,91,510,383,827,1485,18,30,500,0,386,1088,1259,136,1013,660,748,1115,53,22,726,270,29,573,95,5,87,1467,95,1087,27,145,1264,12,621,549,1078,22,243,986,738,64,75,243,47,381,475,565,183,33,645,1,221,11,698,1415,77,269,1,61,67,219,1543,860,1352,338,292,42,2,962,97,282,132,1147,375,479,59,538,617,328,167,1414,365,185,364,553,407,807,226,1698,427,569,448,1549,957,192,906,101,21,31,224,715,890,992,1319,40,663,1094,1647,273,76,268,554,9,18,446,204,61,480,187,1260,131,272,1290,298,199,632,19,95,62,90,46,30,255,165,464,816,405,215,762,197,555,270,306,291,777,122,6,594,1073,231,3,198,790,902,747,908,202,33,56,412,615,437,60,978,418,1871,882,794,32,91,1620,119,16,327,1091,487,1934,1,114,880,32,709,213,127,92,360,30,897,975,75,651,818,87,626,397,927,90,128,129,141,112,1059,609,590,835,76,1707,791,310,328,1937,2,257,646,1150,823,181,5,31,925,321,75,75,167,12,571,340,62,434,107,619,255,923,357,537,507,1044,110,408,1015,616,711,28,322,435,556,27,3,932,1430,218,1227,429,209,735,106,1388,20,17,778,865,1578,847,150,268,1256,208,50,739,268,9,1242,1044,33,895,675,913,68,40,973,256,1314,531,101,709,291,176,211,757,535,31,9,618,121,770,868,1264,1829,68,318,697,51,64,89,27,240,975,586,27,149,142,547,25,168,393,81,1009,924,58,75,1007,675,73,286,598,212,686,431,274,75,1383,270,586,63,419,190,88,1005,222,169,403,440,385,474,697,1303,205,21,978,266,164,42,25,1687,150,235,422,1699,1323,63,260,1366,136,824,378,21,243,330,611,919,305,369,175,596,65,145,837,277,333,974,772,259,1445,19,20,73,253,9,77,329,466,584,216,39,406,299,446,91,1466,1981,307,755,168,245,236,73,103,149,754,106,195,95,147,84,378,230,588,27,953,876,1495,1794,1,15,176,895,1304,888,1174,444,4,978,14,614,1307,291,454,313,908,206,863,170,1360,85,720,605,38,1071,1137,833,356,1490,39,1531,142,109,93,392,12,1887,301,888,344,411,11,202,909,189,245,614,39,140,63,363,590,872,328,30,1627,1329,17,60,961,105,176,771,1119,23,1107,796,446,617,215,298,203,844,0,369,694,125,413,1412,167,95,858,1190,53,1238,83,126,482,2,93,1838,109,342,15,89,280,187,73,129,23,487,555,168,502,175,43,228,109,1170,1208,296,104,243,99,344,107,917,506,1434,1013,566,615,351,18,265,1152,585,1802,347,39,274,27,825,170,409,10,1159,43,10,1139,53,46,283,706,152,1804,863,797,31,141,351,131,242,1014,1617,228,258,739,336,665,409,1398,0,77,168,1376,464,135,1122,219,13,33,315,174,387,186,814,374,7,712,174,10,752,74,660,139,844,478,318,1866,26,307,82,87,1036,696,411,109,6,423,651,7,410,95,1600,134,203,273,37,81,151,320,1043,59,1074,1166,741,1040,155,534,972,1157,167,27,688,63,94,168,808,265,1791,328,781,403,1177,818,422,0,101,1483,67,1098,1679,148,546,1224,117,188,376,886,226,3,132,114,44,479,29,16,43,472,175,335,77,17,1252,468,390,71,111,728,1167,822,57,30,620,81,945,379,362,731,22,709,1428,1588,681,30,930,48,64,819,21,1179,907,1969,537,98,545,1303,217,1234,713,39,929,37,50,949,165,164,702,1706,1133,935,438,298,565,661,1133,762,1501,179,74,793,323,20,260,1396,204,421,654,699,64,1080,119,171,1217,652,11,13,298,302,1569,841,142,428,1535,159,538,381,1,721,59,12,297,421,126,9,91,1549,361,941,159,273,132,51,576,1247,754,18,105,355,500,121,714,264,363,27,515,109,359,57,1237,85,541,407,71,150,60,1089,125,462,214,76,21,1,865,605,1054,36,1332,687,1023,1012,961,298,537,1519,1644,971,93,596,289,355,526,359,348,706,232,133,523,95,723,489,1061,646,769,158,150,699,759,355,97,447,737,140,98,12,235,238,1175,705,65,158,204,164,109,1150

View File

@@ -0,0 +1,5 @@
2199943210
3987894921
9856789892
8767896789
9899965678

View File

@@ -0,0 +1,100 @@
7678921234988678901238954323498765432125789999567898765454223789989865432124569899894325678989212965
6567890139876589992367896512987654321034569988979999879321012569876987573245979767799434599878909893
5456799298987699989456789401398765732125678967991098988632123458965987684347898955688976988768919789
4345898987698789878967894323499977543245789456789987999544345567894398789458997544567897976956898678
3212987656569898767998985435989899764766789366789875987656776678993239896569987632456789865432234567
4336796543456989658789976549978798765677890155898964298767897899789123987678998874567893984321045698
5445995432345678945669987698766689976798931234987654109988999935678939899789679965678912995452166789
6569876521236789123458998987654567899899545356998543212399990126989298759894579878789429876743278995
7689986432345691012567999098767678976989876877899984323456789237892129642923499989896545987895345954
8789976545856789134569892199898789895976989988999876567967898356799298731019989997998656798985457893
9895989686787899246698789989999898769894394399989987678988987577898987656198968956999897999876568954
4934399787899997657997679879987957656793239498765699789999599988967798868987657849899989879987679765
3210239898989298799876534568896543234899398997654249899923478999456679879876543434678976756798799876
4323359999879129987655423456789654455678966789743134998899567964345569998765432323459765433459893987
5535698998968934599543012348998766566789355678951034997678978954233498999988751012578978712778932398
6645987897659549698792133959429987679891234589432129865567899543102987899876542123457897653567890129
9759876789798998999983249898902398789932356796543298754346789643229876553987854348578998765778921234
9898765990987877698765398767893569898756789897954349853245678994346985432398765467689689978989434378
9949976891396662549876989756789698998767893959876498432134679989459876654459876567896567989997545456
9956987932985451234989977645656997649998932345987987543245789879569998786867997678987499797897697967
7899999549876310125698765432345896432109985456798998676346789567998759897878998789599986656789989898
6798897656995421234999876501456789543998976567899989785456894456789543998989559895498764345899878789
5676789799876532459899997632567897669887987678989976998767943345678932109995446996987653234998765678
4565692987987683769789876543478998798756799799878995439889321234589543319865325789876543129987644569
3234891996598954598698998674989439979545678998956989421995495345678954429876434567998652098999432878
4545689879459765986567899876896529865436567987545678939876989459789867834987545699899754987898541245
7666799767249899865456778987898698965323457976434567891989879567899989655698956989798999876987672396
8787898654123999794325767998999987979412399854323457892499968998998998776789769876587989765698983989
9898987653234598643214656899998876898924987643212356789598956989767899989899889976465678924589999878
8959199764545689954902345789987765786899876542101245678987547678958899898967999984324569012367899767
7543019878789899899895496899876643245689987653212357899498636569446798767856789999313458923457998758
9652123989896998789799989901985432136793298765323768912399923479234987654545998898926567894568989549
8783435699934987654678978919876543046789109895434879101989812568995698543239896787987678985879876435
9897545789219876543234567923987652167898912976545689239878601477889789632198785676798799976989989324
9998676792101997689345698934598743999987893987866789398765412345678998744987674345889899899992398435
8799787893912398795458789545689899887876689798978996989876323456889898759876543234578999788921987567
7678998959893459987567899766798998776564599649989565878989554567996789769985432123699998677892398878
6578999446789567899678998977897899656453878932199434567898765678945698978996543434589987545799469989
3467891235697679998799567898986798743212367943098923456989976789434987899987655546678998624678978998
2379910145789798969896466789875669853201458954987897599878999898559876789899897677889359534567899987
9498921234578967345912345698654356965342367899876798989767899987698865678789998788990297645678999896
8997945945689653239543456789743239877463478998985679975656789998987654235699869899459987657789998765
7686899899789764398654678999899345998569989767564578954545689989599875123987654912348999767899979654
2545798788999875498798789987988957987678997654353989543234569876421986013498763201567899878998765423
1236789657899989569899899986767998998989987543212895432123698765310197124569654323468998999769876534
0198996545678997689968909865456789989799898987323789543254789898725239295998767434569987987656998676
1246789324568998798754219874367899875698769996534679654345679997654356989899896545678976898543459987
2345994213579329999864346976788987654398657987785789876456789999765459878788987698789875795432346899
3456943103589439899976487987899398966497546798999897989597899899976598765697898789895934989521235678
6577893212347998799987898998989209897989434989321956899989999789987699654346889897954329878945656789
7898954523456895688999999879878998789879219876532348998978987678999987543234678976543219867896867897
8949765434577934567934698765467899654569998997543467987767896567899995432125698988655398988987898986
9939876657689810128955987656356789543498766789676579876456789459929876321014567899789997699898939345
9899989769798752379969876543245678932398754596987689996567992398910987432323458959899878598789320123
8789999878987643467893985432134699210987643135898792987678931987934598893434567945921965498678921939
4678999989598654688912396543245964329876532023789910199789549876899799764545678956899876324567939898
3456789895429765678901987656457895435995432134567891249897698965788989879659789968998765412679898797
4597998766219876789799999786578987559876543265678943459998987754557678988769899879879876543498776656
6789109854101989895698999898689499678987665345789759598789876543234567999899901999768987656989654235
7899298943212399923987997999995398989298887969899898999567987432123459877989219878957898769876543123
8987987654434459439876786789889987899199999878978997898689989731036769765678998767942109879988654234
9566798765645798998765345698778656798987878989769876998799876545645998954567896659956212989999986646
4345899876756987899873234569656546897976967897654645789893987676789987943456964348897323499854598758
3234998989967986789982126997435135456895456986543234678901998787899876542546893237789434999743219869
9099767898999865689321019876521012367892356798632126778919879898998997621238964345678956898654309878
8987652967989754578993998765432763778901256989321034567898765909987898730145695476789867959765412989
7896543459876543469789879876743454678994349876532123456789973219876799421234689587891979039876567899
6987699967985432379699867997854575789689467987944354569899894398765987632345898799910989123987679988
5498987899876541234578956798965676793578989099895465678976789987654598943656789899321995434598989767
6589876999997672345689545899877989892345893139799876889765698998873459658769898957949876565789397656
7678965698976543456789323459988999943456789298689989997654567999764569879878997745698989876899298743
9899894797897765689893312568999598764567899987578993298785979898975678989989986534987899987998999652
4987643656798976793932101478965329998789999876459999109999898767899789694499997929876799999897898921
3298432345789989892953212379654219899899876432367898919878798756998999532378999897655678998786987890
5099321234877895989894324569795499789999987321458987899957654346897898921569998789743235699674876791
6988430123456794578789456678989987678998765432567896999843210123456987892459976678954346986553285892
7976651237897943445678967889978976587899876543678965698754942434567935793598765569899457996442154589
8995432456789321234567978998767894356789997656789214569869893545678923989789874346778967984321023478
9987659567895432345689989999846789267899898767892103489998789678989019878999995234569979876465434567
2198968789976563456792199899656895458986789878943212567987659989392198965487893123479989987566545678
9099879999998654567989299798767976569875897989654343459876548990129987654356989235689495698998676799
8989999987769765679878987649878987679564456899868764567982137892498975431245678949794323499998787891
7668899876545989899768999534989998789432345689999879779873256899987653210134567898999467987899898990
5456789994323499998657898745699979895431956798989989898654568998798974321265678987998979886789979789
4245790295934589876546789976789865976599897997878998939765978989659765432347889986987898765699865678
2134891989895678996534578999898654987988789896767897659877899678942986543656798765976789654599654589
3256789978789989987321367899987843499875699765656998798998936567890197665689897674765678963688912345
9346789865678999865475456789996512569764598654546789987659123489921298778895999543124789754567901234
8957898654567921976986667896989423498843699543234678976543234595432569989954398751012678965679892945
7899987653459892988987778965978934987654985432124599897964545679843456798743297532154567896798789896
6899999542356789899299989754567899999769876563465789789875657789654577897659349854365789949897679789
5678987601298997789124596643454598789989997654567898679986768898765689999798998768456895435989567678
4567998732349765691015975432123987667895329765678976588987878999876998898987649879768929759878454569
3479876545458954589129896543239865456789439878899643456798989989989876787976534999878909998764343457
2567987657567895678998789654497654345678945989998532145799098767898765476899745699989698999873232565
3456798978678976889765678967986643234789656793987643234689198656987654365678956789995466987652101234
4568999989889987996554779879865432123898767892198754365699987545976543234579987899954345699843232345
5679987691998998965443456989976321034999878943598767896789876529865432123689298989875677899854345456
6789996532467899654321269890195432146890989659679889919899965419876543254590129678986789998767957687
7999986543456798767532345789987543256932399767899995323999876201998754365789234567897890129878968798

View File

@@ -0,0 +1,12 @@
(import year2022.Food)
(function :Array<Food> parseFood [file]
(for paragraph (Util.readParagraphLines file)
(paragraph.map Std.parseInt)))
(function sumFood [:Array<Food> food]
(for elf food (apply + elf)))
(let [sums (sumFood (parseFood "src/year2022/inputs/day1.txt"))]
(assert (= 71502 (apply max sums)))
(assert (= 208191 (apply + (.slice (sort sums) -3)))))

View File

@@ -0,0 +1,30 @@
(import year2022.OpCode)
(var cyclesToMeasure [20 60 100 140 180 220])
(function :Array<Int> signalStrengths [:String programFile :Bool cycleLock]
(let [&mut x 1
program (Util.readLines programFile)
ctm (cyclesToMeasure.copy)
&mut nextCycleToMeasure (ctm.shift)
:Array<OpCode> opCodes []]
(for cycle (range (+ 1 (last cyclesToMeasure)))
(let [properCycleNum (+ 1 cycle)
startX x]
(when (or !cycleLock !opCodes)
(case (.split (if cycleLock (program.shift) (nth program ~cycle)) " ")
(["addx" v]
(opCodes.push (object delay 2 op ->:Void (+= x (Std.parseInt v)))))
(otherwise)))
(doFor [idx opCode] (zip (reverse (collect (range opCodes.length))) (reverse opCodes))
(-= opCode.delay 1)
(when (= 0 opCode.delay)
(opCode.op)
(opCodes.remove opCode)))
(if (= properCycleNum nextCycleToMeasure)
{
(set nextCycleToMeasure (ctm.shift))
(* properCycleNum startX)
}
(continue))))))
(assertEquals 13140 (apply + (signalStrengths "src/year2022/inputs/day10example.txt" true)))
(assertEquals 15680 (apply + (signalStrengths (input 10) true)))

View File

@@ -0,0 +1,40 @@
(importAs year2022.inputs.Day11Example MonkeysExample)
(importAs year2022.inputs.Day11 Monkeys)
(function :Float monkeyBusiness [:Array<Monkey> monkeys]
(apply * (.slice (sort (for monkey monkeys monkey.inspections)) -2)))
(function printMonkeys [monkeys]
(doFor [id monkey] (enumerate monkeys)
(print "${id}: $monkey.items (${monkey.inspections} inspections)")))
// PART 1
(MonkeysExample.main)
(Monkeys.main)
(doFor _ (range 20)
(MonkeysExample.round true)
(Monkeys.round true))
(assertEquals 10605 (monkeyBusiness MonkeysExample.monkeys))
(assertEquals 118674 (monkeyBusiness Monkeys.monkeys))
// PART 2
(MonkeysExample.main)
(Monkeys.main)
/*
// Unsolved.
(doFor num (range 10000)
(MonkeysExample.round false)
(Monkeys.round false)
(let [num (+ 1 num)]
(case num
((or 1 20 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000)
(print "== After round $num ==")
(printMonkeys MonkeysExample.monkeys))
(otherwise null))))
(assertEquals 2713310158.0 ~(monkeyBusiness MonkeysExample.monkeys))*/

View File

@@ -0,0 +1,62 @@
(import year2022.ListOrdering)
(function :ListOrdering isInOrder [:Dynamic left :Dynamic right]
(typeCase [left right]
([:Int l :Int r]
(cond
((< l r) Good)
((> l r) Bad)
(true Inconclusive)))
([:Array<Dynamic> l :Array<Dynamic> r]
(let [innerL (l.shift) innerR (r.shift)]
(case [(isNull innerL) (isNull innerR)]
([true false]
Good)
([false true]
Bad)
([true true]
Inconclusive)
([false false]
(case
(isInOrder innerL innerR)
(Inconclusive
(isInOrder l r))
(other other)
(never null))))))
([:Int l :Array<Dynamic> r]
(isInOrder [l] r))
([:Array<Dynamic> l :Int r]
(isInOrder l [r]))
(never otherwise)))
(function indicesInOrder [file]
(let [pairs (Util.readParagraphLines file)]
(for [idx :Array<String> pair] (enumerate pairs)
(let [[left right] (for line pair (Json.parse line))]
(case (isInOrder left right)
(Good (+ 1 idx))
(Bad (continue))
(never otherwise))))))
(assertEquals 13 (apply + (indicesInOrder "src/year2022/inputs/day13example.txt")))
(assertEquals 6420 (apply + (indicesInOrder (input 13))))
(function sortedPackets [file]
(let [packets (Util.readLines file)]
(packets.push "[[2]]")
(packets.push "[[6]]")
(packets.sort ->[left right]
(case (isInOrder (Json.parse left) (Json.parse right))
(Good -1)
(Bad 1)
(never otherwise)))
packets))
(let [sp (sortedPackets "src/year2022/inputs/day13example.txt")]
(assertEquals 9 (sp.indexOf "[[2]]"))
(assertEquals 13 (sp.indexOf "[[6]]")))
(let [sp (sortedPackets (input 13))]
(let [a (sp.indexOf "[[2]]")
b (sp.indexOf "[[6]]")]
(assertEquals 22000 #{(a+1) * (b+1);}}#)))

View File

@@ -0,0 +1,48 @@
(var ROCK 1)
(var PAPER 2)
(var SCISSORS 3)
(var LOSE 0)
(var DRAW 3)
(var WIN 6)
(function playScore [:Array<String> round]
(case round
([_ "X" "1"] ROCK)
([_ "Y" "1"] PAPER)
([_ "Z" "1"] SCISSORS)
(["A" "Y" "2"] ROCK)
(["A" "Z" "2"] PAPER)
(["A" "X" "2"] SCISSORS)
(["B" "X" "2"] ROCK)
(["B" "Y" "2"] PAPER)
(["B" "Z" "2"] SCISSORS)
(["C" "Z" "2"] ROCK)
(["C" "X" "2"] PAPER)
(["C" "Y" "2"] SCISSORS)
(never otherwise)))
(function outcomeScore [:Array<String> round]
(case round
(["A" "Z" "1"] LOSE)
(["A" "X" "1"] DRAW)
(["A" "Y" "1"] WIN)
(["B" "X" "1"] LOSE)
(["B" "Y" "1"] DRAW)
(["B" "Z" "1"] WIN)
(["C" "Y" "1"] LOSE)
(["C" "Z" "1"] DRAW)
(["C" "X" "1"] WIN)
([_ "X" "2"] LOSE)
([_ "Y" "2"] DRAW)
([_ "Z" "2"] WIN)
(never otherwise)))
(function totalScore [round]
(+ (playScore round) (outcomeScore round)))
(function readRounds [file encoding]
(for line (Util.readLines file) (.concat (line.split " ") [encoding])))
(assert (= 9759 (apply + (.map (readRounds (input 2) "1") totalScore))))
(assert (= 12429 (apply + (.map (readRounds (input 2) "2") totalScore))))

View File

@@ -0,0 +1,31 @@
(var itemPriorities (for [idx c] (enumerate (defAndCall function allCharCodes (concat (for c (range 26) (+ .code "a" c)) (for c (range 26) (+ .code "A" c))))) =>(String.fromCharCode c) (+ idx 1)))
(function splitHalves [:String line]
(let [halfLen (iHalf line.length)]
[(line.substr 0 halfLen) (line.substr halfLen)]))
(function duplicateItem [:String line]
(let [[firstHalf secondHalf] (splitHalves line)
firstHalfMap (for char (firstHalf.split "") =>char true)]
(doFor char (secondHalf.split "") (when (firstHalfMap.exists char) (return char))))
"")
(assert (= 8018 (apply + (for item (filter (.map (Util.readLines (input 3)) duplicateItem)) (dictGet itemPriorities item)))))
(function :Map<String,Map<Int,Bool>> emptyGroupPossessionMap [] (for c (allCharCodes) =>(String.fromCharCode c) (new Map)))
(var GROUP_SIZE 3)
(assert
(= 2518
(apply +
(for group (groups (Util.readLines (input 3)) GROUP_SIZE)
(let [&mut freqMap (emptyGroupPossessionMap)
&mut badge ""]
(doFor [idx :String elf] (enumerate group)
(doFor char (elf.split "")
(dictSet (dictGet freqMap char) idx true)
(when (= GROUP_SIZE (count (dictGet freqMap char)))
(set badge char)
(break))))
(dictGet itemPriorities badge))))))

View File

@@ -0,0 +1,15 @@
(defMacro intOverlapCheck [name &body cases]
`(function ,name [line]
(let [[min1 inner max2] (line.split "-")
[max1 min2] (inner.split ",")]
(or
,@(for _case cases
`(apply <= (.map ,_case Std.parseInt)))))))
(intOverlapCheck oneIsSubset [min1 min2 max2 max1] [min2 min1 max1 max2])
(assert (= 441 .length (filter (Util.readLines (input 4)) oneIsSubset)))
(intOverlapCheck hasOverlap [min1 min2 max1] [min1 max2 max1] [min2 min1 max2] [min2 max1 max2])
(assert (= 861 .length (filter (Util.readLines (input 4)) hasOverlap)))

View File

@@ -0,0 +1,31 @@
(let [[manifest commands] (Util.readParagraphLines (input 5))
:Map<String,kiss.List<String>> stacks (new Map)]
(case manifest
([::...stackLines labelsLine]
(let [rows (reverse (collect (range stackLines.length)))
labels (filter (enumerate (labelsLine.split "")) ->idxPair (let [[idx :String c] idxPair] (< 0 .length (c.trim))))]
(doFor [idx label] labels
(dictSet stacks label [])
(doFor row rows
(whenLet [crate (.trim (.charAt (nth stackLines row) idx))]
(.push (dictGet stacks label) crate))))
// Within this block, stacks contains the parsed model of the manifest,
// and commands contains the instructions for moving the crates around
(withFunctions
[
(simulateCommands [:Map<String,kiss.List<String>> stacks :Bool part1]
(doFor command commands
(case (command.split " ")
(["move" count "from" from "to" to]
(let [count (Std.parseInt count)
fromList (.copy (dictGet stacks from))
toList (dictGet stacks to)
toMove (fromList.splice -count count)]
(dictSet stacks from fromList)
(dictSet stacks to (toList.concat (if part1 (reverse toMove) toMove)))))
(never otherwise)))
(.join (for label (sort (collect (stacks.keys))) (last (dictGet stacks label))) ""))
]
(assert (= "TWSGQHNHL" (simulateCommands (stacks.copy) true)))
(assert (= "JNRSCDWPP" (simulateCommands (stacks.copy) false))))))
(never otherwise)))

View File

@@ -0,0 +1,17 @@
(function nextMarkerEnd [:String buffer :Int start :Int markerLength]
(let [:Map<Int,Int> lastNCharMap (new Map)]
(doFor idx (range start buffer.length)
// Decrement and remove the letters that are no longer within the window of the last 4
(doFor =>letter counter lastNCharMap
(let [nextCounter (- counter 1)]
(if (= 0 nextCounter)
(lastNCharMap.remove letter)
(dictSet lastNCharMap letter nextCounter))))
(dictSet lastNCharMap (buffer.fastCodeAt idx) markerLength)
(when (= markerLength (count lastNCharMap))
(return (+ 1 idx)))))
null)
(assert (= 5 (nextMarkerEnd "bvwbjplbgvbhsrlpgdmjqwftvncz" 0 4)))
(assert (= 1566 (nextMarkerEnd (first (Util.readLines (input 6))) 0 4)))
(assert (= 2265 (nextMarkerEnd (first (Util.readLines (input 6))) 0 14)))

View File

@@ -0,0 +1,60 @@
(import year2022.FileSystem)
(function :FileSystem reconstructFileSystem [file]
(let [:FileSystem rootFs (Folder [=>"/" (Folder (new Map))])
&mut :FileSystem currFs rootFs
terminalLines (Util.readLines file)]
(doFor line terminalLines
(case (line.split " ")
(["\$" "ls"] null)
(["dir" dir] null)
(["\$" "cd" dir]
(case currFs
((Folder contents)
(if (contents.exists dir)
(set currFs (dictGet contents dir))
(let [newFolder (Folder [=>".." currFs])]
(dictSet contents dir newFolder)
(set currFs newFolder))))
(never otherwise)))
([size file]
(case currFs
((Folder contents)
(dictSet contents file (File (Std.parseInt size))))
(never otherwise)))
(never otherwise)))
rootFs))
(var &mut :Float sumUnder100000)
(function :SizeStats sizeStats [:FileSystem fs &opt :Array<String> path :SizeStats stats]
(unless path
(set path [])
(set sumUnder100000 0))
(unless stats (set stats (new Map)))
(when !(stats.exists (path.join "/"))
(dictSet stats (path.join "/")
(case fs
((Folder contents)
(let [size
(apply +
(for =>innerPath innerFs contents
(ifLet [".." innerPath]
0
(let [fullPath (path.concat [innerPath])]
(sizeStats innerFs fullPath stats)
(dictGet stats (fullPath.join "/"))))))]
(when (>= 100000 size) (+= sumUnder100000 size))
size))
((File size)
size)
(never otherwise))))
stats)
(let [fs (reconstructFileSystem (input 7))
stats (sizeStats fs)
sizeAvailable (- 70000000 (dictGet stats "/"))
minSizeToDelete (- 30000000 sizeAvailable)]
(assert (= 1449447 sumUnder100000))
(assert (= 8679207 (apply min (for =>path size stats
(if (>= size minSizeToDelete)
size
(continue)))))))

View File

@@ -0,0 +1,50 @@
(function visibleTrees [file]
(let [lines (Util.readLines file)
:Array<Array<Bool>> visibleTrees
(for x (range .length (first lines))
(for y (range lines.length) false))]
(withFunctions
[
(:Array<Array<Array<Int>>> horizontalViews [perspectiveRight]
(for [y :String line] (enumerate lines)
(let [&mut maxHeight -1
xList (collect (range line.length))
xInOrder (if perspectiveRight (reverse xList) xList)]
(for x xInOrder
(case (Std.parseInt (line.charAt x))
((when (= maxHeight 9) obscuredHeight)
(break))
((when (>= maxHeight obscuredHeight) obscuredHeight)
(continue))
(height
(set maxHeight height)
[x y height])
(never otherwise))))))
(:Array<Array<Array<Int>>> verticalViews [perspectiveBottom]
(let [&mut maxHeight -1
yList (collect (range lines.length))
yInOrder (if perspectiveBottom (reverse yList) yList)]
(for x (range .length (first lines))
(set maxHeight -1)
(for y yInOrder
(when (= maxHeight 9)
(break))
(let [height (Std.parseInt (.charAt (nth lines y) x))]
(when (>= maxHeight height)
(continue))
(set maxHeight height)
[x y height])))))
]
(let [views
(concat
(horizontalViews false)
(horizontalViews true)
(verticalViews false)
(verticalViews true))]
(doFor :Array<Array<Int>> view views
(doFor [x y height] view
(setNth visibleTrees x y true))))
(count (flatten visibleTrees) ->visible visible))))
(assertEquals 21 (visibleTrees "src/year2022/inputs/day8example.txt"))
(assertEquals 1672 (visibleTrees (input 8)))

View File

@@ -0,0 +1,8 @@
package year2022;
typedef SizeStats = Map<String,Int>;
enum FileSystem {
File(size:Int);
Folder(contents:Map<String,FileSystem>);
}

View File

@@ -0,0 +1,3 @@
package year2022;
typedef Food = Array<Int>;

Some files were not shown because too many files have changed in this diff Show More