fork(1) download
  1. import Data.List
  2.  
  3. zagadka :: (Integral a) => a -> Maybe a
  4. zagadka n = if n < 10 then return n else solve n 9
  5. where divides k x = x`mod`k == 0
  6. solve m 1 = if m == 1 then return 0 else Nothing
  7. solve m k = do
  8. let (xs, m2:_) = span (k`divides`) (iterate (`div`k) m)
  9. acc <- solve m2 (k-1)
  10. return (foldl (\acc _ -> 10*acc + k) acc xs)
  11.  
  12. main = interact (concatMap (message . zagadka . read) . words)
  13. where message (Just x) = show x ++ "\n"
  14. message Nothing = "Rozwiazanie nie istnieje\n"
  15.  
Success #stdin #stdout 0s 6348KB
stdin
1
2
9
10
11
72
653318623500070906096690267158057820537143710472954871543071966369497141477376
stdout
1
2
9
25
Rozwiazanie nie istnieje
89
288888888888888888888888888888888899999999999999999999999999999999999999999999999999