<?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; } ?>