Ir al contenido principal

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