let product xs0 n0 =
let g xss
= List.flatten
(List.map
(fun xs
-> List.map
(fun x
-> xs @
[x
]) xs0
) xss
) in let rec h xss n = if n == 1 then xss else h (g xss) (n - 1) in
h
(List.map
(fun x
-> [x
]) xs0
) n0
;;
let histogram is =
let count map i = if IntMap.mem i map then IntMap.find i map else 0 in
List.fold_left
(fun map i
-> IntMap
.add i
(succ (count map i
)) map
) IntMap
.empty is
;;
let sum
= List.fold_left
(+) 0;; let sum_v map = IntMap.fold (fun k v a -> a + v) map 0;;
let f9134 xs n =
let map
= histogram
(List.map sum
(product xs n
)) in IntMap
.iter
(fun k v
-> Printf.printf
"%d\t%d\t%f\n" k v
(100.0 *. float_of_int v
/. total
)) map
;;
let () = f9134 [1; 2; 3; 4; 5; 6] 3;;
bGV0IHByb2R1Y3QgeHMwIG4wID0KICBsZXQgZyB4c3MgPSBMaXN0LmZsYXR0ZW4gKExpc3QubWFwIChmdW4geHMgLT4gTGlzdC5tYXAgKGZ1biB4IC0+IHhzIEAgW3hdKSB4czApIHhzcykgaW4KICBsZXQgcmVjIGggeHNzIG4gPSBpZiBuID09IDEgdGhlbiB4c3MgZWxzZSBoIChnIHhzcykgKG4gLSAxKSBpbgogIGggKExpc3QubWFwIChmdW4geCAtPiBbeF0pIHhzMCkgbjAKOzsKbW9kdWxlIEludE1hcCA9IE1hcC5NYWtlKHN0cnVjdCB0eXBlIHQgPSBpbnQgbGV0IGNvbXBhcmUgPSBjb21wYXJlIGVuZCkKbGV0IGhpc3RvZ3JhbSBpcyA9CiAgbGV0IGNvdW50IG1hcCBpID0gaWYgSW50TWFwLm1lbSBpIG1hcCB0aGVuIEludE1hcC5maW5kIGkgbWFwIGVsc2UgMCBpbgogIExpc3QuZm9sZF9sZWZ0IChmdW4gbWFwIGkgLT4gSW50TWFwLmFkZCBpIChzdWNjIChjb3VudCBtYXAgaSkpIG1hcCkgSW50TWFwLmVtcHR5IGlzCjs7CmxldCBzdW0gPSBMaXN0LmZvbGRfbGVmdCAoKykgMDs7CmxldCBzdW1fdiBtYXAgPSBJbnRNYXAuZm9sZCAoZnVuIGsgdiBhIC0+IGEgKyB2KSBtYXAgMDs7CmxldCBmOTEzNCB4cyBuID0gCiAgbGV0IG1hcCA9IGhpc3RvZ3JhbSAoTGlzdC5tYXAgc3VtIChwcm9kdWN0IHhzIG4pKSBpbgogIGxldCB0b3RhbCA9IGZsb2F0X29mX2ludCAoc3VtX3YgbWFwKSBpbgogIHByaW50X3N0cmluZyAi5Ye655uuXHTlh7rnj77lm57mlbBcdOWHuuePvueOh1xuIjsKICBJbnRNYXAuaXRlciAoZnVuIGsgdiAtPiBQcmludGYucHJpbnRmICIlZFx0JWRcdCVmXG4iIGsgdiAoMTAwLjAgKi4gZmxvYXRfb2ZfaW50IHYgLy4gdG90YWwpKSBtYXAKOzsKbGV0ICgpID0gZjkxMzQgWzE7IDI7IDM7IDQ7IDU7IDZdIDM7Owo=