Menu Close

División de cadenas

Definir la función

   division :: String -> [String]

tal que (division cs) es la lista de las palabras formadas por dos elementos consecutivos de cs y, en el caso de que la longitud de cs sea impar, el último elemento de la última palabra es el carácter de subrayado. Por ejemplo,

   division "pandemia"    ==  ["pa","nd","em","ia"]
   division "covid2019"   ==  ["co","vi","d2","01","9_"]
   division "covid 2019"  ==  ["co","vi","d ","20","19"]

Soluciones

import Data.List.Split
 
-- 1ª solución
division :: String -> [String]
division []       = []
division [x]      = [[x,'_']]
division (x:y:zs) = [x,y] : division zs
 
-- 2ª solución
division2 :: String -> [String]
division2 cs =
  [[ds!!i,ds!!(i+1)] | i <- [0,2.. length cs - 1]]
  where ds = cs ++ "_"
 
-- 3ª solución
division3 :: String -> [String]
division3 = takeWhile ((2 ==) . length) . chunksOf 2 . (++ "_")
 
-- 4ª solución
division4 :: String -> [String]
division4 = init . chunksOf 2 . (++ "_")

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

“Las matemáticas tienen un triple objetivo. Debe proporcionar un instrumento para el estudio de la naturaleza. Pero esto no es todo: tiene un objetivo filosófico y, me atrevo a decir, un objetivo estético.”

Henri Poincaré.

4 soluciones de “División de cadenas

  1. rebgongor
    division :: String -> [String]
    division cs
      | even (length cs) = takeWhile (/= "")
                           $ take 2 cs : division (drop 2 cs)
      | otherwise =        takeWhile (/= "")
                           $ take 2 cs : division (drop 2 (init cs))
                           ++ [[last cs] ++ ['_']]
  2. ismamocac
    division []= []
    division xs
      | length xs == 1 = [xs ++ "_"]
      | otherwise      = take 2 xs : division (drop 2 xs)
  3. juabaerui
    division :: String -> [String]
    division []       = []
    division [x]      = [[x,'_']]
    division (x:y:xs) = [x,y] : division xs
  4. Enrique Zubiría
    division :: String -> [String]
    division []       = []
    division (x:[])   = [[x] ++ "_"]
    division (x:y:ys) = [[x,y]] ++ division ys

Leave a Reply

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