golf/BWT

http://golf.shinh.org/p.rb?BWT

できた

import List

-- リストの順番を回転させてリストにして返す
rolling :: [a] -> [[a]]
rolling str = take (length str) $ iterate (\(x:xs) -> xs ++ [x]) str

-- Burrows-Wheeler Transform
burrowsWheelerTransform :: String -> (Int, String)
burrowsWheelerTransform str = (index str roll, map last roll)
	where
		roll = sort $ rolling str
		index s lst = length $ takeWhile (/= s) lst

main = interact $ unlines . map ((\(idx, s) -> show idx ++ " " ++ s) . burrowsWheelerTransform) . lines

ヤベェ!Haskellすごすぎ!型とかなんとか考えず、定義通り書くだけだよ!

復元できた