day11 part 1
This commit is contained in:
parent
c6e23b9dac
commit
621fcf2b23
|
@ -0,0 +1,34 @@
|
||||||
|
import Data.Function
|
||||||
|
import Data.Ix
|
||||||
|
import Control.Lens
|
||||||
|
import Data.List
|
||||||
|
import Data.Ord
|
||||||
|
import Linear.V2
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = interact $ show . day11 . parse . lines
|
||||||
|
|
||||||
|
day11 :: [V2 Int] -> Int
|
||||||
|
day11 = (`div` 2) . sum . f . (expand =<< findEmptyRows)
|
||||||
|
where f xs = [sum $ abs $ x-y | x<- xs, y<- xs]
|
||||||
|
|
||||||
|
parse :: [String] -> [V2 Int]
|
||||||
|
parse = map fst . filter ((=='#') . snd) . concat . zipWith (map . f) [0..] . map (zip [0..])
|
||||||
|
where f x (y,z) = (V2 y x, z)
|
||||||
|
|
||||||
|
|
||||||
|
expand :: [V2 Int] -> [V2 Int] -> [V2 Int]
|
||||||
|
expand [] input = input
|
||||||
|
expand (d:ds) input = expand (map (moveCoord d) ds) (map (moveCoord d) input)
|
||||||
|
|
||||||
|
|
||||||
|
findEmptyRows :: [V2 Int] -> [V2 Int]
|
||||||
|
findEmptyRows input = map flipV2 (findEmptyRows $ map flipV2 input) ++ findEmptyRows input
|
||||||
|
where findEmptyRows = deleteFirstsBy ((==) `on` view _x) b
|
||||||
|
b = range (V2 0 0, set _y 0 maxP)
|
||||||
|
maxP = maximumBy (comparing (view _x)) input
|
||||||
|
flipV2 (V2 x y) = V2 y x
|
||||||
|
|
||||||
|
moveCoord :: V2 Int -> V2 Int -> V2 Int
|
||||||
|
moveCoord x y = if y^.p >= x ^.p then y + signum x else y
|
||||||
|
where p = if x^._x == 0 then _y else _x
|
|
@ -0,0 +1,12 @@
|
||||||
|
....#........
|
||||||
|
.........#...
|
||||||
|
#............
|
||||||
|
.............
|
||||||
|
.............
|
||||||
|
........#....
|
||||||
|
.#...........
|
||||||
|
............#
|
||||||
|
.............
|
||||||
|
.............
|
||||||
|
.........#...
|
||||||
|
#....#.......
|
|
@ -0,0 +1,140 @@
|
||||||
|
.......#..............#.......................#............#.......#........................#.....#..................................#......
|
||||||
|
.................................#.................................................#........................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
..........................................................................................................#.............#...................
|
||||||
|
...........#...............................................................#..............................................................#.
|
||||||
|
.#..........................................................................................................................................
|
||||||
|
................#.......#........................#....................#....................#.................................#..............
|
||||||
|
......................................#.....#.........................................................#.....................................
|
||||||
|
...................................................................................#..........................#......................#......
|
||||||
|
......#.....................................................................................................................................
|
||||||
|
.............#............................................#.......................................................#.........................
|
||||||
|
..................#.....................#..........#.....................................................#..............#.....#.............
|
||||||
|
.................................................................#.........#................................................................
|
||||||
|
..................................#.................................................................................................#......#
|
||||||
|
....#..........#...........#..........................#.....#................................................#..............................
|
||||||
|
................................................................................#...........................................................
|
||||||
|
.......................................#........#.......................#...........................#.......................................
|
||||||
|
.......................................................................................................................................#....
|
||||||
|
.#..............................#.......................#........#.................#..............................#.........................
|
||||||
|
......#..............#....................#............................................................#.................#..................
|
||||||
|
............#...............................................................................................................................
|
||||||
|
.....................................................................................................................#......................
|
||||||
|
.....................................................#...................................................................................#..
|
||||||
|
...............................................#...........................#.....#..........................................................
|
||||||
|
....................................#........................................................................#..............................
|
||||||
|
...........#.................#.........................................................#...........#............................#...........
|
||||||
|
.....#...............#....................................#...................................#........................................#....
|
||||||
|
..........................................................................................................#................#................
|
||||||
|
.......................................#..............#....................................................................................#
|
||||||
|
.................................#................................................#...................#.............#.......................
|
||||||
|
...#........#...............#.....................#............#.................................#.............#............................
|
||||||
|
............................................................................................................................................
|
||||||
|
.............................................#........................#.....................................................................
|
||||||
|
..........................................................#................................................#..............................#.
|
||||||
|
...................#...................#........................................#..............................................#............
|
||||||
|
....#.....#.......................#...........................................................#.....#.......................................
|
||||||
|
........................................................................................#...................................................
|
||||||
|
..............................................#.........................................................#...................................
|
||||||
|
..........................#................................................#.............................................#..............#...
|
||||||
|
........#.....................................................#.......#..........................................................#..........
|
||||||
|
.............#.............................#..........#..............................#.....................#................................
|
||||||
|
............................................................................................................................................
|
||||||
|
.#..............................................................................#.................#.........................................
|
||||||
|
......................#...............#.....................................................................................................
|
||||||
|
...................................................................#..................................................................#.....
|
||||||
|
..........#.................................................................................#......................#........................
|
||||||
|
.................#........................#............................#....................................................................
|
||||||
|
..........................................................#................................................#............#...................
|
||||||
|
..................................................#........................#...................................................#............
|
||||||
|
..............................................................................................#..................#..........................
|
||||||
|
............................................................................................................................................
|
||||||
|
.....#...............................................................................................#......................................
|
||||||
|
....................................#.......................................................................#........#......................
|
||||||
|
...................#............................................................#..........#................................................
|
||||||
|
.............................#..........................................................................................................#...
|
||||||
|
...............#...............................#..........#......................................#.....#.....................#..............
|
||||||
|
.......#...............#.............................................................#............................................#.........
|
||||||
|
............................................................................................................................................
|
||||||
|
...................................#.......#........#........#.................................................#............................
|
||||||
|
............................................................................................................................................
|
||||||
|
..........#..................#.........................................#..............................................................#.....
|
||||||
|
................................................#..........................................#................#....................#..........
|
||||||
|
.........................................................#...........................#......................................................
|
||||||
|
#....................#...........#.................................................................#..............#......#..................
|
||||||
|
.............................................#.......#...................................................#..................................
|
||||||
|
............................#...........................................................#.....#.............................................
|
||||||
|
.......#........................................................................#...........................................................
|
||||||
|
..........................................................#...................................................#....................#........
|
||||||
|
...#...................................................................................................................#....................
|
||||||
|
...............#.................#..........................................................................................................
|
||||||
|
....................#.................#.......#..................#.........................#.............#.............................#....
|
||||||
|
........................................................#...........................#.......................................................
|
||||||
|
...........................#...............................................#................................................................
|
||||||
|
.#.......#........................................................................................#........................................#
|
||||||
|
................................#................................................................................#...............#..........
|
||||||
|
....................................................#.......................................................................................
|
||||||
|
...................................................................#.....................................#...............#............#.....
|
||||||
|
....................................#......................#.............#..........#.....#.................................................
|
||||||
|
...........#................................................................................................................................
|
||||||
|
.......................#.....................#.................................................................#............................
|
||||||
|
.............................#..............................................#........................#......................................
|
||||||
|
..................#................................................................................................#................#.......
|
||||||
|
..................................................#.........#..........#..................................................#.................
|
||||||
|
.................................#.......................................................#.................................................#
|
||||||
|
....#.......................................#.........#.......................................................................#.............
|
||||||
|
............................................................................................................................................
|
||||||
|
............................................................................................................................................
|
||||||
|
........................................................................#...................................................................
|
||||||
|
..#.............................................#................#....................................................#.....................
|
||||||
|
..............#...............#.............................................................................................................
|
||||||
|
........................#............................#..........................#........#..................................................
|
||||||
|
...................................................................................................#...........#........................#...
|
||||||
|
....#.............#..............#............................................................................................#.............
|
||||||
|
............................................................................................................................................
|
||||||
|
......................................................................................................#.....................................
|
||||||
|
.................................................................#......................#...................................................
|
||||||
|
.....................#....................#...........#.................#...................................................................
|
||||||
|
................................................................................#......................................#..........#........#
|
||||||
|
........#........................................................................................#..........................................
|
||||||
|
..................................#.........................................................#....................#..........#...............
|
||||||
|
#...........................#...........................................................................#...................................
|
||||||
|
............#................................................#.........#...............#....................................................
|
||||||
|
....#.......................................................................................................................................
|
||||||
|
..........................................#.....................................................#..............#..............#.............
|
||||||
|
............................................................................#.........................#.............#.......................
|
||||||
|
................................#.....#.....................................................................................................
|
||||||
|
...................#......#.................................#.......................#.......................#...............................
|
||||||
|
...........................................................................................#......#...............................#.........
|
||||||
|
#.............#.......................................#.....................................................................................
|
||||||
|
.............................#..............#.............................................................................................#.
|
||||||
|
......................#..................................................#............................#..............#......................
|
||||||
|
........#........#.....................#...................#......#.............#............................#............#.................
|
||||||
|
.........................................................................................#......................................#...........
|
||||||
|
..................................#..................#............................................#...............#..................#......
|
||||||
|
..........................#....................#............................................................................................
|
||||||
|
..........................................#.................................................................................................
|
||||||
|
.#...................................................................#.......................#.............#...............................#
|
||||||
|
......#.......................#................................#.....................................................#......................
|
||||||
|
............#.....#...................#............#.....#.......................#.................#........................................
|
||||||
|
..........................................................................................................................#.....#......#....
|
||||||
|
..........................................................................................#.............#...................................
|
||||||
|
...........................................#........................................#.......................................................
|
||||||
|
..#...................................................................#.....................................................................
|
||||||
|
.........#...........................................#......................................................................................
|
||||||
|
....................................#............................................................#.................................#.......#
|
||||||
|
...........................#......................................................................................#.........................
|
||||||
|
..........................................................#............................................................#....................
|
||||||
|
...#..........#........#....................................................................................................................
|
||||||
|
....................................................................................#......#.................#..................#...........
|
||||||
|
..............................................................................#.............................................................
|
||||||
|
.............................#.......#.....#...................#........#......................#.....................................#......
|
||||||
|
............................................................................................................................................
|
||||||
|
..........#.....#...................................................#.............#.....................#....................#..............
|
||||||
|
........................#.................................#.............................#...........................#.......................
|
||||||
|
........................................#...........#........................................#...........................................#..
|
||||||
|
.....#.........................................#.................#.....#............................#.......................................
|
||||||
|
...................................#........................................#........#......................................................
|
||||||
|
...........................................................................................................................#................
|
||||||
|
.#............................#..........................#...................................................#.........................#....
|
||||||
|
.........#...................................#..........................................#.........................#.........................
|
|
@ -0,0 +1,10 @@
|
||||||
|
...#......
|
||||||
|
.......#..
|
||||||
|
#.........
|
||||||
|
..........
|
||||||
|
......#...
|
||||||
|
.#........
|
||||||
|
.........#
|
||||||
|
..........
|
||||||
|
.......#..
|
||||||
|
#...#.....
|
Loading…
Reference in New Issue
Block a user