受講名簿をひっくり返す
学生ごとに受ける科目が書かれた行が n 行与えられる。
ループの代わりに集合内包表記と辞書内包表記で次のものを作って出力せよ。
最初の行に n が、続く n 行に "名前 科目 科目 ..." が与えられる。
科目が一つもない行もある。
同じ学生が何行にも出ることがあり、その学生の科目はそれらの行をすべて合わせたものである。
一行の中で同じ科目が繰り返し出ても一回と数える。
1) 異なる学生の数 S を出力し、続いて S 行に "名前 k 科目1 ...
科目k" を名前の順に出力する。
k はその学生が受ける異なる科目の数で、科目は並べ替えて書く。
科目がなければ "名前 0" である。
2) 異なる科目の数 C を出力し、続いて C 行に "科目 m 名前1 ...
名前m" を科目の順に出力する。
m はその科目を受ける学生の数で、名前は並べ替えて書く。
3) 学生が一人だけの科目を並べ替えて、一行に空白で区切って出力する。
そのような科目がなければ - を出力する。
並べ替えはすべて文字列のコード順(Python の文字列の比較)で行う。
- 入力
- 1 ≤ n ≤ 1000。
名前は英小文字 1〜8 文字。
科目は英大文字と数字 2〜6 文字で、一行に 0〜10 個、異なる科目は 200 個以下である。 - 出力
- 1) S + 1 行、2) C + 1 行、3) 一行
4 kim ART MATH lee MATH kim BIO kim
2 kim 3 ART BIO MATH lee 1 MATH 3 ART 1 kim BIO 1 kim MATH 2 kim lee ART BIO
3 mia CS CS joy CS ART ART zoe
3 joy 2 ART CS mia 1 CS zoe 0 2 ART 1 joy CS 2 joy mia ART