Skip to main content
We’ve updated our Terms of Service. A new AI Addendum clarifies how Stack Overflow utilizes AI interactions.
Code Golf

Return to Answer

added 52 characters in body
Source Link
bartavelle
  • 1.3k
  • 8
  • 9

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

Try it online! Try it online!

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

Try it online!

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)

Try it online!

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)
added 15 characters in body
Source Link
bartavelle
  • 1.3k
  • 8
  • 9

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

Try it online! Try it online!

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

Try it online!

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

Try it online!

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)
Source Link
bartavelle
  • 1.3k
  • 8
  • 9

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

Try it online!

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)

AltStyle によって変換されたページ (->オリジナル) /