1. paizaラーニングトップ
  2. レベルアップ問題集
  3. 行列計算メニュー(言語選択)
  4. 問題一覧 C++編
  5. ハミング符号 1 C++編

行列計算メニューのサムネイル
ハミング符号 1 C++編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

行列を応用すると様々なことに役立ちます。
その一例として、通信路や記録素子の信頼性を向上させる用途があります。
この問題は、そのような例である「ハミング符号」に関連するものとなります。

ハミング符号は、通信の際に 1 つの誤りが起きても正しく情報を受け取ることができるという仕組みです。
この手順はおおまかに次の 3 つに分かれ、それぞれの問題がその手順に対応します。
(1) データを符号化する
(2) 誤りがあるかを判定する
(3) 誤り訂正をおこなう

この問題は、(1) の「データを符号化する」という手順に対応します。

0, 1 のみを要素に持つ行列 (行ベクトル) u = [u_1 u_2 u_3 u_4] が与えられます。
次の行列 G を用いて、行列 (行ベクトル) v = u ✕ G を計算してください。
必要に応じて、後述する配列・リストを利用しても構いません。



この計算によって得られた v は 7 つの要素からなる行列(行ベクトル)です。
さらに、i 番目の要素 w_i を、v の各要素 v_i (1 ≦ i ≦ 7) を 2 で割った余りとした行ベクトル w = [w_1 w_2 ... w_7] = [v_1%2 v_2%2 ... v_7%2] を求めてください。  


// 行列 G, C++用
const vvi G = {{1, 0, 0, 0, 0, 1, 1},
{0, 1, 0, 0, 1, 0, 1},
{0, 0, 1, 0, 1, 1, 0},
{0, 0, 0, 1, 1, 1, 1}}


# 行列 G, Python 用
G = [[1, 0, 0, 0, 0, 1, 1],
[0, 1, 0, 0, 1, 0, 1],
[0, 0, 1, 0, 1, 1, 0],
[0, 0, 0, 1, 1, 1, 1]]

入力される値

u_1 u_2 u_3 u_4


・1 行目に行ベクトル u = [u_1 u_2 u_3 u_4] が空白区切りで与えられます。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

次のフォーマットに従って、行ベクトル w = [w_1 w_2 ... w_7] を空白区切りで 1 行で出力してください。

w_1 w_2 ... w_7

末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて, 以下の条件をみたします

・u_i は 0 か 1 (1 ≦ i ≦ 4)

入力例1

0 0 0 0

出力例1

0 0 0 0 0 0 0

入力例2

0 1 1 0

出力例2

0 1 1 0 0 1 1

入力例3

1 1 1 0

出力例3

1 1 1 0 0 0 0

問題一覧へ戻る

ページの先頭へ戻る