Project Euler Problem #11
Greatest product of four adjacent numbers (up, down, left, right, or diagonally) in this 20x20 grid:
let grid = [|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|]
seq { for y in 0..19 do
for x in 0..19 do
let p = x + y * 20
let span dir = seq { yield List.map (fun i -> grid.[dir i]) [0..3] }
if x < 16 then yield! span (fun i -> p + i) // horizontal
if y < 16 then yield! span (fun i -> p + (i * 20)) // vertical
if x < 16 && y < 16 then
yield! span (fun i -> p + (i * 21)) // diagonal \
yield! span (fun i -> p + (i * 20) + 3 - i) // diagonal /
} |> Seq.map (List.fold (*) 1) |> Seq.max
Comments
- Anonymous
September 21, 2010
If the four consecutive numbers with the greatest product had been horizontal in one of the bottom three rows, or vertical in one of the last three columns, your solution would not have worked, as it requires the first of the four numbers to be in the upper left 16x16 grid. - Anonymous
September 22, 2010
Ah, but of course you're right Michael. Thanks for catching my bug! Fixed (in yellow)