ONLY DO WHAT ONLY YOU CAN DO

こけたら立ちなはれ 立ったら歩きなはれ

F# で Project Euler Problem 9

> [1..9]
- ;;
val it : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9]
> [1..9]
- |> List.map(fun i -> [i..9])
- ;;
val it : int list list =
  [[1; 2; 3; 4; 5; 6; 7; 8; 9]; [2; 3; 4; 5; 6; 7; 8; 9];
   [3; 4; 5; 6; 7; 8; 9]; [4; 5; 6; 7; 8; 9]; [5; 6; 7; 8; 9]; [6; 7; 8; 9];
   [7; 8; 9]; [8; 9]; [9]]
> [1..9]
- |> List.map(fun i -> [i..9] |> List.map(fun j -> (i, j)))
- ;;
val it : (int * int) list list =
  [[(1, 1); (1, 2); (1, 3); (1, 4); (1, 5); (1, 6); (1, 7); (1, 8); (1, 9)];
   [(2, 2); (2, 3); (2, 4); (2, 5); (2, 6); (2, 7); (2, 8); (2, 9)];
   [(3, 3); (3, 4); (3, 5); (3, 6); (3, 7); (3, 8); (3, 9)];
   [(4, 4); (4, 5); (4, 6); (4, 7); (4, 8); (4, 9)];
   [(5, 5); (5, 6); (5, 7); (5, 8); (5, 9)]; [(6, 6); (6, 7); (6, 8); (6, 9)];
   [(7, 7); (7, 8); (7, 9)]; [(8, 8); (8, 9)]; [(9, 9)]]
> [1..9]
- |> List.map(fun i -> [i..9] |> List.map(fun j -> (i, j)))
- |> List.collect id
- ;;
val it : (int * int) list =
  [(1, 1); (1, 2); (1, 3); (1, 4); (1, 5); (1, 6); (1, 7); (1, 8); (1, 9);
   (2, 2); (2, 3); (2, 4); (2, 5); (2, 6); (2, 7); (2, 8); (2, 9); (3, 3);
   (3, 4); (3, 5); (3, 6); (3, 7); (3, 8); (3, 9); (4, 4); (4, 5); (4, 6);
   (4, 7); (4, 8); (4, 9); (5, 5); (5, 6); (5, 7); (5, 8); (5, 9); (6, 6);
   (6, 7); (6, 8); (6, 9); (7, 7); (7, 8); (7, 9); (8, 8); (8, 9); (9, 9)]
> [1..9]
- |> List.map(fun i -> [i..9] |> List.map(fun j -> (i, j)))
- |> List.collect id
- |> List.filter(fun (a, b) -> a % 3 = 0 || b % 3 = 0)
- ;;
val it : (int * int) list =
  [(1, 3); (1, 6); (1, 9); (2, 3); (2, 6); (2, 9); (3, 3); (3, 4); (3, 5);
   (3, 6); (3, 7); (3, 8); (3, 9); (4, 6); (4, 9); (5, 6); (5, 9); (6, 6);
   (6, 7); (6, 8); (6, 9); (7, 9); (8, 9); (9, 9)]
> [1..499]
- |> List.map(fun a -> [a+1..600] |> List.map(fun b -> (a, b)))
- |> List.collect id
- |> List.filter(fun (a, b) -> 1000 * (a + b) - (a * b) = 500000)
- ;;
val it : (int * int) list = [(200, 375)]
> [1..499]
- |> List.map(fun a -> [a+1..600] |> List.map(fun b -> (a, b)))
- |> List.collect id
- |> List.filter(fun (a, b) -> 1000 * (a + b) - (a * b) = 500000)
- |> List.collect(fun (a, b) -> [a; b; 1000 - (a + b)])
- ;;
val it : int list = [200; 375; 425]
> [1..499]
- |> List.map(fun a -> [a+1..600] |> List.map(fun b -> (a, b)))
- |> List.collect id
- |> List.filter(fun (a, b) -> 1000 * (a + b) - (a * b) = 500000)
- |> List.collect(fun (a, b) -> [a; b; 1000 - (a + b)])
- |> List.reduce(*)
- ;;
val it : int = 31875000