John Davidson

Problem with Largest Product in a Grid Algorithm PHP

0 comments
Message:


I have tried to complete Euler project problem 11 but somehow I got a product that was actually above the right answer. I have tried to calculate the adjacent numbers through the use of a single dimensional array and nested for loops. What error in my code is making this occur?


Code:



$numbers = str_replace(" ","",$numbers);
$numbers = str_split($numbers, 2);

function removeZeros($numbers) {
for ($i = 0; $i < count($numbers); $i++) {
$firstChar = substr($numbers[$i], 0, 1);
if ($firstChar == "0") {
$numbers[$i] = substr($numbers[$i], 1, 1);
}
}
return $numbers;
}

function gridProduct($numbers) {
removeZeros($numbers);
$i = 0;
$product = 0;
$largestGrid = 0;
// across
for ($j = 0; $j < 20; $j++) {
for ($i = 0; $i < 17; $i++) {
$k = $i + ($j * 20);
$product = $numbers[$k] * $numbers[$k + 1] * $numbers[$k + 2] * $numbers[$k + 3];
if ($product > $largestGrid) {
$largestGrid = $product;
}
}
}
// vertically
for ($j = 0; $j < 20; $j++) {
for ($i = 0; $i < 17; $i++) {
$k = $j + ($i * 20);
$product = $numbers[$k] * $numbers[$k + 20] * $numbers[$k + 40] * $numbers[$k + 60];
if ($product > $largestGrid) {
$largestGrid = $product;
}
}
}
// diagonally right
for ($j = 0; $j < 17; $j++) {
for ($i = 0; $i < 17; $i++) {
$k = $i + ($j * 20);
$product = $numbers[$k] * $numbers[$k + 21] * $numbers[$k + 21] * $numbers[$k + 21];
if ($product > $largestGrid) {
$largestGrid = $product;
}
}
}
// diagonally left
for ($j = 19; $j > 4; $j--) {
for ($i = 0; $i < 17; $i++) {
$k = $i + ($j * 20);
$product = $numbers[$k] * $numbers[$k - 19] * $numbers[$k - 19] * $numbers[$k - 19];
if ($product > $largestGrid) {
$largestGrid = $product;
}
}
}
echo " ";
echo $largestGrid;
}

gridProduct($numbers);


My Answer:
" ", ",", "
" , $numbers);
$numbers = explode(",", $numbers);

$maxProduct = 0;

for ($i = 0; $i < count($numbers); $i++) {
// Check right
if ($i % 20 <= 16) {
$product = $numbers[$i] * $numbers[$i + 1] * $numbers[$i + 2] * $numbers[$i + 3];
if ($product > $maxProduct) {
$maxProduct = $product;
}
}

// Check down
if ($i <= 339) {
$product = $numbers[$i] * $numbers[$i + 20] * $numbers[$i + 40] * $numbers[$i + 60];
if ($product > $maxProduct) {
$maxProduct = $product;
}
}

// Check diagonal right
if ($i % 20 <= 16 && $i <= 339) {
$product = $numbers[$i] * $numbers[$i + 21] * $numbers[$i + 42] * $numbers[$i + 63];
if ($product > $maxProduct) {
$maxProduct = $product;
}
}

// Check diagonal left
if ($i % 20 >= 3 && $i <= 339) {
$product = $numbers[$i] * $numbers[$i + 19] * $numbers[$i + 38] * $numbers[$i + 57];
if ($product > $maxProduct) {
$maxProduct = $product;
}
}
}

echo $maxProduct;

Rate this post

4 of 5 based on 7845 votes

Comments




© 2024 Hayatsk.info - Personal Blogs Platform. All Rights Reserved.
Create blog  |  Privacy Policy  |  Terms & Conditions  |  Contact Us