Anagrams/Deranged anagrams: Difference between revisions

→‎{{header|Haskell}}: Added a variant
m (BaCon and BBC BASIC moved to the BASIC section.)
(→‎{{header|Haskell}}: Added a variant)
Line 2,904:
{{out}}
<pre>Longest deranged anagrams: excitation and intoxicate</pre>
 
and a variant:
<syntaxhighlight lang="haskell">import Control.Monad ((<=<))
import Data.Function (on)
import Data.List (find, groupBy, sort, sortOn)
import Data.Ord (Down (Down))
 
-------------------- DERANGED ANAGRAMS -------------------
 
longestDeranged :: [String] -> String
longestDeranged xs =
case find deranged (longestAnagramPairs xs) of
Nothing -> "No deranged anagrams found."
Just (a, b) -> a <> " -> " <> b
 
deranged :: (String, String) -> Bool
deranged (a, b) = and (zipWith (/=) a b)
 
longestAnagramPairs :: [String] -> [(String, String)]
longestAnagramPairs = ((<*>) =<< fmap (,)) <=<
(sortOn (Down . length . head) . anagramGroups)
 
anagramGroups :: [String] -> [[String]]
anagramGroups xs =
groupBy
(on (==) fst)
(sortOn fst (((,) =<< sort) <$> xs))
>>= (\g -> [snd <$> g | 1 < length g])
 
 
--------------------------- TEST -------------------------
main :: IO ()
main =
readFile "unixdict.txt"
>>= (putStrLn . longestDeranged . lines)</syntaxhighlight>
{{Out}}
<pre>excitation -> intoxicate</pre>
 
=={{header|Icon}} and {{header|Unicon}}==
9,655

edits