問題は http://nabetani.sakura.ne.jp/hena/ord14linedung/
off_line14.hs
import Data.List
type Weapon = Char
type Monster = Char
dataBase :: [(Weapon, (Monster, Weapon))]
dataBase = [('a', ('B', 'c')),
('c', ('D', 'e')),
('e', ('F', 'g')),
('g', ('H', 'i')),
('i', ('J', 'k')),
('k', ('L', 'a'))]
takeData :: String -> ([Weapon], [(Monster, Int)])
takeData cs = (nub ws, [(head m, length m) | m <- group ms])
where (ms, ws) = span (< 'a') $ sort cs
attakMonster :: [Weapon] -> [(Monster, Int)] -> Int -> Int
attakMonster [] _ c = c
attakMonster _ [] c = c
attakMonster (w : ws) ms c
| null mb = attakMonster ws ms c
| otherwise = attakMonster (w1 : ws) (ma ++ (tail mb)) (c + (snd . head) mb)
where
Just (m1, w1) = lookup w dataBase
(ma, mb) = break ((== m1).fst) ms
solve :: String -> String
solve cs = show $ attakMonster ws ms 0
where (ws, ms) = takeData cs
----------------------------------------------------------------
-- test
----------------------------------------------------------------
test :: [(Int, Bool)]
test = zip [0 ..] $ map (\ (a, b) -> solve a == b) testData
testData :: [(String, String)]
testData = [
( "gLDLBgBgHDaD", "6" ),
( "DBcDLaLgDBH", "6" ),
( "JJca", "0" ),
( "FJDLBH", "0" ),
( "HJBLFDg", "6" ),
( "HBaDLFJ", "6" ),
( "DJaHLB", "2" ),
( "gDLHJF", "3" ),
( "cJFgLHD", "5" ),
( "FFBJaJJ", "1" ),
( "FJeJFBJ", "2" ),
( "iJFFJJB", "3" ),
( "JBJiLFJF", "5" ),
( "JDiFLFBJJ", "8" ),
( "BDFDFFDFFLLFFJFDBFDFFFFDDFaDBFFB", "28" ),
( "DDFBFcBDFFFFFFLBFDFFBFLFDFDJDFDF", "24" ),
( "FDLBFDDBFFFeFFFFFDFBLDDFDDFBFFJF", "16" ),
( "FDBFFLFDFFDBBDFFBJDLFgDFFFDFFDFF", "0" ),
( "FDiFLDFFFFBDDJDDBFBFDFFFBFFDFLFF", "31" ),
( "FDFDJBLBLBFFDDFFFDFFFFFDDFBkFDFF", "30" ),
( "HBkFFFFHBLH", "3" ),
( "FBHHFFFHLaB", "2" ),
( "LFHFBBcHFHF", "0" ),
( "LFBHFFeFHBH", "7" ),
( "LgFHHHBFBFF", "3" ),
( "FFiFHBHLBFH", "0" ),
( "BFHHFFHBeFLk", "10" ),
( "FHFaBBHFHLFg", "5" ),
( "FFgacaFg", "0" ),
( "JHDaDcBJiiHccBHDBDH", "9" ),
( "FHJJLckFckFJHDFF", "12" ),
( "DeDHJHDFHJBLHDLLDHJLBDD", "22" ),
( "gJLLLJgJgJLJL", "0" ),
( "DaaaDDD", "0" ),
( "HFeJFHiBiiBJeJBBFFB", "9" ),
( "FJFFJDBHBHaLJBHJHDLHkLLLFFFgJgHJLHkJkB", "32" ),
( "giFLBiBJLLJgHBFJigJJJBLHFLDLL", "23" ),
( "cgkLJcLJJJJgJc", "2" ),
( "LDFHJHcFBDBLJBLFLcFJcDFBL", "22" ),
( "JJHHHkHJkHLJk", "1" ),
( "kHHBBaBgHagHgaHBBB", "11" ),
( "HDBFFDHHHDFLDcHHLFDcJD", "20" ),
( "HFFFHeFFee", "7" ),
( "gLLDHgDLgFL", "1" ),
( "JJJBBaBBHBBHaLBHJ", "7" ),
( "FBFBgJBDBDgF", "0" ),
( "LLLLakakLakLL", "7" ),
( "HeJHeJe", "0" ),
( "LDFLBLLeBLDBBFFBLFBB", "4" )]