lwhjp,
@lwhjp@lemmy.sdf.org avatar

Haskell

This was fun and (fairly) easy! Off-by-one errors are a likely source of bugs here.


<span style="color:#323232;">import Control.Monad
</span><span style="color:#323232;">import Data.List
</span><span style="color:#323232;">import Data.List.Split
</span><span style="color:#323232;">import Data.Maybe
</span><span style="color:#323232;">
</span><span style="color:#323232;">score d pat = ((100 *) <$> search pat) `mplus` search (transpose pat)
</span><span style="color:#323232;">  where
</span><span style="color:#323232;">    search pat' = find ((d ==) . rdiff pat') [1 .. length pat' - 1]
</span><span style="color:#323232;">    rdiff pat' i =
</span><span style="color:#323232;">      let (a, b) = splitAt i pat'
</span><span style="color:#323232;">       in length $ filter (uncurry (/=)) $ zip (concat $ reverse a) (concat b)
</span><span style="color:#323232;">
</span><span style="color:#323232;">main = do
</span><span style="color:#323232;">  input <- splitOn [""] . lines <$> readFile "input13"
</span><span style="color:#323232;">  let go d = print . sum . map (fromJust . score d) $ input
</span><span style="color:#323232;">  go 0
</span><span style="color:#323232;">  go 1
</span>

Line-seconds score: 0.102 😉

  • All
  • Subscribed
  • Moderated
  • Favorites
  • advent_of_code@programming.dev
  • kavyap
  • ngwrru68w68
  • osvaldo12
  • DreamBathrooms
  • mdbf
  • magazineikmin
  • thenastyranch
  • Youngstown
  • khanakhh
  • everett
  • slotface
  • tacticalgear
  • rosin
  • normalnudes
  • megavids
  • Leos
  • GTA5RPClips
  • ethstaker
  • InstantRegret
  • cubers
  • modclub
  • Durango
  • provamag3
  • cisconetworking
  • tester
  • anitta
  • JUstTest
  • lostlight
  • All magazines