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 . (++ "__")