updated on 2019-02-04
あなたはデータ入力の作業を行っています。
この入力するデータは "0000" から "1111" までの 2 進数です。
このデータ入力の作業は単調でミスを起こしやすく困っています。
このため、入力するデータに対してある計算をし検証をすることにしました。
ここでは排他的論理和(xor) と呼ばれる計算を使って入力データのミスを検出しようとしました。
排他的論理和(xor) は各桁において、1 が奇数個あれば 1、そうでないならば 0 を出力します。
入力する N 個のデータに対して、排他的論理和(xor) を取って出力をしてください。
入力例 1 の場合は、各桁に対して以下のように計算されます。
入力例2
4
0001
0010
0100
1000
解答
<?php $input_lines = trim(fgets(STDIN)); if (strlen($input_lines)!=4) { for ($i = 0; $i < $input_lines; $i++) { $num = trim(fgets(STDIN)); $num = str_replace(array("\r\n","\r","\n"), '', $num); // 改行文字の除去 $num1[] = substr($num, -1, 1); $num2[] = substr($num, -2, 1); $num3[] = substr($num, -3, 1); $num4[] = substr($num, -4, 1); } $num1Sum=$num2Sum=$num3Sum=$num4Sum=0; foreach($num4 as $num4) { $num4Sum += $num4; // 4桁目の合計 } $sum[] = $num4Sum; foreach($num3 as $num3) { $num3Sum += $num3; // 3桁目の合計 } $sum[] = $num3Sum; foreach($num2 as $num2) { $num2Sum += $num2; // 2桁目の合計 } $sum[] = $num2Sum; foreach($num1 as $num1) { $num1Sum += $num1; // 1桁目の合計 } $sum[] = $num1Sum; foreach ($sum as $key => $value) { if($value%2==0) { echo 0; }else{ echo 1; } } } else if (strlen($input_lines)==4){ echo $input_lines; }