Project Euler にチャレンジ:Problem 68 PHPでの解答

← Problem 67  
<?php

// 16桁の最大数なので、10は外枠に来る
// 最も最大の数ということなので、外枠は、6,7,8,9,10 を使えれば望ましい。
/*
   0,5,6
   1,6,7
   2,7,8
   3,8,9
   4,9,5
   合計が一致するようにする。0,1,2,3,4 は 0が一番小さい値になるように。
 */

$array1 = array();
$array2 = array(10=>10,9=>9,8=>8,7=>7,6=>6,5=>5,4=>4,3=>3,2=>2,1=>1);
calc($array1,$array2);	

function calc($array1,$array2)
{
	foreach($array2 as $v)
	{
		unset($array2[$v]);
		$array1[] = $v;

		if(count($array2) != 0)
		{
			if(count($array1) == 1)
			{
				calc($array1,$array2);
			}
			else if(count($array1) == 2 and $array1[0] < $array1[1])
			{
				calc($array1,$array2);
			}
			else if(count($array1) == 3 and $array1[0] < $array1[2])
			{
				calc($array1,$array2);
			}
			else if(count($array1) == 4 and $array1[0] < $array1[3])
			{
				calc($array1,$array2);
			}
			else if(count($array1) == 5 and $array1[0] < $array1[4])
			{
				calc($array1,$array2);
			}
			else if(count($array1) >= 6)
			{
				calc($array1,$array2);
			}
		}
		else
		{
   			if($array1[0]+$array1[5]+$array1[6] == $array1[1]+$array1[6]+$array1[7]){
   			if($array1[0]+$array1[5]+$array1[6] == $array1[2]+$array1[7]+$array1[8]){
   			if($array1[0]+$array1[5]+$array1[6] == $array1[3]+$array1[8]+$array1[9]){
   			if($array1[0]+$array1[5]+$array1[6] == $array1[4]+$array1[9]+$array1[5]){
				echo $array1[0].$array1[5].$array1[6].$array1[1].$array1[6].$array1[7].$array1[2].$array1[7].$array1[8].$array1[3].$array1[8].$array1[9].$array1[4].$array1[9].$array1[5]."\n";
			}}}}
		}
		$array2[$v] = $v;
		array_pop($array1);

	}
}
?>
問題文