fork download
  1. let chain n =
  2. let rec aux a = function
  3. | n when n <= 1 -> n::a
  4. | n when n mod 2 <> 0 -> aux (n :: a) (n * 3 + 1)
  5. | n -> aux (n :: a) (n / 2) in
  6. List.rev (aux [] n)
  7. let p list =
  8. let to_s list =
  9. "[" ^ String.concat ", " (List.map string_of_int list) ^ "]" in
  10. let range a b =
  11. let rec aux a b acc =
  12. if b < a then acc else aux a (b - 1) (b :: acc) in
  13. aux a b []
  14. let f884 a b c =
  15. List.length (List.filter (fun n -> c <= (List.length (chain n))) (range a b))
  16. let () = p (chain 10)
  17. let () = p (chain 30)
  18. let () = print_int (f884 1 100 15)
  19.  
Success #stdin #stdout 0s 15904KB
stdin
Standard input is empty
stdout
[10, 5, 16, 8, 4, 2, 1]
[30, 15, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
71