División de cadenas
Definir la función
1 |
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,
1 2 3 |
division "pandemia" == ["pa","nd","em","ia"] division "covid2019" == ["co","vi","d2","01","9_"] division "covid 2019" == ["co","vi","d ","20","19"] |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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.»