Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Data.Char (chr)
  2.  
  3. generate' _ 0 _ _ _ _ = Nothing
  4. generate' goal generations_left generation 0 _ _ =
  5.     generate' goal (generations_left - 1) (generation + 1) (generation + 1) 0 [0]
  6. generate' goal generations_left generation left aggregate (x:xs)
  7.     | value == goal = Just (reverse (map (chr . fromInteger . (+ 97)) (x:xs)))
  8.     | value > goal  = next_generate (left - 1) next_aggregate (0:(x - 1):xs)
  9.     | x == 25       = next_generate (left - 1) (next_aggregate + 1) (0:x:xs)
  10.     | otherwise     = next_generate left aggregate ((x + 1):xs)
  11.     where next_generate = generate' goal generations_left generation
  12.          next_aggregate = aggregate * 17 + x
  13.          padded_value 0       v = v
  14.          padded_value padding v = padded_value (padding - 1) (v * 17 + 1)
  15.          value = padded_value (left - 1) (next_aggregate + 1)
  16.  
  17. generate max_length = generate' 248410397744610 max_length 1 1 0 [0]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement