ONLY DO WHAT ONLY YOU CAN DO

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

F# で Project Euler Problem 11

まづ、格子状の文字列を List に 格納する

> let str = "
- 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
- 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
- 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
- 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
- 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
- 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
- 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
- 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
- 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
- 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
- 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
- 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
- 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
- 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
- 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
- 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
- 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
- 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
- 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
- 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
- "
- ;;

val str : string =
  "
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
"+[1140 chars]
>
- str.Replace('\n', ' ')
- ;;
val it : string =
  " 08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48 "
>
- str.Replace('\n', ' ').Trim()
- ;;
val it : string =
  "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 2
0 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48"
>
- str.Replace('\n', ' ').Trim().Split(' ')
- ;;
val it : string [] =
  [|"08"; "02"; "22"; "97"; "38"; "15"; "00"; "40"; "00"; "75"; "04"; "05";
    "07"; "78"; "52"; "12"; "50"; "77"; "91"; "08"; "49"; "49"; "99"; "40";
    "17"; "81"; "18"; "57"; "60"; "87"; "17"; "40"; "98"; "43"; "69"; "48";
    "04"; "56"; "62"; "00"; "81"; "49"; "31"; "73"; "55"; "79"; "14"; "29";
    "93"; "71"; "40"; "67"; "53"; "88"; "30"; "03"; "49"; "13"; "36"; "65";
    "52"; "70"; "95"; "23"; "04"; "60"; "11"; "42"; "69"; "24"; "68"; "56";
    "01"; "32"; "56"; "71"; "37"; "02"; "36"; "91"; "22"; "31"; "16"; "71";
    "51"; "67"; "63"; "89"; "41"; "92"; "36"; "54"; "22"; "40"; "40"; "28";
    "66"; "33"; "13"; "80"; ...|]
>
- str.Replace('\n', ' ').Trim().Split(' ')
- |> Array.toList
- ;;
val it : string list =
  ["08"; "02"; "22"; "97"; "38"; "15"; "00"; "40"; "00"; "75"; "04"; "05";
   "07"; "78"; "52"; "12"; "50"; "77"; "91"; "08"; "49"; "49"; "99"; "40";
   "17"; "81"; "18"; "57"; "60"; "87"; "17"; "40"; "98"; "43"; "69"; "48";
   "04"; "56"; "62"; "00"; "81"; "49"; "31"; "73"; "55"; "79"; "14"; "29";
   "93"; "71"; "40"; "67"; "53"; "88"; "30"; "03"; "49"; "13"; "36"; "65";
   "52"; "70"; "95"; "23"; "04"; "60"; "11"; "42"; "69"; "24"; "68"; "56";
   "01"; "32"; "56"; "71"; "37"; "02"; "36"; "91"; "22"; "31"; "16"; "71";
   "51"; "67"; "63"; "89"; "41"; "92"; "36"; "54"; "22"; "40"; "40"; "28";
   "66"; "33"; "13"; "80"; ...]
>
- let ary = str.Replace('\n', ' ').Trim().Split(' ')
- ;;

val ary : string [] =
  [|"08"; "02"; "22"; "97"; "38"; "15"; "00"; "40"; "00"; "75"; "04"; "05";
    "07"; "78"; "52"; "12"; "50"; "77"; "91"; "08"; "49"; "49"; "99"; "40";
    "17"; "81"; "18"; "57"; "60"; "87"; "17"; "40"; "98"; "43"; "69"; "48";
    "04"; "56"; "62"; "00"; "81"; "49"; "31"; "73"; "55"; "79"; "14"; "29";
    "93"; "71"; "40"; "67"; "53"; "88"; "30"; "03"; "49"; "13"; "36"; "65";
    "52"; "70"; "95"; "23"; "04"; "60"; "11"; "42"; "69"; "24"; "68"; "56";
    "01"; "32"; "56"; "71"; "37"; "02"; "36"; "91"; "22"; "31"; "16"; "71";
    "51"; "67"; "63"; "89"; "41"; "92"; "36"; "54"; "22"; "40"; "40"; "28";
    "66"; "33"; "13"; "80"; ...|]

文字列の List を List の List ( 20×20 ) に 格納する

>
- [for  j in [0 .. 19] do yield ary.[j]]
- ;;
val it : string list =
  ["08"; "02"; "22"; "97"; "38"; "15"; "00"; "40"; "00"; "75"; "04"; "05";
   "07"; "78"; "52"; "12"; "50"; "77"; "91"; "08"]
>
- [for  i in [0 .. 19] do yield [for  j in [0 .. 19] do yield ary.[i * 20 + j]]]
- ;;
val it : string list list =
  [["08"; "02"; "22"; "97"; "38"; "15"; "00"; "40"; "00"; "75"; "04"; "05";
    "07"; "78"; "52"; "12"; "50"; "77"; "91"; "08"];
   ["49"; "49"; "99"; "40"; "17"; "81"; "18"; "57"; "60"; "87"; "17"; "40";
    "98"; "43"; "69"; "48"; "04"; "56"; "62"; "00"];
   ["81"; "49"; "31"; "73"; "55"; "79"; "14"; "29"; "93"; "71"; "40"; "67";
    "53"; "88"; "30"; "03"; "49"; "13"; "36"; "65"];
   ["52"; "70"; "95"; "23"; "04"; "60"; "11"; "42"; "69"; "24"; "68"; "56";
    "01"; "32"; "56"; "71"; "37"; "02"; "36"; "91"];
   ["22"; "31"; "16"; "71"; "51"; "67"; "63"; "89"; "41"; "92"; "36"; "54";
    "22"; "40"; "40"; "28"; "66"; "33"; "13"; "80"];
   ["24"; "47"; "32"; "60"; "99"; "03"; "45"; "02"; "44"; "75"; "33"; "53";
    "78"; "36"; "84"; "20"; "35"; "17"; "12"; "50"];
   ["32"; "98"; "81"; "28"; "64"; "23"; "67"; "10"; "26"; "38"; "40"; "67";
    "59"; "54"; "70"; "66"; "18"; "38"; "64"; "70"];
   ["67"; "26"; "20"; "68"; "02"; "62"; "12"; "20"; "95"; "63"; "94"; "39";
    "63"; "08"; "40"; "91"; "66"; "49"; "94"; "21"];
   ["24"; "55"; "58"; "05"; "66"; "73"; "99"; "26"; "97"; "17"; "78"; "78";
    "96"; "83"; "14"; "88"; "34"; "89"; "63"; "72"];
   ["21"; "36"; "23"; "09"; "75"; "00"; "76"; "44"; "20"; "45"; "35"; "14";
    "00"; "61"; "33"; "97"; "34"; "31"; "33"; "95"];
   ["78"; "17"; "53"; "28"; "22"; "75"; "31"; "67"; "15"; "94"; "03"; "80";
    "04"; "62"; "16"; "14"; "09"; "53"; "56"; "92"];
   ["16"; "39"; "05"; "42"; "96"; "35"; "31"; "47"; "55"; "58"; "88"; "24";
    "00"; "17"; "54"; "24"; "36"; "29"; "85"; "57"];
   ["86"; "56"; "00"; "48"; "35"; "71"; "89"; "07"; "05"; "44"; "44"; "37";
    "44"; "60"; "21"; "58"; "51"; "54"; "17"; "58"];
   ["19"; "80"; "81"; "68"; "05"; "94"; "47"; "69"; "28"; "73"; "92"; "13";
    "86"; "52"; "17"; "77"; "04"; "89"; "55"; "40"];
   ["04"; "52"; "08"; "83"; "97"; "35"; "99"; "16"; "07"; "97"; "57"; "32";
    "16"; "26"; "26"; "79"; "33"; "27"; "98"; "66"];
   ["88"; "36"; "68"; "87"; "57"; "62"; "20"; "72"; "03"; "46"; "33"; "67";
    "46"; "55"; "12"; "32"; "63"; "93"; "53"; "69"];
   ["04"; "42"; "16"; "73"; "38"; "25"; "39"; "11"; "24"; "94"; "72"; "18";
    "08"; "46"; "29"; "32"; "40"; "62"; "76"; "36"];
   ["20"; "69"; "36"; "41"; "72"; "30"; "23"; "88"; "34"; "62"; "99"; "69";
    "82"; "67"; "59"; "85"; "74"; "04"; "36"; "16"];
   ["20"; "73"; "35"; "29"; "78"; "31"; "90"; "01"; "74"; "31"; "49"; "71";
    "48"; "86"; "81"; "16"; "23"; "57"; "05"; "54"];
   ["01"; "70"; "54"; "71"; "83"; "51"; "54"; "69"; "16"; "92"; "33"; "48";
    "61"; "43"; "52"; "01"; "89"; "19"; "67"; "48"]]
>
- let ls1 = [for  i in [0 .. 19] do yield [for  j in [0 .. 19] do yield ary.[i * 20 + j]]]
- ;;

val ls1 : string list list =
  [["08"; "02"; "22"; "97"; "38"; "15"; "00"; "40"; "00"; "75"; "04"; "05";
    "07"; "78"; "52"; "12"; "50"; "77"; "91"; "08"];
   ["49"; "49"; "99"; "40"; "17"; "81"; "18"; "57"; "60"; "87"; "17"; "40";
    "98"; "43"; "69"; "48"; "04"; "56"; "62"; "00"];
   ["81"; "49"; "31"; "73"; "55"; "79"; "14"; "29"; "93"; "71"; "40"; "67";
    "53"; "88"; "30"; "03"; "49"; "13"; "36"; "65"];
   ["52"; "70"; "95"; "23"; "04"; "60"; "11"; "42"; "69"; "24"; "68"; "56";
    "01"; "32"; "56"; "71"; "37"; "02"; "36"; "91"];
   ["22"; "31"; "16"; "71"; "51"; "67"; "63"; "89"; "41"; "92"; "36"; "54";
    "22"; "40"; "40"; "28"; "66"; "33"; "13"; "80"];
   ["24"; "47"; "32"; "60"; "99"; "03"; "45"; "02"; "44"; "75"; "33"; "53";
    "78"; "36"; "84"; "20"; "35"; "17"; "12"; "50"];
   ["32"; "98"; "81"; "28"; "64"; "23"; "67"; "10"; "26"; "38"; "40"; "67";
    "59"; "54"; "70"; "66"; "18"; "38"; "64"; "70"];
   ["67"; "26"; "20"; "68"; "02"; "62"; "12"; "20"; "95"; "63"; "94"; "39";
    "63"; "08"; "40"; "91"; "66"; "49"; "94"; "21"];
   ["24"; "55"; "58"; "05"; "66"; "73"; "99"; "26"; "97"; "17"; "78"; "78";
    "96"; "83"; "14"; "88"; "34"; "89"; "63"; "72"];
   ["21"; "36"; "23"; "09"; "75"; "00"; "76"; "44"; "20"; "45"; "35"; "14";
    "00"; "61"; "33"; "97"; "34"; "31"; "33"; "95"];
   ["78"; "17"; "53"; "28"; "22"; "75"; "31"; "67"; "15"; "94"; "03"; "80";
    "04"; "62"; "16"; "14"; "09"; "53"; "56"; "92"];
   ["16"; "39"; "05"; "42"; "96"; "35"; "31"; "47"; "55"; "58"; "88"; "24";
    "00"; "17"; "54"; "24"; "36"; "29"; "85"; "57"];
   ["86"; "56"; "00"; "48"; "35"; "71"; "89"; "07"; "05"; "44"; "44"; "37";
    "44"; "60"; "21"; "58"; "51"; "54"; "17"; "58"];
   ["19"; "80"; "81"; "68"; "05"; "94"; "47"; "69"; "28"; "73"; "92"; "13";
    "86"; "52"; "17"; "77"; "04"; "89"; "55"; "40"];
   ["04"; "52"; "08"; "83"; "97"; "35"; "99"; "16"; "07"; "97"; "57"; "32";
    "16"; "26"; "26"; "79"; "33"; "27"; "98"; "66"];
   ["88"; "36"; "68"; "87"; "57"; "62"; "20"; "72"; "03"; "46"; "33"; "67";
    "46"; "55"; "12"; "32"; "63"; "93"; "53"; "69"];
   ["04"; "42"; "16"; "73"; "38"; "25"; "39"; "11"; "24"; "94"; "72"; "18";
    "08"; "46"; "29"; "32"; "40"; "62"; "76"; "36"];
   ["20"; "69"; "36"; "41"; "72"; "30"; "23"; "88"; "34"; "62"; "99"; "69";
    "82"; "67"; "59"; "85"; "74"; "04"; "36"; "16"];
   ["20"; "73"; "35"; "29"; "78"; "31"; "90"; "01"; "74"; "31"; "49"; "71";
    "48"; "86"; "81"; "16"; "23"; "57"; "05"; "54"];
   ["01"; "70"; "54"; "71"; "83"; "51"; "54"; "69"; "16"; "92"; "33"; "48";
    "61"; "43"; "52"; "01"; "89"; "19"; "67"; "48"]]

隣り合った4つの数字を1組にして、List に 格納する

>
- [for y in [0..19] do yield [for x in [0..16] do yield [for i in [0..3] do yield int ls1.[y].[x + i]]]]
- ;;
val it : int list list list =
  [[[8; 2; 22; 97]; [2; 22; 97; 38]; [22; 97; 38; 15]; [97; 38; 15; 0];
    [38; 15; 0; 40]; [15; 0; 40; 0]; [0; 40; 0; 75]; [40; 0; 75; 4];
    [0; 75; 4; 5]; [75; 4; 5; 7]; [4; 5; 7; 78]; [5; 7; 78; 52];
    [7; 78; 52; 12]; [78; 52; 12; 50]; [52; 12; 50; 77]; [12; 50; 77; 91];
    [50; 77; 91; 8]];
   [[49; 49; 99; 40]; [49; 99; 40; 17]; [99; 40; 17; 81]; [40; 17; 81; 18];
    [17; 81; 18; 57]; [81; 18; 57; 60]; [18; 57; 60; 87]; [57; 60; 87; 17];
    [60; 87; 17; 40]; [87; 17; 40; 98]; [17; 40; 98; 43]; [40; 98; 43; 69];
    [98; 43; 69; 48]; [43; 69; 48; 4]; [69; 48; 4; 56]; [48; 4; 56; 62];
    [4; 56; 62; 0]];
   [[81; 49; 31; 73]; [49; 31; 73; 55]; [31; 73; 55; 79]; [73; 55; 79; 14];
    [55; 79; 14; 29]; [79; 14; 29; 93]; [14; 29; 93; 71]; [29; 93; 71; 40];
    [93; 71; 40; 67]; [71; 40; 67; 53]; [40; 67; 53; 88]; [67; 53; 88; 30];
    [53; 88; 30; 3]; [88; 30; 3; 49]; [30; 3; 49; 13]; [3; 49; 13; 36];
    [49; 13; 36; 65]];
   [[52; 70; 95; 23]; [70; 95; 23; 4]; [95; 23; 4; 60]; [23; 4; 60; 11];
    [4; 60; 11; 42]; [60; 11; 42; 69]; [11; 42; 69; 24]; [42; 69; 24; 68];
    [69; 24; 68; 56]; [24; 68; 56; 1]; [68; 56; 1; 32]; [56; 1; 32; 56];
    [1; 32; 56; 71]; [32; 56; 71; 37]; [56; 71; 37; 2]; [71; 37; 2; 36];
    [37; 2; 36; 91]];
   [[22; 31; 16; 71]; [31; 16; 71; 51]; [16; 71; 51; 67]; [71; 51; 67; 63];
    [51; 67; 63; 89]; [67; 63; 89; 41]; [63; 89; 41; 92]; [89; 41; 92; 36];
    [41; 92; 36; 54]; [92; 36; 54; 22]; [36; 54; 22; 40]; [54; 22; 40; 40];
    [22; 40; 40; 28]; [40; 40; 28; 66]; [40; 28; 66; 33]; [28; 66; 33; 13];
    [66; 33; 13; 80]];
   [[24; 47; 32; 60]; [47; 32; 60; 99]; [32; 60; 99; 3]; [60; 99; 3; 45];
    [99; 3; 45; 2]; [3; 45; 2; 44]; [45; 2; 44; 75]; [2; 44; 75; 33];
    [44; 75; 33; 53]; [75; 33; 53; 78]; [33; 53; 78; 36]; [53; 78; 36; 84];
    [78; 36; 84; 20]; [36; 84; 20; 35]; [84; 20; 35; 17]; [20; 35; 17; 12];
    [35; 17; 12; 50]];
   [[32; 98; 81; 28]; [98; 81; 28; 64]; [81; 28; 64; 23]; [28; 64; 23; 67];
    [64; 23; 67; 10]; [23; 67; 10; 26]; [67; 10; 26; 38]; [10; 26; 38; 40];
    [26; 38; 40; 67]; [38; 40; 67; 59]; [40; 67; 59; 54]; [67; 59; 54; 70];
    [59; 54; 70; 66]; [54; 70; 66; 18]; [70; 66; 18; 38]; [66; 18; 38; 64];
    [18; 38; 64; 70]];
   [[67; 26; 20; 68]; [26; 20; 68; 2]; [20; 68; 2; 62]; [68; 2; 62; 12];
    [2; 62; 12; 20]; [62; 12; 20; 95]; [12; 20; 95; 63]; [20; 95; 63; 94];
    [95; 63; 94; 39]; [63; 94; 39; 63]; [94; 39; 63; 8]; [39; 63; 8; 40];
    [63; 8; 40; 91]; [8; 40; 91; 66]; [40; 91; 66; 49]; [91; 66; 49; 94];
    [66; 49; 94; 21]];
   [[24; 55; 58; 5]; [55; 58; 5; 66]; [58; 5; 66; 73]; [5; 66; 73; 99];
    [66; 73; 99; 26]; [73; 99; 26; 97]; [99; 26; 97; 17]; [26; 97; 17; 78];
    [97; 17; 78; 78]; [17; 78; 78; 96]; [78; 78; 96; 83]; [78; 96; 83; 14];
    [96; 83; 14; 88]; [83; 14; 88; 34]; [14; 88; 34; 89]; [88; 34; 89; 63];
    [34; 89; 63; 72]];
   [[21; 36; 23; 9]; [36; 23; 9; 75]; [23; 9; 75; 0]; [9; 75; 0; 76];
    [75; 0; 76; 44]; [0; 76; 44; 20]; [76; 44; 20; 45]; [44; 20; 45; 35];
    [20; 45; 35; 14]; [45; 35; 14; 0]; [35; 14; 0; 61]; [14; 0; 61; 33];
    [0; 61; 33; 97]; [61; 33; 97; 34]; [33; 97; 34; 31]; [97; 34; 31; 33];
    [34; 31; 33; 95]];
   [[78; 17; 53; 28]; [17; 53; 28; 22]; [53; 28; 22; 75]; [28; 22; 75; 31];
    [22; 75; 31; 67]; [75; 31; 67; 15]; [31; 67; 15; 94]; [67; 15; 94; 3];
    [15; 94; 3; 80]; [94; 3; 80; 4]; [3; 80; 4; 62]; [80; 4; 62; 16];
    [4; 62; 16; 14]; [62; 16; 14; 9]; [16; 14; 9; 53]; [14; 9; 53; 56];
    [9; 53; 56; 92]];
   [[16; 39; 5; 42]; [39; 5; 42; 96]; [5; 42; 96; 35]; [42; 96; 35; 31];
    [96; 35; 31; 47]; [35; 31; 47; 55]; [31; 47; 55; 58]; [47; 55; 58; 88];
    [55; 58; 88; 24]; [58; 88; 24; 0]; [88; 24; 0; 17]; [24; 0; 17; 54];
    [0; 17; 54; 24]; [17; 54; 24; 36]; [54; 24; 36; 29]; [24; 36; 29; 85];
    [36; 29; 85; 57]];
   [[86; 56; 0; 48]; [56; 0; 48; 35]; [0; 48; 35; 71]; [48; 35; 71; 89];
    [35; 71; 89; 7]; [71; 89; 7; 5]; [89; 7; 5; 44]; [7; 5; 44; 44];
    [5; 44; 44; 37]; [44; 44; 37; 44]; [44; 37; 44; 60]; [37; 44; 60; 21];
    [44; 60; 21; 58]; [60; 21; 58; 51]; [21; 58; 51; 54]; [58; 51; 54; 17];
    [51; 54; 17; 58]];
   [[19; 80; 81; 68]; [80; 81; 68; 5]; [81; 68; 5; 94]; [68; 5; 94; 47];
    [5; 94; 47; 69]; [94; 47; 69; 28]; [47; 69; 28; 73]; [69; 28; 73; 92];
    [28; 73; 92; 13]; [73; 92; 13; 86]; [92; 13; 86; 52]; [13; 86; 52; 17];
    [86; 52; 17; 77]; [52; 17; 77; 4]; [17; 77; 4; 89]; [77; 4; 89; 55];
    [4; 89; 55; 40]];
   [[4; 52; 8; 83]; [52; 8; 83; 97]; [8; 83; 97; 35]; [83; 97; 35; 99];
    [97; 35; 99; 16]; [35; 99; 16; 7]; [99; 16; 7; 97]; [16; 7; 97; 57];
    [7; 97; 57; 32]; [97; 57; 32; 16]; [57; 32; 16; 26]; [32; 16; 26; 26];
    [16; 26; 26; 79]; [26; 26; 79; 33]; [26; 79; 33; 27]; [79; 33; 27; 98];
    [33; 27; 98; 66]];
   [[88; 36; 68; 87]; [36; 68; 87; 57]; [68; 87; 57; 62]; [87; 57; 62; 20];
    [57; 62; 20; 72]; [62; 20; 72; 3]; [20; 72; 3; 46]; [72; 3; 46; 33];
    [3; 46; 33; 67]; [46; 33; 67; 46]; [33; 67; 46; 55]; [67; 46; 55; 12];
    [46; 55; 12; 32]; [55; 12; 32; 63]; [12; 32; 63; 93]; [32; 63; 93; 53];
    [63; 93; 53; 69]];
   [[4; 42; 16; 73]; [42; 16; 73; 38]; [16; 73; 38; 25]; [73; 38; 25; 39];
    [38; 25; 39; 11]; [25; 39; 11; 24]; [39; 11; 24; 94]; [11; 24; 94; 72];
    [24; 94; 72; 18]; [94; 72; 18; 8]; [72; 18; 8; 46]; [18; 8; 46; 29];
    [8; 46; 29; 32]; [46; 29; 32; 40]; [29; 32; 40; 62]; [32; 40; 62; 76];
    [40; 62; 76; 36]];
   [[20; 69; 36; 41]; [69; 36; 41; 72]; [36; 41; 72; 30]; [41; 72; 30; 23];
    [72; 30; 23; 88]; [30; 23; 88; 34]; [23; 88; 34; 62]; [88; 34; 62; 99];
    [34; 62; 99; 69]; [62; 99; 69; 82]; [99; 69; 82; 67]; [69; 82; 67; 59];
    [82; 67; 59; 85]; [67; 59; 85; 74]; [59; 85; 74; 4]; [85; 74; 4; 36];
    [74; 4; 36; 16]];
   [[20; 73; 35; 29]; [73; 35; 29; 78]; [35; 29; 78; 31]; [29; 78; 31; 90];
    [78; 31; 90; 1]; [31; 90; 1; 74]; [90; 1; 74; 31]; [1; 74; 31; 49];
    [74; 31; 49; 71]; [31; 49; 71; 48]; [49; 71; 48; 86]; [71; 48; 86; 81];
    [48; 86; 81; 16]; [86; 81; 16; 23]; [81; 16; 23; 57]; [16; 23; 57; 5];
    [23; 57; 5; 54]];
   [[1; 70; 54; 71]; [70; 54; 71; 83]; [54; 71; 83; 51]; [71; 83; 51; 54];
    [83; 51; 54; 69]; [51; 54; 69; 16]; [54; 69; 16; 92]; [69; 16; 92; 33];
    [16; 92; 33; 48]; [92; 33; 48; 61]; [33; 48; 61; 43]; [48; 61; 43; 52];
    [61; 43; 52; 1]; [43; 52; 1; 89]; [52; 1; 89; 19]; [1; 89; 19; 67];
    [89; 19; 67; 48]]]

隣り合った4つの数字の積を、List に 格納する (右隣)

>
- let mutable ls2:List<int32> = []
- ;;

val mutable ls2 : List<int32> = []

> for y in [0..19] do
-     for x in [0..16] do
-         ls2 <- List.reduce(*) [for i in [0..3] do yield int ls1.[y].[x + i]] :: ls2
- ;;
val it : unit = ()
> ls2
- ;;
val it : List<int32> =
  [5438256; 113297; 87932; 199004; 136396; 6547008; 4154832; 8889408; 2331648;
   3351744; 5484672; 3040416; 15772158; 16229322; 16229322; 22275540; 268380;
   353970; 104880; 1699056; 2563488; 5349888; 23740128; 14361312; 5176752;
   7980826; 112406; 206460; 206460; 217620; 6310980; 2454270; 5779410; 1481900;
   170496; 905760; 1484440; 24864370; 27552410; 22366074; 37529514; 34728804;
   14399748; 18364896; 4266592; 2064480; 4371840; 2036880; 3188160; 7332768;
   2036880; 6785280; 6031360; 2301440; 1707520; 341504; 192096; 476928; 974592;
   2923776; 1786752; 967824; 257400; 407550; 2704650; 1109600; 1864128; 196224;
   21426363; 9936864; 2249856; 1330560; 971520; 2034120; 5593830; 4678476;
   305118; 327888; 198720; 267840; 5088960; 6149160; 20907144; 12139632;
   18741888; 5762988; 6898122; 1830114; 1762332; 854464; 346112; 758784;
   2830848; 1238496; 619248; 1075536; 388080; 5377680; 27896715; 2254280; ...]
> List.max ls2
- ;;
val it : int32 = 48477312

> for y in [0..16] do
-     for x in [0..19] do
-         ls2 <- List.reduce(*) [for i in [0..3] do yield int ls1.[y + i].[x]] :: ls2
- ;;
val it : unit = ()
> List.max ls2
- ;;
val it : int32 = 51267216

右下

> for y in [0..16] do
-     for x in [0..16] do
-         ls2 <- List.reduce(*) [for i in [0..3] do yield int ls1.[y + i].[x + i]] :: ls2
- ;;
val it : unit = ()
> List.max ls2
- ;;
val it : int32 = 51267216

左下

> for y in [0..16] do
-     for x in [3..19] do
-         ls2 <- List.reduce(*) [for i in [0..3] do yield int ls1.[y + i].[x - i]] :: ls2
- ;;
val it : unit = ()
> List.max ls2
- ;;
val it : int32 = 70600674