karoyakani

Software Hobbyist. Competitive Programming. Go game. Volleyball. Cats. 趣味のプログラミングで気づいたことなどを書きます

karoyakani

Software Hobbyist. Competitive Programming. Go game. Volleyball. Cats. 趣味のプログラミングで気づいたことなどを書きます

最近の記事

  • 固定された記事

我流Haskell書法

関数型宣言はコンパイラに任せる(自分では可能な限り宣言しない) 関数は小さな部品関数の組み合わせで書く 手続き型形式を極力排す(do… はなるべく使わない) 中間変数はなるべく使わない(理想はpointfree style) 最短 (Code Golf) かつ実用上(競プロなどで)最速を目指す 例 AtCoder 競プロ典型 90 問 70 日目 - Plant Planning(★4) import Control.Monadimport qualified Data.

    • IPO 見本

      競プロ典型 90 問 42 日目 - Multiple of 9(★4) import Control.Monadimport qualified Data.Vector.Unboxed.Mutable as UMmain = readLn >>= sol >>= printsol k = case k `mod` 9 of 0 -> f9 k _ -> return 0p = 10^9+7f9 k = do u <- UM.replicate (k+9) 0 fo

      • 遅延評価を使う

        競プロ典型 90 問 25 日目 - Digit Product Equation(★7) main = interact $ show . sol . map (read @Int) . wordssol (n:b:_) | n<b = 0 | otherwise = length s + if f b==0 then 1 else 0 where g p = takeWhile (<=n-b) . iterate (* p) s = g 2 1 >>= g

        • Data.Function.fix で loop 制御

          競プロ典型 90 問 40 日目 - Get More Money(★7) import Control.Monadimport Control.Monad.STimport Control.Monad.Primitiveimport qualified Data.ByteString.Char8 as Cimport Data.Listimport Data.Functionimport Data.Functorimport Data.Sequence (Seq (Emp

        • 固定された記事

        我流Haskell書法

          Data.Vector を多次元に使う idx 関数

          競プロ典型 90 問 81 日目 - Friendly Group(★5) import Control.Monadimport qualified Data.ByteString.Char8 as Cimport Data.Listimport Data.Maybeimport qualified Data.Vector.Unboxed as Uimport qualified Data.Vector.Unboxed.Mutable as UMmain = ints >>

          Data.Vector を多次元に使う idx 関数

          Data.Vector.Unboxed.Mutable.unsafe{Read,Write,Modify} は躊躇なく使う

          競プロ典型 90 問 19 日目 - Pick Two(★6) import Control.Monadimport Control.Monad.STimport qualified Data.ByteString.Char8 as Cimport Data.Listimport Data.Vector.Unboxed ((!))import qualified Data.Vector.Unboxed as Uimport qualified Data.Vector.Unb

          Data.Vector.Unboxed.Mutable.unsafe{Read,Write,Modify} は躊躇なく使う

          入出力が簡便な時は Data.Text.IO.interact

          競プロ典型 90 問 2 日目 - Encyclopedia of Parentheses(★3) {-# LANGUAGE OverloadedStrings #-}import Data.Iximport qualified Data.Text as Timport qualified Data.Text.IO as TImain = sol <$> readLn >>= mapM_ TI.putStrLnsol :: Int -> [T.Text]sol n = go

          入出力が簡便な時は Data.Text.IO.interact

          Data.List.find を使った巧妙な仕掛け

          競プロ典型 90 問 16 日目 - Minimum Coins(★3) import Control.Monadimport qualified Data.ByteString.Char8 as Cimport Data.Listimport Data.Maybemain = sol <$> readLn <*> get >>= printget = unfoldr (C.readInt . C.dropWhile (==' ')) <$> C.getLinesol n

          Data.List.find を使った巧妙な仕掛け

          infix 関数適用演算子が早い - 素数で割った余りの出力

          競プロ典型 90 問 15 日目 - Don't be too close(★6) {-# LANGUAGE BangPatterns #-}import Control.Monadimport Data.Listimport Data.Vector.Unboxed ((!))import qualified Data.Vector.Unboxed as Umain = readLn >>= mapM_ print . U.toList . solsol n = U.map

          infix 関数適用演算子が早い - 素数で割った余りの出力

          Data.Vector.Algorithms.Intro には sortBy がある

          競プロ典型 90 問 14 日目 - We Used to Sing a Song Together(★3) import Control.Monadimport qualified Data.ByteString.Char8 as Cimport Data.Listimport qualified Data.Vector.Algorithms.Intro as Aimport qualified Data.Vector.Unboxed as Umain = sol <$>

          Data.Vector.Algorithms.Intro には sortBy がある

          Compressed Sparse Row Graph が最小メモリで使える

          競プロ典型 90 問 71 日目 - Fuzzy Priority(★7) import Control.Monadimport Control.Monad.STimport qualified Data.ByteString.Char8 as Cimport Data.Functionimport Data.Foldableimport Data.Listimport Data.Sequence (Seq(..), empty, (<|))import qualified

          Compressed Sparse Row Graph が最小メモリで使える

          cojna/iota ライブラリは最強

          競プロ典型 90 問 77 日目 - Planes on a 2D Plane(★7) {-# LANGUAGE LambdaCase, RecordWildCards #-}import Control.Arrowimport Control.Monadimport Control.Monad.STimport qualified Data.ByteString.Char8 as Cimport Data.Functionimp

          cojna/iota ライブラリは最強

          Vector of Vector は General.mapM で解凍/凍結

          競プロ典型 90 問 77 日目 - Planes on a 2D Plane(★7) import Control.Arrowimport Control.Monadimport Control.Monad.STimport Control.Monad.Primitiveimport qualified Data.ByteString.Char8 as Cimport Data.Functionimport Data.Functorimport Data.Listimpo

          Vector of Vector は General.mapM で解凍/凍結

          fgl は versatile (たとえ TLE でも) その2

          競プロ典型 90 問 77 日目 - Planes on a 2D Plane(★7) import Control.Arrowimport Control.Monadimport qualified Data.ByteString.Char8 as Cimport Data.Graph.Inductive.Graphimport Data.Graph.Inductive.Treeimport Data.Graph.Inductive.Query.MaxFlowimport

          fgl は versatile (たとえ TLE でも) その2

          fgl は versatile (たとえ TLE でも)

          競プロ典型 90 問 71 日目 - Fuzzy Priority(★7) import Control.Monadimport Data.Boolimport qualified Data.ByteString.Char8 as Cimport Data.Graph.Inductive.Graphimport Data.Graph.Inductive.PatriciaTreeimport Data.Listimport Data.Maybeimport Data.Sequ

          fgl は versatile (たとえ TLE でも)

          LabmdaCase は Golf の味方

          競プロ典型 90 問 12 日目 - Red Painting(★4) {-# LANGUAGE LambdaCase #-}import Control.Monadimport Control.Monad.STimport Data.Array.STimport Data.Boolimport qualified Data.ByteString.Char8 as Cimport qualified Data.IntSet as Simport Data.Listmain

          LabmdaCase は Golf の味方