読者です 読者をやめる 読者になる 読者になる

アヤチノオト

覚書のこと

CodeIQのナムドット問題解きました

評価1(最低評価)だったよ!
解説見ながらHaskellで書いてみました。

module Main where

import Data.List

partitionOfSet :: Eq a => [a] -> [[[a]]]
partitionOfSet [] = []
partitionOfSet xs = partSet xs [] []
    where
      partSet [] ys zs     = ys:zs
      partSet (x:xs) ys zs = partSet xs ([x]:ys) zs'
          where
            zs' = foldr (\y a -> partSet xs ((x:y):delete y ys) a) zs ys

numdot :: String -> String
numdot = unlines . map (intercalate ".") . nums
    where nums = map (sort . (map reverse)) . reverse . partitionOfSet

main :: IO ()
main = writeFile "answer.txt" $ numdot "12345"

なかなか簡潔でいいんじゃないかと思うんだけど並び順が答えと一緒にならない……orz