From e7c488dcd0d2ee6404b4f95201ffd4eaae436cab Mon Sep 17 00:00:00 2001 From: Julien Moutinho Date: Fri, 16 Jan 2026 17:29:41 +0100 Subject: [PATCH] wip --- src/Rosetta/Matching.hs | 22 +++++++++++++++++++--- worksheets.cabal | 1 + 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/Rosetta/Matching.hs b/src/Rosetta/Matching.hs index 33030ad..e15a7a1 100644 --- a/src/Rosetta/Matching.hs +++ b/src/Rosetta/Matching.hs @@ -10,6 +10,8 @@ import Data.Map.Strict qualified as Map -- import Data.Set qualified as Set import Data.Text qualified as Text +import System.Random qualified as Random +import System.Random.Shuffle as Random -- import Data.Text.Short qualified as ShortText import System.FilePath.Posix (()) @@ -144,9 +146,23 @@ data Dicts = Dicts } pagesHTML :: Dicts -> Text -> Pages -> IO Builder -pagesHTML Dicts{..} title Pages{..} = do +pagesHTML Dicts{..} title pages = do -- FIXME: this absolute path is not portable out of my system dataPath <- Self.getDataDir <&> File.normalise + randomGen <- Random.getStdGen + pagesListShuffled :: [Page] <- + (mconcat <$>) $ + forM (pages & pagesList) \page -> do + forM (page & pageMatches & chunksOf (page & pageMatchesNum)) \matches -> do + pageMatches <- Random.shuffleM matches + return page{pageMatches} -- Random.shuffleM + -- Random.shuffleM + -- forM_ (pageMatch & ol0) \(matchIdx :: Int, match) -> do + -- forM_ (match & matchMatters & ol1) \(matterIdx :: Natural, matter) -> do + -- Random.shuffleM + -- let n = page & pageMatchesNum & fromIntegral + -- in let (q, r) = page & pageMatches & List.length & (div n) + -- in List.unfoldr _ (List.replicate q n <> [r]) return $ Blaze.renderMarkupBuilder do HTML.docTypeHtml do HTML.head do @@ -164,9 +180,9 @@ pagesHTML Dicts{..} title Pages{..} = do ! HA.type_ "text/css" ! HA.href (dataPath cssFile & toValue) -- styleCSS $ cssPrintPage pageOrientation pageSize - HTML.styleCSS $ pagesDifficulties & difficultyCSS + HTML.styleCSS $ pages & pagesDifficulties & difficultyCSS HTML.body do - forM_ pagesList \page -> do + forM_ (pages & pagesList) \page -> do "\n" forM_ (page & pageMatches & chunksOf (page & pageMatchesNum)) \pageMatch -> do HTML.section diff --git a/worksheets.cabal b/worksheets.cabal index 5216007..fb58500 100644 --- a/worksheets.cabal +++ b/worksheets.cabal @@ -97,6 +97,7 @@ common library-deps , pretty-simple , radix-tree , random + , random-shuffle , safe-decimal , scientific , split -- 2.49.0