Haskell, (削除) 177 (削除ここまで) (削除) 173 (削除ここまで) 171(削除) 171 (削除ここまで) 169 bytes
unwords.s.words
s(x:y:z)=maybe[x,y]id(do(a,b)<-k x;(c,d)<-k y;j[b c,d a])++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(x:y,r))<-j$span v<$>break v s;j(x:y,\n->a++n++r)
r=unwords.s.words
This is a direct shortening of the following naïve solution, so there should something much better around here:
swapvowels :: String -> String
swapvowels = unwords . swapPairs . words
swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
case (,) <$> extractVowels word1 <*> extractVowels word2 of
Just ((vowels1, rebuild1), (vowels2, rebuild2))
-> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest
extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
let isVowel l = l `elem` "aeiouy"
(a,b) <- Just $ break isVowel s
(w@(_:_),r) <- Just $ span isVowel b
return (w, \n -> a ++ n ++ r)
Haskell, (削除) 177 (削除ここまで) (削除) 173 (削除ここまで) 171 bytes
s(x:y:z)=maybe[x,y]id(do(a,b)<-k x;(c,d)<-k y;j[b c,d a])++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(x:y,r))<-j$span v<$>break v s;j(x:y,\n->a++n++r)
r=unwords.s.words
This is a direct shortening of the following naïve solution, so there should something much better around here:
swapvowels :: String -> String
swapvowels = unwords . swapPairs . words
swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
case (,) <$> extractVowels word1 <*> extractVowels word2 of
Just ((vowels1, rebuild1), (vowels2, rebuild2))
-> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest
extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
let isVowel l = l `elem` "aeiouy"
(a,b) <- Just $ break isVowel s
(w@(_:_),r) <- Just $ span isVowel b
return (w, \n -> a ++ n ++ r)
Haskell, (削除) 177 (削除ここまで) (削除) 173 (削除ここまで) (削除) 171 (削除ここまで) 169 bytes
unwords.s.words
s(x:y:z)=maybe[x,y]id(do(a,b)<-k x;(c,d)<-k y;j[b c,d a])++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(x:y,r))<-j$span v<$>break v s;j(x:y,\n->a++n++r)
This is a direct shortening of the following naïve solution, so there should something much better around here:
swapvowels :: String -> String
swapvowels = unwords . swapPairs . words
swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
case (,) <$> extractVowels word1 <*> extractVowels word2 of
Just ((vowels1, rebuild1), (vowels2, rebuild2))
-> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest
extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
let isVowel l = l `elem` "aeiouy"
(a,b) <- Just $ break isVowel s
(w@(_:_),r) <- Just $ span isVowel b
return (w, \n -> a ++ n ++ r)
Haskell, 177(削除) 177 (削除ここまで)(削除) 173 (削除ここまで) 171 bytes
s(x:y:z)=maybe([x=maybe[x,y])id(y]id(\do(a,b)<-k x;(c,d)<->[bk y;j[b c,d a])<$>k x<*>k y)++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(w@(_x:_)y,r))<-j$span v<$>break v s;j(wx:y,\n->a++n++r)
r=unwords.s.words
This is a direct shortening of the following naïve solution, so there should something much better around here:
swapvowels :: String -> String
swapvowels = unwords . swapPairs . words
swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
case (,) <$> extractVowels word1 <*> extractVowels word2 of
Just ((vowels1, rebuild1), (vowels2, rebuild2))
-> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest
extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
let isVowel l = l `elem` "aeiouy"
(a,b) <- Just $ break isVowel s
(w@(_:_),r) <- Just $ span isVowel b
return (w, \n -> a ++ n ++ r)
Haskell, 177 bytes
s(x:y:z)=maybe([x,y])id((\(a,b)(c,d)->[b c,d a])<$>k x<*>k y)++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(w@(_:_),r))<-j$span v<$>break v s;j(w,\n->a++n++r)
r=unwords.s.words
This is a direct shortening of the following naïve solution, so there should something much better around here:
swapvowels :: String -> String
swapvowels = unwords . swapPairs . words
swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
case (,) <$> extractVowels word1 <*> extractVowels word2 of
Just ((vowels1, rebuild1), (vowels2, rebuild2))
-> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest
extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
let isVowel l = l `elem` "aeiouy"
(a,b) <- Just $ break isVowel s
(w@(_:_),r) <- Just $ span isVowel b
return (w, \n -> a ++ n ++ r)
Haskell, (削除) 177 (削除ここまで)(削除) 173 (削除ここまで) 171 bytes
s(x:y:z)=maybe[x,y]id(do(a,b)<-k x;(c,d)<-k y;j[b c,d a])++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(x:y,r))<-j$span v<$>break v s;j(x:y,\n->a++n++r)
r=unwords.s.words
This is a direct shortening of the following naïve solution, so there should something much better around here:
swapvowels :: String -> String
swapvowels = unwords . swapPairs . words
swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
case (,) <$> extractVowels word1 <*> extractVowels word2 of
Just ((vowels1, rebuild1), (vowels2, rebuild2))
-> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest
extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
let isVowel l = l `elem` "aeiouy"
(a,b) <- Just $ break isVowel s
(w@(_:_),r) <- Just $ span isVowel b
return (w, \n -> a ++ n ++ r)
Haskell, 177 bytes
s(x:y:z)=maybe([x,y])id((\(a,b)(c,d)->[b c,d a])<$>k x<*>k y)++s z
s x=x
v=(`elem`"aeiouy")
j=Just
k s=do(a,(w@(_:_),r))<-j$span v<$>break v s;j(w,\n->a++n++r)
r=unwords.s.words
This is a direct shortening of the following naïve solution, so there should something much better around here:
swapvowels :: String -> String
swapvowels = unwords . swapPairs . words
swapPairs :: [String] -> [String]
swapPairs (word1:word2:rest) =
case (,) <$> extractVowels word1 <*> extractVowels word2 of
Just ((vowels1, rebuild1), (vowels2, rebuild2))
-> [rebuild1 vowels2, rebuild2 vowels1] ++ swapPairs rest
Nothing -> [word1,word2] ++ swapPairs rest
swapPairs rest = rest
extractVowels :: String -> Maybe (String, String -> String)
extractVowels s = do
let isVowel l = l `elem` "aeiouy"
(a,b) <- Just $ break isVowel s
(w@(_:_),r) <- Just $ span isVowel b
return (w, \n -> a ++ n ++ r)