ONLY DO WHAT ONLY YOU CAN DO

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

F# で Project Euler Problem 4 その2

昨日の続き
Scala のロジックを そのまま移植しようとしたが、F# には flatten が見当たらないので
ごにょごにょしてみる...

> [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.map(fun ls ->
-    ls |> List.map(fun (x, y) -> x * y))
- ;;
val it : int list list =
  [[1; 2; 3; 4; 5; 6; 7; 8; 9]; [4; 6; 8; 10; 12; 14; 16; 18];
   [9; 12; 15; 18; 21; 24; 27]; [16; 20; 24; 28; 32; 36]; [25; 30; 35; 40; 45];
   [36; 42; 48; 54]; [49; 56; 63]; [64; 72]; [81]]
> [1..9]
- |> List.map(fun i ->
-     [i..9] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 3 = 0 || y % 3 = 0) then x * y else 0)
-    |> List.map(fun n -> n.ToString ""))
- ;;
val it : string list list =
  [["0"; "0"; "3"; "0"; "0"; "6"; "0"; "0"; "9"];
   ["0"; "6"; "0"; "0"; "12"; "0"; "0"; "18"];
   ["9"; "12"; "15"; "18"; "21"; "24"; "27"]; ["0"; "0"; "24"; "0"; "0"; "36"];
   ["0"; "30"; "0"; "0"; "45"]; ["36"; "42"; "48"; "54"]; ["0"; "0"; "63"];
   ["0"; "72"]; ["81"]]
> [1..9]
- |> List.map(fun i ->
-     [i..9] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 3 = 0 || y % 3 = 0) then x * y else 0)
-    |> List.map(fun n -> n.ToString().ToCharArray() ))
- ;;
val it : char [] list list =
  [[[|'0'|]; [|'0'|]; [|'3'|]; [|'0'|]; [|'0'|]; [|'6'|]; [|'0'|]; [|'0'|];
    [|'9'|]];
   [[|'0'|]; [|'6'|]; [|'0'|]; [|'0'|]; [|'1'; '2'|]; [|'0'|]; [|'0'|];
    [|'1'; '8'|]];
   [[|'9'|]; [|'1'; '2'|]; [|'1'; '5'|]; [|'1'; '8'|]; [|'2'; '1'|];
    [|'2'; '4'|]; [|'2'; '7'|]];
   [[|'0'|]; [|'0'|]; [|'2'; '4'|]; [|'0'|]; [|'0'|]; [|'3'; '6'|]];
   [[|'0'|]; [|'3'; '0'|]; [|'0'|]; [|'0'|]; [|'4'; '5'|]];
   [[|'3'; '6'|]; [|'4'; '2'|]; [|'4'; '8'|]; [|'5'; '4'|]];
   [[|'0'|]; [|'0'|]; [|'6'; '3'|]]; [[|'0'|]; [|'7'; '2'|]]; [[|'8'; '1'|]]]
> [1..9]
- |> List.map(fun i ->
-     [i..9] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 3 = 0 || y % 3 = 0) then x * y else 0)
-    |> List.map(fun n -> Array.rev(n.ToString().ToCharArray()) ))
- ;;
val it : char [] list list =
  [[[|'0'|]; [|'0'|]; [|'3'|]; [|'0'|]; [|'0'|]; [|'6'|]; [|'0'|]; [|'0'|];
    [|'9'|]];
   [[|'0'|]; [|'6'|]; [|'0'|]; [|'0'|]; [|'2'; '1'|]; [|'0'|]; [|'0'|];
    [|'8'; '1'|]];
   [[|'9'|]; [|'2'; '1'|]; [|'5'; '1'|]; [|'8'; '1'|]; [|'1'; '2'|];
    [|'4'; '2'|]; [|'7'; '2'|]];
   [[|'0'|]; [|'0'|]; [|'4'; '2'|]; [|'0'|]; [|'0'|]; [|'6'; '3'|]];
   [[|'0'|]; [|'0'; '3'|]; [|'0'|]; [|'0'|]; [|'5'; '4'|]];
   [[|'6'; '3'|]; [|'2'; '4'|]; [|'8'; '4'|]; [|'4'; '5'|]];
   [[|'0'|]; [|'0'|]; [|'3'; '6'|]]; [[|'0'|]; [|'2'; '7'|]]; [[|'1'; '8'|]]]
> [1..9]
- |> List.map(fun i ->
-     [i..9] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 3 = 0 || y % 3 = 0) then x * y else 0)
-    |> List.map(fun n -> if Array.rev(n.ToString().ToCharArray()) = n.ToString().ToCharArray() then n else 0))
- ;;
val it : int list list =
  [[0; 0; 3; 0; 0; 6; 0; 0; 9]; [0; 6; 0; 0; 0; 0; 0; 0];
   [9; 0; 0; 0; 0; 0; 0]; [0; 0; 0; 0; 0; 0]; [0; 0; 0; 0; 0]; [0; 0; 0; 0];
   [0; 0; 0]; [0; 0]; [0]]
> [1..9]
- |> List.map(fun i ->
-     [i..9] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 3 = 0 || y % 3 = 0) then x * y else 0)
-    |> List.map(fun n -> if Array.rev(n.ToString().ToCharArray()) = n.ToString().ToCharArray() then n else 0)
-    |> List.max)
- ;;
val it : int list = [9; 6; 9; 0; 0; 0; 0; 0; 0]
> [1..9]
- |> List.map(fun i ->
-     [i..9] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 3 = 0 || y % 3 = 0) then x * y else 0)
-    |> List.map(fun n -> if Array.rev(n.ToString().ToCharArray()) = n.ToString().ToCharArray() then n else 0)
-    |> List.max)
- |> List.max
- ;;
val it : int = 9
> [10..99]
- |> List.map(fun i ->
-     [i..99] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 11 = 0 || y % 11 = 0) then x * y else 0)
-    |> List.map(fun n -> if Array.rev(n.ToString().ToCharArray()) = n.ToString().ToCharArray() then n else 0)
-    |> List.max)
- |> List.max
- ;;
val it : int = 9009
> [100..999]
- |> List.map(fun i ->
-     [i..999] |> List.map(fun j -> (i, j))
- )
- |> List.map(fun ls ->
-    ls |> List.map(fun (x, y) -> if (x % 11 = 0 || y % 11 = 0) then x * y else 0)
-    |> List.map(fun n -> if Array.rev(n.ToString().ToCharArray()) = n.ToString().ToCharArray() then n else 0)
-    |> List.max)
- |> List.max
- ;;
val it : int = 906609
>