Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

パリティチェック

イメージ
Jan 21, 2019

あなたはデータ入力の作業を行っています。
この入力するデータは "0000" から "1111" までの 2 進数です。

このデータ入力の作業は単調でミスを起こしやすく困っています。
このため、入力するデータに対してある計算をし検証をすることにしました。

ここでは排他的論理和(xor) と呼ばれる計算を使って入力データのミスを検出しようとしました。
排他的論理和(xor) は各桁において、1 が奇数個あれば 1、そうでないならば 0 を出力します。

入力する N 個のデータに対して、排他的論理和(xor) を取って出力をしてください。
入力例 1 の場合は、各桁に対して以下のように計算されます。

img

入力例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;
}