Longest common substring: Difference between revisions

Content added Content deleted
(Ada version)
m (→‎{{header|Haskell}}: Applied Ormolu)
Line 968: Line 968:
Or, fusing subStrings as ''tail . inits <=< tails''
Or, fusing subStrings as ''tail . inits <=< tails''


<lang haskell>import Data.Ord (comparing)
<lang haskell>import Control.Monad ((<=<))
import Control.Monad ((<=<))
import Data.List (inits, intersect, maximumBy, tails)
import Data.List (inits, intersect, maximumBy, tails)
import Data.Ord (comparing)

----------------- LONGEST COMMON SUBSTRING ---------------


longestCommon :: Eq a => [a] -> [a] -> [a]
longestCommon :: Eq a => [a] -> [a] -> [a]
longestCommon a b =
longestCommon a b =
let pair [x, y] = (x, y)
maximumBy (comparing length) $
in maximumBy (comparing length) $
(uncurry intersect . pair) $ [tail . inits <=< tails] <*> [a, b]
(uncurry intersect . pair) $

pair :: [a] -> (a, a)
[tail . inits <=< tails] <*> [a, b]
pair [x, y] = (x, y)


--------------------------- TEST -------------------------
main :: IO ()
main :: IO ()
main =
main = putStrLn $ longestCommon "testing123testing" "thisisatest"</lang>
putStrLn $
longestCommon "testing123testing" "thisisatest"</lang>
{{Out}}
{{Out}}
<pre>test</pre>
<pre>test</pre>