fork download
  1. import Data.Char
  2.  
  3. type Bukva = [Char]
  4. type Bukvi = [Bukva]
  5. type Stroka = [Char]
  6. type Cifra = Char
  7. type Cifri = [Cifra]
  8.  
  9. hitriyPerevorot :: Stroka -> Stroka
  10. hitriyPerevorot stroka = zapolnitPropuski spisokBukvSPropuskamiVmestoCifr perevernutieCifri where
  11. zapolnitPropuski :: Bukvi -> Cifri -> Stroka
  12. zapolnitPropuski bukvi "" = concat bukvi
  13. zapolnitPropuski ("" : bukvi) (cifra : cifri) = cifra : zapolnitPropuski bukvi cifri
  14. zapolnitPropuski (bukva : bukvi) cifri = bukva ++ zapolnitPropuski bukvi cifri
  15. zapolnitPropuski [] cifri = error $ "Takogo ne mojet byt'! Lishnie cifri: " ++ cifri
  16. perevernutieCifri :: Cifri
  17. perevernutieCifri = reverse $ filter isDigit stroka
  18. spisokBukvSPropuskamiVmestoCifr :: Bukvi
  19. spisokBukvSPropuskamiVmestoCifr = map (\x -> if isDigit x then [] else [x]) stroka
  20.  
  21. main = do
  22. let str = "1аб2в345г6де78"
  23. putStrLn $ hitriyPerevorot str
Success #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
1аб2в345г6де78
8аб7в654г3де21