問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
行列を応用すると様々なことに役立ちます。
その一例として、通信路や記録素子の信頼性を向上させる用途があります。
この問題は、そのような例である「ハミング符号」に関連するものとなります。
ハミング符号は、通信の際に 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
次のフォーマットに従って、行ベクトル w = [w_1 w_2 ... w_7] を空白区切りで 1 行で出力してください。
w_1 w_2 ... w_7
すべてのテストケースにおいて, 以下の条件をみたします
・u_i は 0 か 1 (1 ≦ i ≦ 4)
0 0 0 0
0 0 0 0 0 0 0
0 1 1 0
0 1 1 0 0 1 1
1 1 1 0
1 1 1 0 0 0 0