Menu Close

Máximo número de consecutivos iguales al dado

Definir la función

   maximoConsecutivosIguales :: Eq a => a -> [a] -> Int

tal que (maximoConsecutivosIguales x xs) es el mayor número de elementos consecutivos en xs iguales a x. Por ejemplo,

   maximoConsecutivosIguales 'b' "abbcccbbbd"    ==  3
   maximoConsecutivosIguales 'b' "abbbbcccbbbd"  ==  4
   maximoConsecutivosIguales 'e' "abbcccbbbd"    ==  0

Soluciones

import Data.List (group)
 
maximoConsecutivosIguales :: Eq a => a -> [a] -> Int
maximoConsecutivosIguales x = maximum
                            . (0:)
                            . map length
                            . filter ((== x) . head)
                            . group

Otras soluciones

  • Se pueden escribir otras soluciones en los comentarios.
  • El código se debe escribir entre una línea con <pre lang=”haskell”> y otra con </pre>

Pensamiento

“La programación de computadoras es un arte, porque aplica el conocimiento
acumulado al mundo, porque requiere habilidad e ingenio, y especialmente
porque produce belleza. Un programador que subconscientemente se ve
a sí mismo como un artista disfrutará con lo que hace y lo hará mejor.”

Donald Knuth.

4 soluciones de “Máximo número de consecutivos iguales al dado

  1. rebgongor

    No sé si es válida porque he cambiado “Eq a => a -> [a] -> Int” por “Ord a => a -> [a] -> Int”.

    import Data.List
     
    maximoConsecutivosIguales :: Ord a => a -> [a] -> Int
    maximoConsecutivosIguales x xs
      | not (elem x xs) = 0
      | elem x xs = maximum (map length (takeWhile (elem x) (dropWhile (not.elem x) (sort (group xs)))))
  2. claniecas
    import Data.List (group)
     
    maximoConsecutivosIguales :: Eq a => a -> [a] -> Int
    maximoConsecutivosIguales a xs
      | notElem a xs = 0
      | otherwise    = maximum [y | (x,y) <- zip zs ys, x == a] 
      where ps = group xs
            ys = map length ps
            zs = map head ps
  3. Carlos
    import Data.List
     
    maximoConsecutivosIguales :: Eq a => a -> [a] -> Int
    maximoConsecutivosIguales x = maximum . (0:) . map length . filter ((x==).head) . group
  4. javjimord
    import Data.List (group)
     
    maximoConsecutivosIguales :: Eq a => a -> [a] -> Int
    maximoConsecutivosIguales x xs 
       | x `notElem` xs = 0
       | otherwise      = maximum [length ys | ys <- group xs , x `elem` ys]

Leave a Reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.