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

← Problem 58  Problem 60 →
<?php

// 3文字の小文字ということで、暗号化キーは 97-122 の間になる。
// 26*26*26
// 記号は含まないだろうと想定して、
// xorしたときに、0-47,127 になったら誤りということで。

$file = file_get_contents('problem59.txt');
$data = explode("," , $file);
$flag = false;

for($a = 97 ; $a <= 122 ; $a++)
{
for($b = 97 ; $b <= 122 ; $b++)
{
for($c = 97 ; $c <= 122 ; $c++)
{
	$array = array(0=>$a,1=>$b,2=>$c);
	if(check($array,$data))
	{
		$flag = true;
		break;
	}
}
	if($flag)
	{
		break;
	}
}
	if($flag)
	{
		break;
	}
}

$answer = 0;
foreach($data as $k => $v)
{
	$answer += $array[$k % 3] ^ $v ;
}
echo $answer."\n";

function check($array,$data)
{
$flag = true;
foreach($data as $k => $v)
{
	$tmp = $array[$k % 3] ^ $v ;
	if($tmp <= 31 or $tmp >= 123 or $tmp == 64)
	{
		$flag = false;
		break;
	}
}

return $flag;

}

?>
問題文