Menu Close

Posiciones de las mayúsculas

Definir la función

   posicionesMayusculas :: String -> [Int]

tal que (posicionesMayusculas cs) es la lista de las posiciones de las mayúsculas de la cadena cs. Por ejemplo,

   posicionesMayusculas "SeViLLa"  == [0,2,4,5]
   posicionesMayusculas "aAbB"     == [1,3]
   posicionesMayusculas "ABCDEF"   == [0,1,2,3,4,5]
   posicionesMayusculas "4ysdf4"   == []
   posicionesMayusculas ""         == []

Soluciones

import Data.Char (isUpper)
import Data.List (findIndices)
 
-- 1ª solución
posicionesMayusculas :: String -> [Int]
posicionesMayusculas xs = [n | (n,x) <- zip [0..] xs, isUpper x] 
 
-- 2ª solución
posicionesMayusculas2 :: String -> [Int]
posicionesMayusculas2 = aux 0 []
  where aux n ns [] = reverse ns
        aux n ns (y:ys) | isUpper y = aux (n+1) (n:ns) ys
                        | otherwise = aux (n+1)    ns  ys
 
-- 3ª solución
posicionesMayusculas3 :: String -> [Int]
posicionesMayusculas3 = findIndices isUpper

4 soluciones de “Posiciones de las mayúsculas

  1. angruicam1
    import Data.List (findIndices)
    Import Data.Char (isUpper)
     
    posicionesMayusculas :: String -> [Int]
    posicionesMayusculas = findIndices isUpper
  2. alerodrod5
    import Data.Char (isUpper)
     
    posicionesMayusculas :: String -> [Int]
    posicionesMayusculas xs = [y | (x,y) <- zip xs [0..], isUpper x]
  3. antnavoro
    import Data.Char (isUpper)
     
    posicionesMayusculas :: String -> [Int]
    posicionesMayusculas = aux 0
      where aux n (x:xs) | isUpper x = n : aux (succ n) xs
                         | otherwise = aux (succ n) xs
            aux _ _ = []
  4. canongoo72
    import Data.Char (isUpper)
     
    posicionesMayusculas :: String -> [Int]
    posicionesMayusculas = r [] 0
      where r ys i xs
              | null xs             = ys
              | (isUpper . head) xs = r (ys ++ [i]) (succ i) (tail xs)
              | otherwise           = r ys (succ i) (tail xs)

Leave a Reply

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