Menu Close

Caracteres en la misma posición que en el alfabeto

Un carácter c de una cadena cs está bien colocado si la posición de c en cs es la misma que en el abecedario (sin distinguir entre mayúsculas y minúsculas). Por ejemplo, los elementos bien colocados de la cadena “aBaCEria” son ‘a’, ‘B’ y ‘E’.

Definir la función

   nBienColocados :: String -> Int

tal que (nBienColocados cs) es el número de elementos bien colocados de la cadena cs. Por ejemplo,

   nBienColocados "aBaCEria"                    ==  3
   nBienColocados "xBxxExxxIxxxxNxxxxxTxxxXYZ"  ==  8

Soluciones

import Data.Char (toLower)
 
nBienColocados :: String -> Int
nBienColocados = length . bienColocados
 
bienColocados :: String -> [Char]
bienColocados cs =
  [c | (c,d) <- zip (map toLower cs) ['a'..'z']
     , c == d]

Referencias

Basado en el problema Count characters at same position as in English alphabets de Sahil Chhabra en GeeksforGeeks.

5 soluciones de “Caracteres en la misma posición que en el alfabeto

  1. albcercid
    import Data.Char (toLower)
     
    nBienColocados :: String -> Int
    nBienColocados cs = auxB 0 ['a'..'z'] (map toLower cs)
      where auxB v [] _ = v
            auxB v _ [] = v
            auxB v (x:xs) (y:ys) | x == y    = auxB (1+v) xs ys
                                 | otherwise = auxB v     xs ys
  2. enrnarbej
    import Data.Char (toLower)
     
    nBienColocados :: String -> Int
    nBienColocados =
      length . filter (uncurry (==)) . zip ['a'..'z'] . map toLower
  3. cescarde
    import Data.Char (toLower)
     
    nBienColocados :: String -> Int
    nBienColocados xs =
      length [(x,y) | (x,y) <- zip (minusculas xs) [1..]
                    , elem (x,y) abecedario]
     
    -- donde
    minusculas :: String -> String
    minusculas []     = [] 
    minusculas (x:xs) = toLower x : minusculas xs
     
    abecedario :: [(Char,Int)]
    abecedario = zip ['a'..'z'] [1..26]
  4. Juanjo Ortega (juaorture)
     
    nBienColocados :: String -> Int
    nBienColocados cs = length [a | a <- zip cs [0..]
                                  , a `elem` abecedario]
     
    abecedario :: [(Char,Int)]
    abecedario = (zip ['A'..'Z'] [0..]) ++ (zip ['a'..'z'] [0..])
  5. josejuan
    nBienColocados = sum . map fromEnum . zipWith (==) ['a'..] . map toLower

Escribe tu solución

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