Menu Close

Alfabeto comenzando en un carácter

Enunciado

-- Definir la función
--    alfabetoDesde :: Char -> String
-- tal que (alfabetoDesde c) es el alfabeto, en minúscula, comenzando en
-- el carácter c, si c es una letra minúscula y comenzando en 'a', en
-- caso contrario. Por ejemplo,
--    alfabetoDesde 'e'  ==  "efghijklmnopqrstuvwxyzabcd"
--    alfabetoDesde 'a'  ==  "abcdefghijklmnopqrstuvwxyz"
--    alfabetoDesde '7'  ==  "abcdefghijklmnopqrstuvwxyz"
--    alfabetoDesde '{'  ==  "abcdefghijklmnopqrstuvwxyz"
--    alfabetoDesde 'B'  ==  "abcdefghijklmnopqrstuvwxyz"

Soluciones

-- 1ª definición (por comprensión):
alfabetoDesde1 :: Char -> String
alfabetoDesde1 c
    | c >= 'a' && c <= 'z' = [c..'z'] ++ ['a'..pred c]
    | otherwise            = ['a'..'z']
 
-- 2ª definición (con dropWhile y takeWhile):
alfabetoDesde2 :: Char -> String
alfabetoDesde2 c =
    dropWhile (<c) ['a'..'z'] ++ takeWhile (<c) ['a'..'z']
 
-- 3ª definición (con span):
alfabetoDesde3 :: Char -> String
alfabetoDesde3 c = ys ++ xs
    where (xs,ys) = span (<c) ['a'..'z']
 
-- 4ª definición (con break):
alfabetoDesde4 :: Char -> String
alfabetoDesde4 c = ys ++ xs
    where (xs,ys) = break (==c) ['a'..'z']

4 soluciones de “Alfabeto comenzando en un carácter

  1. Luicanmar
    import Data.Char
     
    alfabetoDesde :: Char -> String
    alfabetoDesde ñ 
        | ñ `elem` ['a'..'z'] = [x | x <- ['a'..'z'], ord x >= ord ñ] ++
                                [x | x <- ['a'..'z'], ord x < ord ñ]
        | otherwise = ['a'..'z']
  2. Laura Prieto
    alfabetoDesde :: Char -> String
    alfabetoDesde c
        | c >= 'a' && c <= 'z' = [c..'z'] ++ ['a'..pred c]
        | otherwise            = ['a'..'z']
  3. Ángela González
    alfabetoDesde :: Char -> String
    alfabetoDesde c | elem c ['a'..'z'] = [c..'z'] ++ init ['a'..c]
                    | otherwise         = ['a'..'z']
  4. luiporpir
    alfabetoDesde :: Char -> String
    alfabetoDesde c 
        | elem c alfMin = dropWhile (<c) alfMin ++ takeWhile (<c) alfMin
        | otherwise     = alfMin
     
    alfMin = ['a'..'z']

Leave a Reply

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