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

← Problem 41  Problem 43 →
<?php

// triangle 数をある程度記憶しておく。
// 14文字が最長なので、14*26 = 364 までtriangle 数を記憶しておけばそれ以上の数はない。
$triangle = array();
for($i = 1 ; $i * ($i + 1 ) / 2 < 364 ; $i++)
{
	$triangle[] = $i * ($i + 1) / 2;
}
$answer = 0;

// ファイルの読み込み
$file = file_get_contents("problem42.txt");
$array1 = explode(",",str_replace("\"","",$file));

$alphabet = array("A"=>1,"B"=>2,"C"=>3,"D"=>4,"E"=>5,"F"=>6,"G"=>7,"H"=>8,"I"=>9,"J"=>10,"K"=>11,"L"=>12,"M"=>13,"N"=>14,"O"=>15,"P"=>16,"Q"=>17,"R"=>18,"S"=>19,"T"=>20,"U"=>21,"V"=>22,"W"=>23,"X"=>24,"Y"=>25,"Z"=>26);

foreach($array1 as $v)
{
	$tmp = 0;
        $length = strlen($v);
	for($i = 0 ; $i < $length ; $i++)
	{
		$tmp += $alphabet[substr($v,$i,1)];
	}
	if(array_search($tmp,$triangle) !== FALSE)
	{
		$answer++;
	}
}

echo $answer ;
?>
問題文