untracked 2019 stuff

This commit is contained in:
kageru 2020-12-01 08:14:33 +01:00
parent d0d2e58f87
commit 21dee28618
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
13 changed files with 396 additions and 5 deletions

104
2019/10/day10.hs Normal file
View File

@ -0,0 +1,104 @@
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE ParallelListComp #-}
import Data.Ratio
import Data.List as L
import qualified Data.Vector as V
import Data.Ord
import Data.Maybe
type Asteroid_old = (Int,Int)
data Asteroid = Asteroid Int Int deriving Show
instance Eq Asteroid where
Asteroid a b == Asteroid c d = reduce a b == reduce c d
where reduce x y
| y==0&&x==0 = (0,0)
| x==0 = (0,signum y)
| y==0 = (signum x,0)
| otherwise = (signum x * (abs $numerator z), signum y * (abs $denominator z))
where z = x%y
instance Ord Asteroid where
Asteroid a b `compare` Asteroid c d = phi a b `compare`phi c d
where phi x y
| x>=0 = acos (fromIntegral (-y)/sqrt(fromIntegral x^2+fromIntegral y^2))
| otherwise = 2*pi + acos (fromIntegral (x)/sqrt(fromIntegral x^2+fromIntegral y^2))
(+|) :: Asteroid -> Asteroid -> Asteroid
(+|) (Asteroid a b) (Asteroid c d) = Asteroid (a+c) (b+d)
(-|) :: Asteroid -> Asteroid -> Asteroid
(-|) (Asteroid a b) (Asteroid c d) = Asteroid (a-c) (b-d)
neg :: Asteroid -> Asteroid
neg (Asteroid a b) = Asteroid (-a) (-b)
dist :: Asteroid -> Int
dist (Asteroid x y) = abs x + abs y
main = do
content <- lines <$> readFile "inputtest"
print $ parse content
let aMax = fst $ maxInSight $ parse content
print aMax
let newlist = listCycle $ sort $ sortOn (dist.fromJust) $ snd $ transformCoordinates (parse content) aMax
print $ newlist !! 199
let newnewlist = snd $ transformCoordinates newlist (neg aMax)
print $ newnewlist !! 0
print $ newnewlist !! 1
print $ newnewlist !! 2
print $ newnewlist !! 50
print $ newnewlist !! 100
print $ length newnewlist
listCycle :: [Maybe Asteroid] -> [Maybe Asteroid]
listCycle [] = []
listCycle xs = nub xs ++ listCycle (xs \\ nub xs)
-- alternative rotation function that also gets different results
cycle2 :: Maybe Asteroid -> [Maybe Asteroid] -> [Maybe Asteroid]
cycle2 _ [] = []
cycle2 last (x:xs)
| x==last&& length (filter (/=x) xs) > 0 = cycle2 x (xs++[x])
| otherwise = x:cycle2 x xs
parse :: [String] -> [Maybe Asteroid]
parse = concat . V.toList . V.map V.toList . toAsteroids . V.map V.fromList . V.fromList
where toAsteroids = V.imap g
g x = V.imap (f x)
f i j a = case a of '.' -> Nothing; _ -> Just $ Asteroid j i
--inSight :: [Maybe Asteroid] -> Int
transformCoordinates :: [Maybe Asteroid] -> Asteroid -> (Asteroid,[Maybe Asteroid])
transformCoordinates xs a = (a,[Just $ x -| a |Just x<-xs])
maxInSight :: [Maybe Asteroid] -> (Asteroid, Int)
maxInSight xs = maximumBy (comparing snd) $ map (f . transformCoordinates xs) (catMaybes xs)
where f (x,y) = (x, pred . length . nub $ y)
-- old shit be here
--maxInSight xs = map ((\(x,y)->(x,pred . length . nub . snd $ y)). transformCoordinates xs) (catMaybes xs)
--maxInSight xs = map ((pred . length . nub . snd) . transformCoordinates xs) (catMaybes xs)
-- transform2 :: Asteroid -> [Maybe Asteroid] -> [Maybe Asteroid]
-- transform2 a xs = L.map (a -|) xs
-- maxInSight x = L.maximum $ inSight x `fmap` asts x
-- sightTransform xs = map inSight xs
-- inSight xs a = (pred . L.length) $ L.nub [case a of
-- Just (xa,ya) -> Just (reduceTuple (x-xa,y-ya))
-- Nothing -> Nothing |Just (x,y)<-asts xs]
--
asts :: [String] -> [Maybe Asteroid_old]
asts xxs = L.nub [if (xxs!!y)!!(x)=='.' then Nothing else Just (x,y)
| y<-[0..(L.length $ L.head xxs) -1], x<-[0..L.length xxs -1] ]

20
2019/10/inputtest Normal file
View File

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

4
2019/12/input2 Normal file
View File

@ -0,0 +1,4 @@
<x=-1, y=0, z=2>
<x=2, y=-10, z=-7>
<x=4, y=-8, z=8>
<x=3, y=5, z=-1>

17
2019/14/input2 Normal file
View File

@ -0,0 +1,17 @@
171 ORE => 8 CNZTR
7 ZLQW, 3 BMBT, 9 XCVML, 26 XMNCP, 1 WPTQ, 2 MZWV, 1 RJRHP => 4 PLWSL
114 ORE => 4 BHXH
14 VRPVC => 6 BMBT
6 BHXH, 18 KTJDG, 12 WPTQ, 7 PLWSL, 31 FHTLT, 37 ZDVW => 1 FUEL
6 WPTQ, 2 BMBT, 8 ZLQW, 18 KTJDG, 1 XMNCP, 6 MZWV, 1 RJRHP => 6 FHTLT
15 XDBXC, 2 LTCX, 1 VRPVC => 6 ZLQW
13 WPTQ, 10 LTCX, 3 RJRHP, 14 XMNCP, 2 MZWV, 1 ZLQW => 1 ZDVW
5 BMBT => 4 WPTQ
189 ORE => 9 KTJDG
1 MZWV, 17 XDBXC, 3 XCVML => 2 XMNCP
12 VRPVC, 27 CNZTR => 2 XDBXC
15 KTJDG, 12 BHXH => 5 XCVML
3 BHXH, 2 VRPVC => 7 MZWV
121 ORE => 7 VRPVC
7 XCVML => 6 RJRHP
5 BHXH, 4 VRPVC => 5 LTCX

2
2019/14/notes Normal file
View File

@ -0,0 +1,2 @@
34659 too low
2944566 too high

View File

@ -140,6 +140,7 @@ fn remove(map: &mut HashMap<Position2D, char>, k: Key) {
}
}
/*
fn distance_to_door(map: &HashMap<Position2D, char>, k: &Key) -> usize {
let (distances, _, _) = traverse(map, find(map, k.0).unwrap());
let door_pos = find(map, k.0.to_uppercase().next().unwrap());
@ -154,6 +155,7 @@ fn distance_to_locked_door(map: &HashMap<Position2D, char>, k: &Key) -> usize {
.min()
.unwrap_or(&0)
}
*/
fn next_key(
map: &mut HashMap<Position2D, char>,
@ -198,6 +200,9 @@ fn next_key(
.collect();
//.min_by_key(|k| )
let nearest = dependencies.iter()
.filter(|(_, (_, d))| d.is_empty())
.min_by_key(|(k, _)| distances.get(&find(&map, k.0).unwrap()));
let dead_end_keys = find_keys_at_dead_ends(&dependencies);
let mut next: Vec<_> = dead_end_keys
.iter()
@ -215,16 +220,16 @@ fn next_key(
//.chain(useful_keys)
.collect();
next.sort_by_key(|(k, n)| *n);//*3 + distance_to_door(map, k));
nearest.map(|(k, _)| next.insert(0, (k, *distances.get(&find(map, k.0).unwrap()).expect("No distance to nearest?"))));
useful_keys.sort_by_key(|(k, n)| *n);
useful_keys.reverse();
useful_keys.pop().map(|k| next.insert(0, k));
useful_keys.pop().map(|k| next.push(k));
useful_keys.pop().map(|k| next.push(k));
//useful_keys.pop().map(|k| next.push(k));
useful_keys.pop().map(|k| next.push(k));
useful_keys.pop().map(|k| next.push(k));
let len = next.len();
next.par_iter()
.take((len.min(5) - 1).max(1))
.take((len.min(4) - 1).max(1))
.map(|(k, _)| {
let mut map2 = map.clone();
let next_pos = find(&map2, k.0).expect("Could not find key #3");
@ -255,8 +260,8 @@ fn main() {
})
.collect();
let pos = find(&map, '@').unwrap();
let steps = 0;
let (_, dependencies, _) = traverse(&map, pos.to_owned());
//let steps = 0;
//let (_, dependencies, _) = traverse(&map, pos.to_owned());
let p1 = next_key(&mut map.clone(), &pos, 0);
println!("Part 1: {}", p1);
println!("Part 1: {}", BEST.lock().unwrap());

9
2019/20/Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "day20"
version = "0.1.0"
authors = ["kageru <kageru@encode.moe>"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

121
2019/20/input Normal file
View File

@ -0,0 +1,121 @@
I U O M N O S
X T X C D N A
#########################################.#####.#######.###.###########.#####.#######.#######################################
#.....#.......#.....#.....#.....#...#.#...#...#...#.....#.#...........#.....#.....#.............#.#...#...#...#.......#.....#
#####.#######.#####.#####.#.###.###.#.#.###.#.###.#.#.###.###.###.#####.#.#######.#####.#.#######.###.#.###.###.#######.#####
#.#.#...#...#.....#.........#...........#.#.#...#.#.#.....#...#.......#.#...#.#.....#.#.#...............#.........#.........#
#.#.###.###.###.#####.#######.#####.#.###.#.###.#.#.#########.#.#########.###.#.#####.###.###.#####.#.#####.###.#########.###
#.....#.........#.....#...#.#.....#.#.....#.#...#.#.#...#...#.#.....#...#.#.#.........#.....#.....#.#.........#.#...#...#...#
#####.#####.#.#.###.#####.#.#.#####.#.#.#.#.###.#.#.###.###.#####.#####.#.#.#####.#######.###.#.#.#######.###.#####.###.#.###
#...#.......#.#.......#.......#.#.#.#.#.#.#...#.#.#.......#.#.#.....#.........#.....#.....#.#.#.#.......#.#.........#.......#
#.###############.#####.#####.#.#.#######.###.#.#.###.#.###.#.#.#.###.###.#####.#######.#.#.###.#.###.#.#.###.#####.#####.#.#
#...#.#.#...#.......#.......#...#.....#...#...#.#.#...#.....#...#...#.#...#.......#...#.#.....#.#...#.#.#.#.#.#.....#.#.#.#.#
#.###.#.#.#######.#.#.#.#####.###.###.#.#.#.###.#.#.###.#.###.###########.#####.#####.###.#.#.#.#.#########.###.#####.#.#.###
#.#.......#...#...#.#.#...#...#.#.#.....#.#...#...#.#...#.#.......#.#.#.#.#.........#.....#.#.#.#...........#.#...#.#.#.#...#
#.###.###.#.#####.###.#.###.###.###.#####.###.#.#.#.#############.#.#.#.#.#######.#.###.#.#####.#.#.#####.#.#.#####.#.#.#.###
#.#...#...#.#.#.#...#.#...#.#.....#.#.....#...#.#.#...#.#.#...........#.....#.....#.#...#.....#.#.#.....#.#.....#...#.#.#.#.#
#.#######.#.#.#.#.#############.#####.###.#.#######.#.#.#.#.###.#.#####.#########.#####.#################.#######.#.#.#.#.#.#
#.....#.......#.#.#...#...#...#...#.#.#...#.....#...#.#.....#.#.#.#.......#.#.#...#.......#.#...#.#.....#.....#.#.#.....#...#
###.#########.#.###.#####.#.###.###.###.#.#.#######.###.###.#.#######.###.#.#.#.#.#.#####.#.#.###.#.#.#####.###.#######.#.###
#.#.....#.#...#...#...#.#.#...#...#...#.#.#.....#...#...#.......#...#.#.......#.#.#.#.........#.....#...#.#.#.#...#.........#
#.###.###.###.###.#.###.#.###.#.#####.###.#.#.###.#.#########.###.#.#####.#######.###.###.#####.#.#.#####.###.###.#######.###
#.........#.#...#.#.#...........#.#.......#.#...#.#.#...#.........#.#.....#.#.......#.#.#.#.#...#.#.#.....#.#...#.#.....#...#
###.#.#####.#.###.#.#####.#####.#.#######.#.###.###.#.#####.#.#.#########.#.#####.#####.#.#.#.#.#######.###.#.###.#.#.###.###
#.#.#.#...#.........#.#.#.#.#.#...#.#.....#.#.#.#.......#.#.#.#.#...........#.#.......#.....#.#.#.#...#...#...#.....#...#.#.#
#.#.#####.#.###.###.#.#.###.#.#.#.#.#####.#.#.#.###.#.###.#####.#####.#######.###.#######.###.#.#.#.###.#####.###.#.###.#.#.#
#...#.#.#.#.#.#.#.....#.........#.#...#...#...#.#...#.#...#.......#...#...#...........#.#.....#.#...#.#.#...#...#.#.#.......#
###.#.#.#.###.#####.#.#####.#.#.###.###.#.#.#.#####.#####.#.#.#.#.#.###.#.#.###.#.#.###.#.#.#####.###.#.###.#.#.#########.###
#...#.#...#...#.#.#.#.......#.#.........#.#.#.#...........#.#.#.#.#.#...#.#...#.#.#.#.#.#.#.#.............#.#.#.#.....#.#.#.#
###.#.#.###.###.#.###.#.#.#####.###.#####.#.#######.#############.#.#.###.###.#######.#.#.###.###.#.#######.#.#######.#.#.#.#
#.#.....#.#.#.#.#.....#.#.#.#...#.......#.#...#...........#...#...#...#...#...#...#...........#...#.#.#...#.....#...#.#.....#
#.#####.#.#.#.#.#########.#.#.#.#.#.###.###.#######.#######.###.###.###.#.###.#.#####.###.#.#########.#.###.#######.#.###.###
#...#.....#.#.#.#.#.#...#.#...#.#.#.#.#...#.......#.........#.....#.#...#.#.....#.#.#...#.#.#.#...#.....#.....#.#...#.#.....#
#.#######.#.#.#.#.#.#.###.#.#.#.#.###.###.#.#.#####.#.###.#####.#######.###.#.###.#.#.#.#.#.#.###.###.#####.#.#.#.###.#.#####
#...#.#...#...........#...#.#.#.#.#.......#.#...#...#.#...#.......#.......#.#...#.....#.#.#...#.......#...#.#.......#.....#.#
#.#.#.###.###.###.#############.#########.###.#########.#####.#######.#####.#######.#################.#.#######.#####.###.#.#
#.#.....#.#.#.#.#.....#.#.....#.# C S P R W B A #...#.#...#...#.#.....#...#...#.#
###.#.###.#.#.#.#######.###.###.# S A P D A E D #.###.###.#.###.#.###########.#.#
#...#.#...........#...#.....#...# #.#.......#.........#.#.#.....#.#
###.#####.#####.###.###.###.##### #.#####.#.#.#.#.#.###.#.###.#.#.#
#...#.#...#.........#.....#.#...# #.....#.#...#.#.#.#.#.......#...#
###.#.###.#.###########.#####.### #.#.#.#.###.###.#.#.#######.#.#.#
EY........#.#...#...#.#.......#.#.# #.#.#.#...#.#.#.#...#.......#.#.#
#.###.#.#.#.#.#.#.#.###.#####.#.# #.#.#####.###.###.#####.#.###.###
#.#...#...#.#...#................RB VN..#.......#.....#.......#.#......CS
#############.#########.#.####### #############.#.###.#######.###.#
#...#.#...#.....#.#.#...#.#.....# #.........#...#.#...#.#...#...#.#
#.###.###.###.###.#.###.#####.#.# ###.###.###.#.#######.#.#########
BE....#...#...#.#.......#.#.#...#.# ON..#.#...#...#.#...#...#.#.#...#.#
#.#####.###.#######.#####.###.#.# #.#.#.#####.#.#.#####.#.#.#.###.#
#.#.#.......#.........#.....#.#.# #.#.#.#...#.#.#.#.........#.#.#..MR
#.#.#.#####.#####.#.#.###.###.#.# #.#.#.#####.#.#.###.#.#####.#.#.#
#.....#...#.......#.#.........#..QG WP....#.......#.......#............VN
#######.###.###.###.############# ###.###########.#.#######.#######
ZM........#.....#...#.#...#.....#.# #.#...#...#...#.#.#.....#.#.....#
#.#.#########.#.#####.#######.#.# #.#####.#.###.#######.#.###.#.###
#.#.......#.#.#.....#.#.....#....ND UE........#...........#.#.#...#...#
###.#######.#########.###.#.#.### #.###.#.#.#####.###.#.#.###.#.###
#...#...#...#...#.......#.#.....# #.#.#.#.#...#...#...#.#.....#....GN
#.#####.###.#.###.###.#####.#.### #.#.###########.#.###.#####.#.#.#
#...................#.......#...# #.#.......#.#.#.#.......#...#.#.#
#####.#####.###.#.#####.######### ###.#.#.###.#.###.###############
#...#.....#.#...#.#...#.#.#.....# UT....#.#.#.#.#...#.#.#.......#....WA
#.#.###############.###.#.#.##### ###.#####.#.#.###.#.#.###.#.#.#.#
WP..#...#.....#.#.#.....#.#.......# #.....#.....#.#.....#.#...#...#.#
#.#.#.###.###.#.###.#.###.#.##### #.#.#.###.###.#########.###.#.###
#.#.#.....#.....#.#.#.....#.....# #.#.#.#.......#.#.#.....#...#.#.#
#######.#.#.#.###.#.#.#.#.####### #.#####.###.#.#.#.#####.###.#.#.#
#...#.#.#...#.......#.#.#........OX #.........#.#...........#...#.#.#
#.###.###########.###.###.#.###.# #.#######.#####.###########.###.#
#.......#.....#...#...#...#.#...# #.#.....#.#.#.#.#.......#...#....PP
#.###.#.###.#.################### ###.###.###.#.###.#.###.#####.###
NO..#...#.#...#.#.#.....#...#.....# ZR..#.#.#...#.....#.#.#.....#.....#
###.#####.###.#.#.#####.###.###.# #.#.#.#.#####.#####.###.#####.#.#
#...#...#...#.....#.#.........#..FK #.....#.....#.#...#.#...#...#.#.#
#.###.#.###.#####.#.###.#.#.#.#.# #.###.###.###.###.#.###.#.#.###.#
ZZ......#.......#.#.......#.#.#.#.# #.#...#.............#.....#.....#
#.###.###.#.###.###.############# ###.#####.###.#################.#
#.#...#.#.#.......#.#.#.........# #.....#.....#.#...............#.#
#######.#####.#.#.###.#.###.###.# #########.#####.###.#######.#####
RX..#.#.#.....#.#.#.#.#.....#.#....GN #.#...#...#.....#.....#.#........UE
#.#.#.#.#.#########.###.#.###.#.# #.#.#####.###.#.###.###.###.###.#
#.....#.#.....#.#.....#.#...#.#.# ZM....#...#.#...#.#.#.......#...#.#
#.#.#.#.#.#####.###.#####.#.#.#.# #.#.###.###.#.###.#.#.#####.###.#
#.#.#...#.................#.#.#.# #.#.........#...#...#...#.....#.#
#.###.#.#####.###.#.#####.#####.# M P I R E N M #.###.#.#.###.#######.#####.###.#
#.#...#.....#...#.#...#.#...#.#.# C G X X Y O R #...#.#.#.#...#.....#.....#...#.#
#####.###.###.#.#.#####.#.###.#######.#######.###########.#####.#####.#####.###########.#########.#######.#.#####.#.#.###.###
#.#.#...#.#...#.#.#.............#.....#.#.#...#...#.........#...#.......#.......#.#...#.#.......#.#.............#.#.#.#.#...#
#.#.#.#.#.###.###.###.###.###.###.#.#.#.#.###.#.#.###.#########.#######.#######.#.###.#.###.#.#####.###.#.###.#########.#####
#...#.#.#...#...#...#...#...#.#...#.#...#.#.....#.#...#.....#...#.#.#.#.....#.#.#.#.#.#.....#.#...#...#.#.#.............#...#
###.#.#######.#.#####.###.#.#####.#.###.#.#######.#.###.#.###.#.#.#.#.###.###.#.#.#.#.#.#######.#######.#####.###.#######.###
#.......#.....#.#.......#.#...#...#.#.....#...#.#.#.....#...#.#.#...........#.#...#...#...........#.#.#...#.....#...........#
#.#.#.#.#.#.#.#.#.#.#.#.###.#.###.#.#.###.###.#.#.#######.#####.###.###.#.###.#.###.#.#.#.###.#.#.#.#.#.###.#.###.###.###.###
#.#.#.#.#.#.#.#.#.#.#.#.#...#...#.#.#.#.#.#.#.........#...#.#...#.....#.#...#...#...#...#...#.#.#.#.#...#...#.#.....#.#.#...#
###.#.#####.#######.#.###.###.###.#####.#.#.#.#####.#####.#.###.#####.#.#.#####.#.#.###.#######.#.#.#.#######.#######.#.#####
#...#...#...#.#.#...#...#.#.#...#.#.......#...#.#...#.....#.....#.....#.#...#...#.#.#.........#.#.#...#.........#...........#
###.#####.###.#.#.#.#######.#.#########.#.#.###.#.#####.#.#.#.#####.#####.#####.#.#########.#########.#####.#.###.#####.###.#
#.....#.....#.....#.......#.....#.......#.#.....#...#...#.#.#.....#.#.#.#.#...#.#.......#...........#.#.#.#.#...#...#.....#.#
###.#.###.#######.###.###.###.###.###.###.#.#.###.###.###.#######.#.#.#.#####.#.#.#.#########.###.#.#.#.#.#####.#.#.#.#.#.#.#
#...#...#...#.#.....#.#.....#.#...#.#.#...#.#...#.#.#.#.#.#.#...#.#.....#.#...#.#.#.........#.#.#.#.#.........#.#.#.#.#.#.#.#
#.###.#.###.#.#.#.#.#####.#########.#####.#.#######.###.#.#.###.#.#.###.#.###.#.#####.#######.#.#######.#.#########.###.#.#.#
#.#...#.#...#...#.#.#.......#...#.#.......#.#.......#...#...#...#.#...#.#.#.......#...#.#.#.#...#.....#.#.#.#...#.....#.#.#.#
#.#.#.#.#####.#.#.#####.#####.###.#.#####.#.###.#######.#.#####.#.#####.#.###.#######.#.#.#.###.#.#####.###.#.#####.#.#######
#.#.#.#...#...#.#.#.......#.#.#.#.#.#.#.#.#.#...#.#.#...#...#.#.......#.....#...#...........#.#...#.#.....#...#...#.#...#.#.#
###.###.#.#.#########.#####.#.#.#.###.#.#.#.###.#.#.###.#.###.#.###.#.###.###.#####.###.#####.#####.#.#.###.#####.###.###.#.#
#.....#.#.#.#.........#.......#.#...#.....#.....#.....#...#.......#.#...#.#.......#...#.......#.....#.#...#...#.....#.#.#...#
#.#.###.#.#.#.###.#.#######.#.#.#.#####.#.#.###.###.#.#.#####.#.#####.###.###.#########.###.#.###.#####.###.###.#.#####.#.###
#.#...#.#.#.#.#.#.#...#.....#.........#.#.#.#.....#.#.#...#.#.#...#.#.#.#.#.......#.......#.#...#...#.#.........#...........#
#.#.###.#######.#.#.#####.#########.#####.#######.#.#.#.###.###.#.#.###.#.#####.#######.#########.###.#.###.#.#.###.#.#.###.#
#.#.#.......#...#.#.#.#...#...#.....#.#...#.......#.#.......#...#.#.........#...#...............#.#.#.#.#.#.#.#...#.#.#.#.#.#
#.#####.#######.#####.#######.#.###.#.###.#.#######.###########.#.#.###########.#####.###.###.###.#.#.###.###.#.#####.###.###
#.#.....#...............#.......#.....#...#.......#...#...#...#.#.#...#.......#.....#...#...#...#.......#...#.#.....#.#...#.#
#.#.###.#.#.#.#.#######.#.#.#.#######.###.#######.###.###.#.#.###.###.#####.#.#.#.###.###########.###.###.#####.#.#####.###.#
#.#.#...#.#.#.#.#.#.......#.#...#.........#.........#...#.#.#...#.#.#...#.#.#...#.#.......#.........#.........#.#.#...#...#.#
#.#.###.###.#####.#.#####.#.#####.###.#.###.#.#######.###.###.#.#.#.###.#.#.###.#####.#.###.#####.#.#.###.#####.#####.#.###.#
#.#.#.#.#...#...#...#.....#.#.....#...#.#.#.#...#...#...#.#...#...#.......#...#.....#.#.......#.#.#.#.#.....#.#.............#
#####.#.#.#.#.#.###.#.###.#####.#####.###.#.###.#.#.#.###.#.#######.###.#####.#######.#.#.#.###.#.#.###.#####.###.#.#.###.#.#
#.......#.#.#.#.....#.#.....#...#.......#.....#.#.#.......#.......#...#.#...........#.#.#.#.....#.#.#...........#.#.#...#.#.#
#####################################.#######.#########.#.#######.#.###########.#######.#####################################
Z A R A F Q R P
R D B A K G D G

3
2019/20/src/main.rs Normal file
View File

@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}

8
2019/24/Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "day24"
version = "0.1.0"
authors = ["kageru <kageru@encode.moe>"]
edition = "2018"
[dependencies]
grid = { path = "../grid" }

5
2019/24/input Normal file
View File

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

80
2019/24/src/main.rs Normal file
View File

@ -0,0 +1,80 @@
use grid::*;
use std::collections::HashMap;
use std::fmt;
use std::io::{self, BufRead};
const FIELD_SIZE: usize = 5;
#[derive(Copy, Debug, Clone, PartialEq, Eq)]
enum State {
Alive,
Dead,
}
impl fmt::Display for State {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"{}",
match self {
State::Alive => '#',
State::Dead => '.',
}
)
}
}
impl From<char> for State {
fn from(c: char) -> Self {
match c {
'.' => Self::Dead,
'#' => Self::Alive,
_ => unreachable!(),
}
}
}
fn state_for_live_neighbors(state: &State, n: usize) -> State {
match (state, n) {
(_, 1) => State::Alive,
(State::Dead, 2) => State::Alive,
_ => State::Dead,
}
}
fn main() {
let mut fields: HashMap<Position2D, State> = io::stdin()
.lock()
.lines()
.map(|l| l.unwrap())
.enumerate()
.flat_map(move |(y, l)| {
l.chars()
.enumerate()
.map(move |(x, c)| ((x, y).into(), c.into()))
.collect::<Vec<_>>()
})
.collect();
loop {
println!("{}", draw_ascii(&fields, State::Dead));
fields = (0..FIELD_SIZE)
.flat_map(|y| {
(0..FIELD_SIZE)
.map(|x| {
let p = Position2D::from((x, y));
let state = state_for_live_neighbors(
fields.get(&p).unwrap(),
p.moore()
.iter()
.map(|p| fields.get(&p).unwrap_or(&State::Dead))
.filter(|&&s| s == State::Alive)
.count(),
);
(Position2D::from((x, y)), state)
})
// .map(|alive_neighbors| (Position2D::from((x, y)), *state))
.collect::<Vec<_>>()
})
.collect();
}
}

View File

@ -73,6 +73,19 @@ impl Position2D {
(Direction::Left, *self + Direction::Left),
]
}
pub fn moore(&self) -> [Position2D; 8] {
[
*self + Direction::Up + Direction::Left,
*self + Direction::Up,
*self + Direction::Up + Direction::Right,
*self + Direction::Left,
*self + Direction::Right,
*self + Direction::Down + Direction::Left,
*self + Direction::Down,
*self + Direction::Down + Direction::Right,
]
}
}
impl Direction {