LoginSignup
6
2

More than 3 years have passed since last update.

2と0の列から「2020」を見つける

Posted at

ランダムに並んだ「2」と「0」の列から「2020」を見つけてハイライトする。

年賀状のためにPostScriptで書いたものを、Haskellで書き直した。もっといろいろな書き方ができそう。シェルスクリプトとかでも書けそう。

module Main where

import System.Environment (getArgs)
import System.Random
import Data.List

scan2020 :: [Int] -> [[Int]]
scan2020 [] = []
scan2020 ls@(x:xs)
  | isPrefixOf the2020 ls = the2020 : (scan2020 $ drop 4 ls)
  | otherwise = [x] : scan2020 xs
  where the2020 = [2, 0, 2, 0]

hl2020 :: [[Int]] -> [String]
hl2020 [] = []
hl2020 (x:xs)
  | length x == 4 =
      concat ["\ESC[31m", intercalate " " $ map show x, "\ESC[m"] : hl2020 xs
  | otherwise = concatMap show x : hl2020 xs

main :: IO ()
main = do
  a <- fmap (read . head) getArgs
  s <- getStdGen
  putStrLn $ intercalate " " $ hl2020 $ take a $ scan2020 $ twoandzero s
  where
    twoandzero s = map ((*2) . flip mod 2) (randoms s :: [Int])

image.png

6
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2