From 9363656ca0574b7d47e10feab61eb624fbfba898 Mon Sep 17 00:00:00 2001 From: Natsu Kagami Date: Wed, 13 Dec 2023 15:25:46 +0100 Subject: [PATCH] Add day 13 --- Common.scala | 5 + Day13.scala | 54 ++ Day5.scala | 6 - inputs/day13.input | 1387 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1446 insertions(+), 6 deletions(-) create mode 100644 Day13.scala create mode 100644 inputs/day13.input diff --git a/Common.scala b/Common.scala index 5df8fa0..c5f3475 100644 --- a/Common.scala +++ b/Common.scala @@ -24,3 +24,8 @@ extension [T](ss: Seq[T]) f(head) match case None => tail.findMap(f) case v @ Some(_) => v + + def splitBy(cond: T => Boolean): Seq[Seq[T]] = + val splitPos = ss.indexWhere(cond) + if splitPos == -1 then Seq(ss) + else ss.take(splitPos) +: ss.drop(splitPos + 1).splitBy(cond) diff --git a/Day13.scala b/Day13.scala new file mode 100644 index 0000000..716fd91 --- /dev/null +++ b/Day13.scala @@ -0,0 +1,54 @@ +package aoc.day13 + +import aoc._ + +type Board = List[Seq[Char]] + +val boards: Seq[Board] = + lines.toSeq + .splitBy(_ == "") + .map(_.map(_.toSeq).toList) + +extension [T](ss: List[T]) + def splits = + def loop(prefix: List[T], cur: List[T]): Seq[(List[T], List[T])] = cur match + case head :: next => + (prefix, cur) +: loop(head +: prefix, next) + case Nil => Seq((prefix, cur)) + loop(List.empty, ss) + +def reflections(ok: (Board, Board, Int) => Boolean)(board: Board): Seq[Int] = + board.toList.splits.zipWithIndex + .filter { + case ((Nil, _) | (_, Nil), _) => false + case ((top, bottom), _) => + val smudges = top.lazyZip(bottom).map(_.lazyZip(_).count(_ != _)).sum + ok(top, bottom, smudges) + } + .map(_._2) + +inline def boardReflections(ok: (Board, Board, Int) => Boolean)(board: Board) = + val rowReflections = reflections(ok)(board) + val colReflections = reflections(ok)(board.transpose) + // println(s"$rowReflections $colReflections") + (rowReflections.sum * 100L + colReflections.sum) + +// part 1 + +def part1 = + val res = boards + .map(boardReflections((_, _, s) => s == 0)(_)) + .sum + println(res) + +// part 2 + +def part2 = + val res = boards + .map(boardReflections((_, _, s) => s == 1)(_)) + .sum + println(res) + +@main def Day13(part: Int) = part match + case 1 => part1 + case 2 => part2 diff --git a/Day5.scala b/Day5.scala index 4d1ba43..b9705cc 100644 --- a/Day5.scala +++ b/Day5.scala @@ -76,12 +76,6 @@ end Parser val seeds = Parser.parse(Parser.seeds, lines.next()).get -extension [T](xs: Seq[T]) - def splitBy(cond: T => Boolean): Seq[Seq[T]] = - val splitPos = xs.indexWhere(cond) - if splitPos == -1 then Seq(xs) - else xs.take(splitPos) +: xs.drop(splitPos + 1).splitBy(cond) - val maps = lines.toSeq.tail /* remove first empty line */ .splitBy(_ == "") .map { case title :: entries => diff --git a/inputs/day13.input b/inputs/day13.input new file mode 100644 index 0000000..47d48d9 --- /dev/null +++ b/inputs/day13.input @@ -0,0 +1,1387 @@ +##.#.## +#.##... +.###### +##....# +#.##.#. +.#.#### +.#.#### +#.##.#. +##....# +.###### +#.##..# +##.#.## +..###.. +..###.. +##.#.## +#.##..# +.###### + +###.... +##..### +.####.. +.#..... +####.## +.....## +#..#### +.#...## +#...### +.###... +.#..### +####.## +....### +....### +###..## + +...##.##.##.... +.##.######.##.. +.##.#....#.##.. +###.######.#### +#.##......##.## +..###.##.###... +#####....###### +####..##..##### +.###.#....###.. +#####....###### +..#........#... + +####....##. +##.#....##. +#..#.###.## +.###...#.## +..###..#.#. +#.#..#.#.#. +.##..###### +###..#....# +##.###..### +..##.#.##.. +.#.##.#.#.# +.##.##.#.#. +.##.##.#.#. +.#.##.#.#.# +..##.#.##.. + +##...###..#.### +##...###..#.##. +##...###..#.##. +##...###..#.### +...###..###..#. +#.###.##....#.# +.#.#.#...#.#..# + +###.#.##.#.## +..##.####.##. +##...#..#...# +.....#..#.... +####.####.#.# +..#.#.##.#.#. +#####....#### +..####..####. +..##########. +##..##..##..# +...#......#.. +...#.####.#.. +######..##### +###.######.## +##..##..##..# + +#.##.#... +..##...## +##..##.## +##..##... +..###.#.. +#.##.#... +#.##.#.## +#.##.#... +#.##.#... +..##..#.. +#.##.##.. +######.## +#....#### +.......## +######.## +.####..## +#.##.#### + +.####....#..##.## +..########..####. +.#..##..#..####.. +#.#..#..###...### +..#...##.#..#.##. +###.#.##.###..##. +....###.#..####.# +....###.#..####.# +###.#.##.###..##. +..#...##.#..#.##. +#.#..#..###...### +.#..##..#..####.. +..########..#.##. +.####....#..##.## +.####....#..##.## + +...#..#...#.#.# +...#..##...#..# +####.###.#...## +..#..##.#.#.... +##.#.#...#.#.#. +.....###..#.#.. +..#.#.#.....##. +..#.#.#.....##. +.....###..#.#.. +##.#.#...#.#.#. +..#..##.#.#.... +####.#.#.#...## +...#..##...#..# +...#..#...#.#.# +######.....#### + +.####.# +##..##. +###.### +......# +......# +#....## +#....## + +...##...##.#.#. +...##...##.#.#. +##....##.#.#.#. +#..##......#.## +...##...####### +########....#.# +.##..##......## +#......#..#...# +#..##..##.#.### + +.##.###...# +.##.###..## +.##.##.###. +#..##..##.. +#..#..#.#.. +#..#..##### +....##.#### +....#..#### +####....... +#..#.##.#.. +#####.##.## + +..#.#.#.##....#.. +.#...###.##.#..#. +.#...###.##.#..#. +..#.#.#.##....#.. +##..#.#..#..#.#.# +.#.#..#.#.##..... +.......###....... +####..#...#.##.## +.#.#.#........... +.#...#........... +####..#...#.##.## + +##..###.#.... +#....###....# +..##....#.... +.####...##..# +.#..#.#.#..#. +.####...#...# +#.##.#.#...## +..##.....##.. +########..#.# +#....######## +.####....##.. +#.##.#..####. +#.##.#.#####. + +#.#..##.### +#.#..###... +.#.#.##.#.. +.####...### +####..##... +...##...#.. +##.#.###... +#..##..##.. +#..#.##..## +.######.### +..#####.### + +#.#.####.#.#.###. +#.#.####.#.#.###. +#.###..###.##.##. +#.#.####.#.##..#. +############.##.# +.#.######.#.#.... +...#....#...#.### +#..##..##..#..#.. +.##......##..###. +...##..##...##..# +..#..##..#...###. +.....##......#### +..###..#.#..###.# +#.#.#..#.#.#.##.. +.###....###..#.## +##.#.##.#.###..## +.#........#..#.## + +#..####..#### +###.##.###### +####..####### +#...##...#..# +###....###..# +#........#..# +###.##.###..# +..#....#..... +............# +#..####..#..# +.##....##.... +##.#..#.##### +###.##.###### +....##....... +###....###### +##......##..# +...#..#...... + +.###.#..##..##..# +#..#######..##### +.#.##.##.#..#.##. +..........##..... +..........##..... +##...###.####.### +#.#.##..######..# +##.#######..##### +#.....##..##..##. +#....############ +.#.#.#..######..# +#.##.####.##.#### +###.#####.##.#### +.#..#.##.####.##. +#..##.##.#..#.##. +.#####..#....#..# +#.##.#..######..# + +####.##.##.##.# +..#............ +#####..####..## +.###....##....# +..###..####..## +#...#..#..#..#. +.#...##....##.. +.#.#.##.##.##.# +#.............. +#..#....##....# +....#..#..#..#. +.#.############ +.############## +....##########. +...#.##.##.##.# + +...........#... +.#.##.#..#..### +########..##### +..........#.### +#......#...#.## +#.####.####..## +.#....#......## +.#....#.#.#.### +...##.......#.. +#.####.##....## +#......##.#.... +###..#####..#.. +#........##.#.. + +##########.#.##.# +#.##.#...##..#..# +##..###.#..###.#. +##..###.#..###.#. +#.##.#...##..#..# +##########.#.##.# +########.....##.. +#.##.##.##....##. +........##..#...# +#....#.##..#...#. +#.######...##.#.. + +....#.. +#..###. +..###.# +..##..# +#..###. +....#.. +####... +...##.. +..#.### +##...#. +#.#..#. +#.#..#. +##...#. + +.###.##.###.#.. +.....##.....### +##.######.##... +#..######..##.. +#.#.#..#.#.##.. +.##......##..## +...######....## +.##.#..#.##.### +.##.#.##.##..## +###......###### +#....##....#### +....#..#....... +..#......#..#.. + +#..#######. +#..######## +.#.#..##.## +.#.##...#.# +.#.##...#.# +.#.#..##.## +#..######## +#..#######. +..#.##.##.. + +.##....##.###.# +..##..##....#.. +..##..##....... +.##....##.###.# +##......###.### +#.#....#.##.##. +#.#....#.#.#.## +#.######.##.... +..#.##.#..#.##. +...####...#.##. +.#.####.#..#..# +###....###.##.. +##..##..##.##.. + +####.##..#### +####.##..#### +..#.#######.# +.#.##.#.##... +.###...##.#.. +.##.###.####. +.##..#.#....# +.##..#.#....# +.##.###.####. +.###...##.#.. +.#.##.#..#... +..#.#######.# +####.##..#### + +####..#.##....# +####..#.##..... +#..##.###.##.## +......#...##.#. +....#.##.##.... +####.#.#.##.#.. +#..#..#####..## +............#.# +#..#..##.#...#. + +####.##.####..# +.##..##..##..#. +#..#....#..#... +.##......##...# +.####..####.... +.....##.....#.# +#..#....#..#... +####.##.####### +....####....#.# + +##..#.....###..#. +....#.##.##...### +#..####.##...#.## +##.##..###...#.#. +##.#.####.##..... +#.####.###.#.##.. +##.#..###.#..##.. +###.#.#.#.#.#.#.. +###.#.#.#...#.#.. +....#..#.#.#..##. +..#.#.###.#.#..#. +..#.#.###.#.#..#. +....#..#.#.#..##. +###.#.#.#...#.#.. +###.#.#.#.#.#.#.. + +.#.##..##.#.. +.##########.. +..##.##.##... +#...#..#..... +...##..##.... +.#.######.#.. +#...#..#...## +#.#......#.## +.###.##.###.. +.#.#.##.#.#.. +#..######..## +#.#..##..#.## +.#.######.#.. +#....##....## +.#..#..#..#.. +#.#.#..#.#.## +.##########.. + +....###.....####. +##.####..#.#..#.# +####.##..#.##...# +...#....#...##..# +...#...#....##..# +####.#.#..##.#### +....#.###.#...... +##.##...####...## +##.##...####...## +....#.###.#...... +####.#.#..##.###. +...#...#....##..# +...#....#...##..# + +..#.##..# +..#.##..# +#######.. +#..#.##.. +#.#....## +#..#...#. +###.#.#.. +#.#.#..## +#.#.#..## +###.#.#.. +#..#...#. +#.#....## +#..#.##.. +#######.. +..#.##.## + +....#.##.#### +#.##.#...#... +..####..#..## +##...#...#.## +#.####..##.## +###..######.. +.##..######.. + +#..####.#.# +#..####.#.# +#...#.#.#.# +.##.#.##..# +#..##..#### +##..##.##.. +####..##.#. +#.##..##.#. +##..##.##.. + +##.#..#.###.#.. +##..#.######.#. +###..#.##.#.... +##.####.#.####. +..#.####.#.#..# +...#.#.##.###.. +###....#.#.#..# +..#.###.##..##. +...#.###.###... +############.#. +###########..#. + +.##.... +.#.#... +#..#### +#..#### +.#.#... +.##.... +...#..# + +.#.##.#..##..#. +..####....#..## +#......#....#.# +.######.#..#.## +.........#####. +..####..#...... +..####..#...... +.........#####. +.######.#..#.## +#......#....#.# +..####....#..## +.#.##.#..##..#. +.#.#..#.##..#.. +.#.##.#...####. +.#.##.#.#...#.. + +...#.#..# +##..#.... +###...... +###...... +##..#.... +...#.#..# +#...##..# +..##....# +..#.##..# +#.....##. +#....#### + +...###..### +#..##..#### +##.##.....# +..#..###..# +.#.##.###.. +#...###.### +....#.#.##. +#...#...... +#...#...... +....#.#.##. +#...###.### +.#.##.###.. +..#..###..# +##.##.....# +#..##..#### +...###..### +....##..### + +..##.#.#..#..#.## +..#.#..##.#.###.. +..#.#..##.#.###.. +..##.#.#..#..#.## +#..##.##..#.##.## +.#####.#..###...# +...#.....##.####. +..#....#..##..#.. +.#..##.#..###.##. +....#.####.####.# +...#.###..#..#..# +.##.#.#..###...## +..#.#.#..###...## + +.###.###... +##..#...##. +.##.#.....# +...#...#... +##.#...#.#. +##.#...#.#. +...#...#... +.##.#...#.# +##..#...##. +.###.###... +#.##.##.##. +#.##.##.##. +.###.###... + +.#.##...... +.#.##...... +..##.##..## +....##.##.# +...###.##.# +##.##..##.. +.##.##....# +##.#..#..#. +.#..#.....# + +#..#.##..#..#.. +#..#....#..##.. +.##.#.#####.##. +####.#.##...... +.##.##..##..... +#..#.###.###... +.##.........#.. +#####..#.#..... +.##.#.#........ +.....#..#....## +####.###..###.. +#..#.##..#.##.. +.##.###...##### + +#..#.#.##..#..# +.##.#.###.....# +.##.#..##.#...# +########.#..##. +####.#.#####.## +....##...#.##.. +....#.##.###.#. +..........#.#.. +..........#.#.. +....#.##.##..#. +....##...#.##.. + +..#####.####...#. +......#.#.###.##. +.##.#...#..#..### +.##.#...#..#..### +......#.#.###.##. +..#####.####...#. +#.####....#.#..#. +####.##..#.###.#. +..#..##.#..###..# +##....###.##.#.## +.##....###.##..#. +.##....###.##..#. +##....###.##.#.#. + +..#.####.##...... +....####.##...... +.#.###.###.#....# +#.###..########## +....###.##.###### +#......#.#.###### +##...#..#..#.##.# + +....#...##..#.#.. +#..#....#....#..# +.#..##..#..#.#... +..#.#..#..#.##.## +.##...##.##..##.. +.##...##.##..##.. +..#.#..#..#.##.## +.#..##..#..#.#... +#..#....#....#..# +....#...##..#.#.. +....##...#....### +.#..#.#.#..##..## +#...##..###....## +#...##..###....## +.#..#.#....##..## + +..#..#.#..##.#..# +#.#.###..##.#.##. +..##..####..##### +.#.##..#...#.#### +###.#.#..##.##### +###.#...#.###.##. +###.#.###..#..##. +#..#....#.##..#.. +..###....#..##..# +#.#####.##.#.#### +#.##.#...#..##..# +##.....###...#..# +#...##....#...##. +.###.#..#.####### +.###.#..#.####### + +.##.#.. +###.... +#.#.... +...#..# +#..#### +###.... +###.... +#..#### +...#..# + +##.....#..#.. +....##.####.# +....#.#.##.#. +.#.#.#......# +#....##....## +##..##.#..#.# +#.#.#..###... +####.##.##.## +####.##.##.## + +......###.... +...##.####.## +..#..######.. +##..##....##. +###.#.#..#.#. +......#..#... +###..##..##.. +##.##......## +.....######.. +..####.##.### +.......##.... +...#.#....#.# +..###......## +###.##....##. +##..#.####.#. +###.#..##..#. +...##.#..#.## + +..#.##.#....# +..######....# +#..#..#..##.. +....##....... +#..####..##.. +..#....#....# +##.####.####. +#.#.##.#.##.# +#..#..#...... +#.#....#.##.# +#..####..##.. +##......####. +.##....##..## + +#...#.# +#...#.# +####.#. +..##..# +.###### +....#.. +.##..#. +....#.. +....#.. +.##..## +....#.. +.###### +..##..# +####.#. +#...#.# + +..##...#..##...## +.......#.#.##.#.# +......#..###.#.#. +......#####.#..## +##..##.#####..### +##..###.#.###.#.# +.......#.#.##..## +..##...#.#.#.##.# +##..##..#..##.#.# +##..####.##.#.### +##..###.#.#.##..# +.......#..#.##.#. +..##...##.#.#.### +##..##.######.#.. +.#..#.##.##..##.. +..##......##.#.## +..##..#..#.....#. + +.#....####. +..#.#.####. +.#####....# +##...###### +##.....##.. +.#..#..##.. +..##.#....# +#...###..## +#...###..## +..##.#....# +##..#..##.. +##.....##.. +##...###### + +.##.##..# +##...#### +#...#..## +##....#.. +....#..## +...#.#### +...#.#### +....#..## +##....#.. + +#.##..##.##..#.#. +#........##.#.... +###....######..## +...####...#..###. +##......##....#.. +..#.##.#...##.### +#........#.####.. +#.#....#.#.#..##. +#.#....#.#.#..##. +#........#.####.. +..#.##.#....#.### + +......#..#.##..## +......#..#.##..## +#.#.##.....###.## +#..###....##.#..# +..#.##..###....#. +.#.#.#..##....##. +#.#....#.##...#.# +.##..###.#.#.##.# +.##..###.#.#.##.# +#.#....#.##...#.# +.#.#.#..##....##. +..#.##.####....#. +#..###....##.#..# +#.#.##.....###.## +......#..#.##..## + +.#.###....###.### +....##.#.###....# +##....#.#.#.##... +##....#.#.#.##... +....##.#.###....# +.#.###....###.### +..#..#.#...##.#.. +.#.#..#...####.## +#..#...#.###...## +.##.#.#.#..#..#.# +.##.#.#.#..#..#.# +#..#...#.###...## +...#..#...####.## +..#..#.#...##.#.. +.#.###....###.### +....##.#.###....# +##....#.#.#.##... + +##..##..####. +.#..#.#.####. +.####.#.#..#. +###.###.#..#. +##..##...##.. +######..####. +......#.#..#. +.#..#........ +##..##.###### +######.##..## +.####..#....# + +##...#..#...# +###.##..##.## +##..#####...# +..#........#. +..#.#.##.#.#. +##.#.####.#.# +......##..... +..#.##..##.#. +##.#.####.#.# +..###.##.###. +###...##...## +..#..#..#..#. +..#.#....#.#. +######..##### +.....#..#.... +..#.#.##.#.#. +##...####...# + +.##.##..#....#..# +.....####.##.#### +.#...###......### +.#............... +.#...############ +#.#......####.... +.#.###..#....#..# +.#.#.#..#....#..# +#...#.##......##. +#.#.#.##.#..#.##. +..#...##..##..##. + +.##...#.# +####...#. +#..#..#.. +######.## +.....#.#. +....#..## +#..###### +.#..##... +....##... +.....###. +.##...### +.##.#.### +.##.#.### + +.#.##.######.## +.#.##.######.## +#..##.#.##.#.## +##..#.######.#. +.###..#....#..# +...#.#.######.# +..##.#.####.#.# + +.##...##... +.##.#..#... +#....#.##.. +.###..#.### +....#...... +#.#.#...### +..####.#... +..####.#... +#.#.#...### +....#...... +.###..#.### +#....#.##.. +.##.#..#... +.#....##... +.##.#..##.. + +#.#.#..#.#.###..# +#####..########## +.#.#.##.#.#.##### +.#.#.##.#.#.##..# +###.#..#.######## +.##..##..##.#.... +###.####.######## +.######.###..#..# +...#.##.#....#### +#...#..#...###..# +###......###..##. +###.#..#.####.... +..###..###..##..# +####....####..##. +#.##....##.###..# + +.#...#....#...#.# +#.###......###.## +..#.##....##.#..# +..#.##....##.#..# +...#.##..##.#.... +####.#....#.##### +###.#..##..#.#### +..##...##...##..# +##..########..### +##..########..### +..##...##...##... +###.#..##..#.#### +####.#....#.##### + +..#.####.##.### +###..#.#....#.# +###..#.#....#.# +..#.####.##.### +##....##.##.##. +#.#.#.##.##.##. +##....#.####.#. +##......#..#..# +##..##.#....#.# +#..#...######.. +###.#####..#### + +#......##.#.#..#. +#......#..#..##.. +#......#..#.#..#. +#..##.###...#..#. +#......#.###.##.# +...##...####....# +.#.##.#.##..#..#. +..#..#..#....##.. +...##....######## +...##....#.#.##.# +###..#####.#.##.# + +..#..####.... +..####.#.#... +...##..#.#.#. +..#.#####...# +..#..###..#.# +....###...#.# +....###..##.# +..#..###..#.# +..#.#####...# +...##..#.#.#. +..####.#.#... +..#..####.... +..#.#.#.##... +###.....###.. +##.###...#..# + +#.....#.#..#..#.. +...#..#.##...#..# +.####.#.###..#.## +.####.#.###..#.## +...#..#.##...#..# +#.....#.#..#..#.. +.##......#.#...#. +..#.#.##.....#... +.#...#.####.#..#. +.####.#.######.## +#..#.#...##...#.# +#..#.#...##...#.# +.####.#.######.## +.#...#.####.#..#. +..#.#.##.....#... +.##......#.#...#. +#.....#.#..##.#.. + +..#.#.# +..#.#.# +....##. +.##..#. +#..#.#. +....#.# +....#.. +.....#. +....##. + +.........#. +.#....#.... +##....##.#. +#......##.# +.######...# +#.......### +.######..## +#..##..###. +#.#..#.#... +#.#..#.#... +#..##..###. + +###..#.###. +##.##...#.. +.#.#..###.. +.#.###.#### +.#.###.#### +.#.#..###.. +##.##...#.. +###..#..##. +.####.#..#. +.##...###.. +#...#.#.#.# +#...#.#.#.# +.##...###.. + +.#.#.#..... +...###..... +....#.##### +##..#...... +.###..##### +##.....#### +.###.#.#### +.#.#..#.... +.######.... +....##.#### +..##.#..... +#.###.##### +.##..##.... +.#..##..##. +#.#...#.... + +..#.##.#..# +#.#....#.## +#.##..##.#. +#.##..##.#. +#.#....#.## +..#.##.#..# +..#....#... +..#######.# +.#.#..#.#.# + +####..####..# +..##..#####.# +##..##....##. +..##..####..# +....#.#..#.#. +...#.######.# +...#..#..#..# + +.###.####.### +.....####.... +.###..##..### +...#......#.. +.####.##.#### +###..#..#..## +....#....#... +.###..##..### +#...######... +#...#.##.#... +..##.#..#.##. +...#.####.#.. +.##.######.## +...#.####.#.. +#....#..#.... +.###.####.### +#...######... + +###.####.#..#.. +..##...##.#.#.# +##.#..###.##.## +..#.##.##.###.# +..###..###.##.# +......##..##.## +#####..#.##..#. +#####...#...... +###....#.###.#. +.....#.##.##### +##..#.#.##...#. +........####.#. +........####.#. +##..#...##...#. +.....#.##.##### + +..........####. +...##....#....# +.........##..## +#......##.####. +#...#..##..##.. +.#....#...####. +........####### +#.####.###....# +##.##.###.####. +#......#.#....# +#......#.#.##.# + +#######.##....# +##.#.########## +##..##.#..#..#. +###....#.#.##.# +######.#..#..#. +..###.##.##..## +##.##.#..#....# +##.#.##........ +#..#..##.#....# +#.###..#..#..#. +#.#.#.###.####. +#.#.#####.####. +#.###..#..#..#. + +##.###...#.##..#. +#.#....##.###.#.. +.#.....#.###..#.. +.#.....#.###..#.. +#.#....##.###.##. +##.###...#.##..#. +..#.###...#..#.## +#.#.#.##.######.. +#.#.#.##.######.. +..#.###...#..#.## +##.###...#.##..#. +#.#....##.###.##. +.#.....#.###..#.. + +#.#.##..##.#.##.. +##.#.####.#.##.## +.####....####.### +.#.###..###.#..## +.#.#......#.#..## +..#.#.##.#.#..... +.#...#..#...#.#.. +.#######.####.### +#..#.#..#.#..#### +.##.##..##.##.... +..#........#..### +#..##....##..#### +#.#..#..#..#.#... +..##.####.##..... +#####....#####... +##.########.##... +#.##......##.#### + +......###..## +#####.######. +.##...##.#.#. +########.##.. +....#..#..... +.......###.#. +.##.##.###.#. +#..####..##.# +#..####..##.# +.##.##.###.#. +.......###.#. +....#..#..... +########.##.. +.##...##...#. +#####.######. +......###..## +#########.... + +####...#### +.###.#..... +.###.#..... +####...#### +.####.##..# +.#..####### +#####...#.# +#.####.##.. +#.#...#.##. +#.#####.... +...###.#.## +#.#.#.#...# +##.#####.## +#...##.#### +#...#..#### + +#..#..####..# +#######..#### +.##..######.. +#...#..##..#. +####.##..##.# +...###.##.### +##..##.##.##. +.#...##..##.. +#.....####... +###...####... +.....#....#.. +....########. +#.#.#..##..#. +#....#....#.. +#.#..#....#.. + +.###.####.. +.########.. +.###..###.# +##########. +.###..###.. +.###..###.. +##########. +.###..###.# +.########.. +.###.####.. +#...##...## + +#.#.###.# +#.#.###.# +###.#.### +...###... +..#..##.# +..#...#.# +#.#...#.# +..#..##.# +...###... + +..##.#... +..##.#... +...##...# +..#..##.. +.#.##.#.. +#...##... +##..####. +#.###.#.. +#.###.#.. +#...####. +#...##... +.#.##.#.. +..#..##.. +...##...# +..##.#... + +###..##...#.##### +.#.##.#..#.#..... +#.#####.#.####.## +.#.#..#.#.###.### +##.##.##....#...# +##.##.##....#...# +.#.#..#.#.###.### +#.#####.#.####### +.#.##.#..#.#..... +###..##...#.##### +...#......#.##..# +..#.##....#...### +......###..#..... +..#.##.#.#.....#. +..#.##.#.#.....#. + +###.###.# +###.#.... +##.#.###. +###.##.## +..#..#..# +######..# +##.###..# + +.....#.######## +..#.###..##.#.# +##..#...##..##. +##....#.#.#.#.. +#####.####...## +#...#.#.#.##.## +#...#.#.#.##.## +#####.####...## +##....#.#.#.#.. +##..#...##..##. +..#.#.#..##.#.# +.....#.######## +.#....##...#### +##.###..#..##.# +##.###..#..##.# + +#########.#..#### +...##...#..#.#.#. +##....##......#.. +.........##..###. +#..##..###.#.##.. +#..##..#.#.#.##.. +.........##..###. +##....##......#.. +...##...#..#.#.#. +#########.#..#### +..####..#.####### + +...####...##. +.##....##.... +.########.##. +##.#..#.##### +####..####### +####..#.##..# +..#.##.#..... +##..##..##..# +#.##..##.#..# +##..##..##..# +#.######.#..# +.###..###.... +#..#..#..#..# +....##....##. +#.######.#..# + +.#.#... +#...... +.#..#.# +..#..#. +..###.. +#.##### +#...### +#...### +#.##### +..###.. +..#.... +.#..#.# +#...... +.#.#... +#.#..#. +#.#..#. +.#.#... + +####..##.....#. +....###.###.... +#######.##.#... +.##..#..###.### +.##.##..####..# +.##.#..####.### +####.#..##.##.. +.##.####.#.#.#. +....#.##.##..## +....#.##.##..## +.##.####.#.#.#. +####.#..#####.. +.##.#..####.### + +..####..... +##....####. +..#..#....# +#.####.##.. +#.####.##.. +#.####.#.## +.#....#...# +#......#.## +#.####.##.. +..####..##. +..#..#..#.# +.#.##.#.##. +.#.##.#.##. +..#..#..### +..####..##. + +#......##.. +.#.##.#..## +.#....#..## +.#....#.#.. +####.###.## +.######.... +###..###### +..####..#.. +..#..#..#.. +##....##... +##....##... +########.## +##....##... + +##..###.####. +..##..#.#..#. +#########.#.. +######.##..#. +######.....#. +######..#..#. +..##......#.# +##..####...#. +##########.#. +##..##.####.. +..##...###... +......##.#.## +......###.### +#######.##### +######...#.## +#.##.###.##.. +..##..###.#.. + +#..#.##.### +.##..##.#.# +.....#..#.# +#..##....#. +....#####.. +.##.#...... +....#..#... +.##.##....# +#..##.###.# +.......#.## +....#..#.## +#..##.###.# +.##.##....#