Haskell,157131字节
k="bcdfghjklmnpqrstvwxz";f c((r:q),s)=if c`elem`k then(q,r:s)else(r:q,c:s);f c("",s)=("",c:s);g s=snd$foldr f(filter(`elem`k)s,"")s
更新资料
@atlasologist的解决方案使我意识到我只需要一个辅音列表而不是配对(尽管由于我使用了正确的折叠方式,所以不需要颠倒它们)。
不打高尔夫球
consonants = "bcdfghjklmnpqrstvwxz"
-- Combining function (right fold, improved)
f :: Char -> (String, String) -> (String, String)
f c ((r:rest), s) = if c `elem` consonants then (rest, r:s) else (r:rest, c:s)
f c ("", s) = ("", c:s)
transform :: String -> String
transform s = snd $ foldr f (filter (`elem` consonants) s, "") s
main = do
line <- getLine
putStrLn . transform $ line
旧
c="bcdfghjklmnpqrstvwxz";n c(a@((f,t):q),s)=if c==f then(q,t:s)else(a,c:s);n c([],s)=([],c:s);g s=let z=filter(`elem`c)s in snd$foldr n(zip (reverse z)z,"")s
创建一个辅音对列表,然后遍历字符串,使用所述列表替换每个辅音。
有点原始,但是我想在不首先查看答案的情况下解决这个问题。:)
-[...]
特定于视网膜还是特定于.net regex,还是到目前为止我一直忽略的常规regex功能?