占い  (paizaランク C 相当)
次のような占いプログラムを作成してください。
「ユーザー」と「ユーザーに対応する血液型」、「血液型」と「血液型に対応する占い結果」が与えられます。
それぞれのユーザーに対応する占い結果を表示してください。
入力例の1つ目は、ユーザーの血液型についてのラッキーカラーの占いです。
入力例の2つ目は、ユーザーの星座についてのラッキーパーソンの占いになっています。
「血液型」として「星座」などのさまざまな文字列を利用できるようにすることで、他の占いにも対応する必要があることに注意してください。
 
 
- 入力される値
- 入力は以下のフォーマットで与えられます。
n
 (ユーザー_1) (ユーザー_1の血液型)
 (ユーザー_2) (ユーザー_2の血液型)
 (ユーザー_3) (ユーザー_3の血液型)
 …
 (ユーザー_i) (ユーザー_iの血液型)
 …
 (ユーザー_n) (ユーザー_nの血液型)
 m
 (血液型_1) (血液型_1の占い結果)
 (血液型_2) (血液型_2の占い結果)
 (血液型_3) (血液型_3の占い結果)
 …
 (血液型_j) (血液型_jの占い結果)
 ..
 (血液型_m) (血液型_mの占い結果)
 入力値最終行の末尾に改行が1つ入ります。
 文字列は標準入力から渡されます。
 
 
- 期待する出力
- 1から n までの各ユーザーについて順に、ユーザーとその占い結果を半角スペース区切りで出力してください。
 最後は改行し、余計な文字、空行を含んではいけません。
 
- 条件
- すべてのテストケースにおいて、以下の条件をみたします。
・1 ≦ n ≦100
 ・1 ≦ m ≦100
 ・(ユーザー_i)は、半角英数字からなる1から20文字までの文字列
 ・(血液型_j)は、半角英数字からなる1から20文字までの文字列
 ・(血液型_jの占い結果)は、半角英数字からなる1から20文字までの文字列
 ・(ユーザー_iの血液型)と等しい、(血液型_j)が必ず存在
 ・i ≠kのとき、(ユーザー_i)と(ユーザー_k)は異なる文字列
 ・j ≠kのとき、(血液型_j)と(血液型_k)は異なる文字列
 
 
- 入力例1
- 5
 Kyoko B
 Rio O
 Tsubame AB
 KurodaSensei A
 NekoSensei A
 4
 A red
 B green
 O blue
 AB yellow
- 出力例1
- Kyoko green
 Rio blue
 Tsubame yellow
 KurodaSensei red
 NekoSensei red
- 入力例2
- 5
 Kyoko shishiza
 Rio futagoza
 Tsubame otomeza
 KurodaSensei yagiza
 NekoSensei mizugameza
 5
 shishiza the_first_person
 yagiza the_second_person
 otomeza the_first_cat
 mizugameza the_first_dog
 futagoza NekoSensei
- 出力例2
- Kyoko the_first_person
 Rio NekoSensei
 Tsubame the_first_cat
 KurodaSensei the_second_person
 NekoSensei the_first_dog
- 入力例3
- 3
 AAA aaa111
 BBB bbb222
 CCC ccc333
 5
 aaa111 zzz
 bbb222 yyy
 ccc333 xxx
 ddd444 www
 eee555 vvv
- 出力例3
- AAA zzz
 BBB yyy
 CCC xxx
 
 
 
 
解答(入力例1で解説)
<?php
//入力値(数値)を受け取る
$n = trim(fgets(STDIN));
//空の配列で初期化する
$userToBlood = [];
//マッピング情報を配列$userToBloodに格納します。※1
for ($i = 0; $i < $n; $i++) {
[$user, $blood_type] = explode(' ', trim(fgets(STDIN)));
//$userToBlood[$user]$blood_typeを代入する
$userToBlood[$user] = $blood_type;
}
//入力値(数値)を受け取る
$m = trim(fgets(STDIN));
//空の配列で初期化する
$bloodToFortune = [];
for ($i = 0; $i < $m; $i++) {
[$blood_type, $fortune] = explode(' ', trim(fgets(STDIN)));
//マッピング情報を配列$bloodToFortuneに格納します。※2
$bloodToFortune[$blood] = $fortune;
}
foreach ($userToBlood as $user => $blood) {
//取り出したユーザー名と血液型から、
//血液型に対応する運勢を$bloodToFortune配列から検索し
//ユーザー名と運勢をスペース区切りで表示します。※3
echo $user . ' ' . $bloodToFortune[$blood] . "\n";
}
 
for文でそれぞれ連想配列を作成しています
※1の部分var_export($userToBlood[$user]);
array (
'Kyoko' => 'B',
'Rio' => 'O',
'Tsubame' => 'AB',
'KurodaSensei' => 'A',
'NekoSensei' => 'A',
)
 
※2の部分var_export($bloodToFortune[$blood]);
array (
'A' => 'red',
'B' => 'green',
'O' => 'blue',
'AB' => 'yellow',
)
 
※3の部分
foreachで$userToBloodのキーの部分の名前(kyoko,rio,tubame)と$bloodToFortune[$blood]の運勢(red,green,blue,yellow)を出力しています