home > Project Euler >

ForNext

Shut the fuck up and write some code

Problem 11

格子内の最大の積

上の の格子のうち, 対角線に沿って4つの数字が赤くマークされている.
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つの数字の積のうち最大のものはいくつか?

Largest product in a grid

In the grid below, four numbers along a diagonal line have been marked in red.
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
The product of these numbers is .

What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the grid?

VBScript

JScript

Perl

PHP

Python

Ruby

PowerShell

Scala

更新日 : 2013.01.24

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

scala> var 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
     | """
str: java.lang.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...
scala> str = str.replaceAll("\n", " ")
str: java.lang.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 5...
scala> var lst = str.split(" ").toList
lst: List[java.lang.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, 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...
scala> var lst = str.trim().split(" ").toList
lst: List[java.lang.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, 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...

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

scala> for (i <- 0 to 19 ) yield {
     |     for (j <- 0 to 19 ) yield {
     |         lst(i * 20 + j)
     |     }
     | }
res19: scala.collection.immutable.IndexedSeq[scala.collection.immutable.IndexedSeq[java.lang.String]] = Vector(Vector(08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08), Vector(49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00), Vector(81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65), Vector(52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91), Vector(22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80), Vector(24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50), Vector(32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70), Vector(67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91,...
scala> var ls3 =
     | for (i <- 0 to 19 ) yield {
     |     for (j <- 0 to 19 ) yield {
     |         lst(i * 20 + j)
     |     }
     | }
ls3: scala.collection.immutable.IndexedSeq[scala.collection.immutable.IndexedSeq[java.lang.String]] = Vector(Vector(08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08), Vector(49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00), Vector(81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65), Vector(52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91), Vector(22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80), Vector(24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50), Vector(32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70), Vector(67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91, 6...
scala> var ls3 =
     | for (i <- 0 to 19 ) yield {
     |     for (j <- 0 to 19 ) yield {
     |         lst(i * 20 + j)
     |     }.toList
     | }.toList
ls3: scala.collection.immutable.IndexedSeq[List[List[Char]]] = Vector(List(List(0, 8), List(0, 2), List(2, 2), List(9, 7), List(3, 8), List(1, 5), List(0, 0), List(4, 0), List(0, 0), List(7, 5), List(0, 4), List(0, 5), List(0, 7), List(7, 8), List(5, 2), List(1, 2), List(5, 0), List(7, 7), List(9, 1), List(0, 8)), List(List(4, 9), List(4, 9), List(9, 9), List(4, 0), List(1, 7), List(8, 1), List(1, 8), List(5, 7), List(6, 0), List(8, 7), List(1, 7), List(4, 0), List(9, 8), List(4, 3), List(6, 9), List(4, 8), List(0, 4), List(5, 6), List(6, 2), List(0, 0)), List(List(8, 1), List(4, 9), List(3, 1), List(7, 3), List(5, 5), List(7, 9), List(1, 4), List(2, 9), List(9, 3), List(7, 1), List(4, 0), List(6, 7), List(5, 3), List(8, 8), List(3, 0), List(0, 3), List(4, 9), List(1, 3), List(3, 6), Li...
scala> var ls3 =
     | for (i <- 0 to 19 ) yield {
     |     for (j <- 0 to 19 ) yield {
     |         lst(i * 20 + j)
     |     }
     | }.toList.toList
ls3: scala.collection.immutable.IndexedSeq[List[java.lang.String]] = Vector(List(08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08), List(49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00), List(81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65), List(52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91), List(22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80), List(24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50), List(32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70), List(67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91, 66, 49, 94, 21), List(24, 55, 58, 05, 66, 73, 99, ...
scala> var ls3 = (
     | for (i <- 0 to 19 ) yield {
     |     for (j <- 0 to 19 ) yield {
     |         lst(i * 20 + j)
     |     }
     | }.toList).toList
ls3: List[List[java.lang.String]] = List(List(08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08), List(49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00), List(81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65), List(52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91), List(22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80), List(24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50), List(32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70), List(67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91, 66, 49, 94, 21), List(24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88,...

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

scala> var ls4:List[List[Int]] = Nil
ls4: List[List[Int]] = List()

scala> for (y <- 0 to 19) {
     |     for (x <- 0 to 16) {
     |         val ls:List[Int] =
     |         (for (i <- 0 to 3) yield {
     |             ls3(y)(x + i).toInt
     |         }).toList
     |         ls4 = ls::ls4
     |     }
     | }

scala> ls4
res37: List[List[Int]] = List(List(89, 19, 67, 48), List(1, 89, 19, 67), List(52, 1, 89, 19), List(43, 52, 1, 89), List(61, 43, 52, 1), List(48, 61, 43, 52), List(33, 48, 61, 43), List(92, 33, 48, 61), List(16, 92, 33, 48), List(69, 16, 92, 33), List(54, 69, 16, 92), List(51, 54, 69, 16), List(83, 51, 54, 69), List(71, 83, 51, 54), List(54, 71, 83, 51), List(70, 54, 71, 83), List(1, 70, 54, 71), List(23, 57, 5, 54), List(16, 23, 57, 5), List(81, 16, 23, 57), List(86, 81, 16, 23), List(48, 86, 81, 16), List(71, 48, 86, 81), List(49, 71, 48, 86), List(31, 49, 71, 48), List(74, 31, 49, 71), List(1, 74, 31, 49), List(90, 1, 74, 31), List(31, 90, 1, 74), List(78, 31, 90, 1), List(29, 78, 31, 90), List(35, 29, 78, 31), List(73, 35, 29, 78), List(20, 73, 35, 29), List(74, 4, 36, 16), List(85, ...

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

scala> var ls4:List[Int] = Nil
ls4: List[Int] = List()

scala> for (y <- 0 to 19) {
     |     for (x <- 0 to 16) {
     |         val ls:List[Int] =
     |         (for (i <- 0 to 3) yield {
     |             ls3(y)(x + i).toInt
     |         }).toList
     |         ls4 = ls.product::ls4
     |     }
     | }

scala> ls4
res39: List[Int] = List(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, ...

scala> ls4.max
res40: Int = 48477312

scala> for (y <- 0 to 16) {
     |     for (x <- 0 to 19) {
     |         val ls:List[Int] =
     |         (for (i <- 0 to 3) yield {
     |             ls3(y + i)(x).toInt
     |         }).toList
     |         ls4 = ls.product::ls4
     |     }
     | }

scala> ls4.max
res42: Int = 51267216

右下

scala> for (y <- 0 to 16) {
     |     for (x <- 0 to 16) {
     |         val ls:List[Int] =
     |         (for (i <- 0 to 3) yield {
     |             ls3(y + i)(x + i).toInt
     |         }).toList
     |         ls4 = ls.product::ls4
     |     }
     | }

scala> ls4.max
res44: Int = 51267216

左下

scala> for (y <- 0 to 16) {
     |     for (x <- 3 to 19) {
     |         val ls:List[Int] =
     |         (for (i <- 0 to 3) yield {
     |             ls3(y + i)(x - i).toInt
     |         }).toList
     |         ls4 = ls.product::ls4
     |     }
     | }

scala> ls4.max
res48: Int = 70600674

まとめ

scala> var 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
     | """
str: java.lang.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...
scala>

scala> str = str.replaceAll("\n", " ")
str: java.lang.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 5...
scala>

scala> var ls1 = str.trim().split(" ").toList
ls1: List[java.lang.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, 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...
scala>

scala> var ls3 = (
     | for (i <- 0 to 19 ) yield {
     |     for (j <- 0 to 19 ) yield {
     |         ls1(i * 20 + j)
     |     }
     | }.toList).toList
ls3: List[List[java.lang.String]] = List(List(08, 02, 22, 97, 38, 15, 00, 40, 00, 75, 04, 05, 07, 78, 52, 12, 50, 77, 91, 08), List(49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 04, 56, 62, 00), List(81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 03, 49, 13, 36, 65), List(52, 70, 95, 23, 04, 60, 11, 42, 69, 24, 68, 56, 01, 32, 56, 71, 37, 02, 36, 91), List(22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80), List(24, 47, 32, 60, 99, 03, 45, 02, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50), List(32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70), List(67, 26, 20, 68, 02, 62, 12, 20, 95, 63, 94, 39, 63, 08, 40, 91, 66, 49, 94, 21), List(24, 55, 58, 05, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88,...
scala>

scala> var ls4:List[Int] = Nil
ls4: List[Int] = List()

scala>

scala> for (y <- 0 to 19; x <- 0 to 16) {
     |     ls4 = (for (i <- 0 to 3) yield {ls3(y)(x + i).toInt}).toList.product::ls4
     | }

scala>

scala> for (y <- 0 to 16; x <- 0 to 19) {
     |     ls4 = (for (i <- 0 to 3) yield {ls3(y + i)(x).toInt}).toList.product::ls4
     | }

scala>

scala> for (y <- 0 to 16; x <- 0 to 16) {
     |     ls4 = (for (i <- 0 to 3) yield {ls3(y + i)(x + i).toInt}).toList.product::ls4
     | }

scala>

scala> for (y <- 0 to 16; x <- 3 to 19) {
     |     ls4 = (for (i <- 0 to 3) yield {ls3(y + i)(x - i).toInt}).toList.product::ls4
     | }

scala>

scala> ls4.max
res7: Int = 70600674

F#

更新日 : 2013.01.25

まづ、格子状の文字列を 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

C

C++

C++Builder

VC++

C#

Java

Objective-C

D

VB

VB.NET

Delphi

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system