目標)
以下のルールの1位と2位のゼッケンナンバーを求めたい
ルール
1 から 4 までのゼッケンナンバーをもつ選手 4 人が、短距離走大会に参加します。
1 回戦では、参加者は 2 組にずつ競争します。
各組で上位となった 2 人が 2 回戦に進出します。
2 回戦の勝者がこの大会の優勝者です。
まず 1 回戦の組み分けが与えられます。
そして 1 回戦の各参加者のタイム (秒) が、続いて 2 回戦の各参加者のタイム (秒) がゼッケンナンバーの小さい順に与えられるので一位と二位を求めたい。
なお、1 回戦、2 回戦における各選手のタイムはすべて異なり、同着は絶対にないものとする。
1 回戦の組み分け: 1 vs 3, 2 vs 4
1 回戦のタイム:
1 → 600秒
2 → 650秒
3 → 500秒
4 → 700秒
このとき 1 vs 3 では 3 の勝利、 2 vs 4 では 2 の勝利となります。
したがって 2 回戦は 2 vs 3 で争われます。
2 回戦のタイム:
2 → 550秒
3 → 600秒
2 回戦の勝者は 2 となり、優勝者は 2、準優勝者は 3 となります。
この例は下の入力例 1 に対応しています。
#例イメージ図
・1 行目に選手のゼッケンナンバーを表す整数 p_1, p_2 、
2 行目に同様の整数 p_3, p_4 が半角スペース区切りで与えられます。
このとき 1 回戦の組み分けが p_1 vs p_2, p_3 vs p_4 となります。
・次の行には各参加者の 1 回戦のタイムを表す ### 4 つの整数がエントリーナンバーの小さい順に半角スペース区切りで与えられます。
これらの整数を e_1, e_2, e_3, e_4 で表します。
・次の行には 2 回戦進出者の 2 回戦のタイムを表す**### 2 つの整数がエントリーナンバーの小さい順に半角スペース区切りで与えられます。**
これらの 整数を f_1, f_2 で表します。
・入力は合計で 4 行となり、入力値最終行の末尾に改行が1つ入ります。
入力例1
1 3
2 4
600 650 500 700
550 600
出力例1
2
3
入力例2
3 2
4 1
833 897 901 925
870 855
出力例2
2
1
私のコード)
期待値通りの出力ができると思います。
ただ、独学初心者のため、コードのスマートさに欠けるのではないかと不安です。
内包表記、関数やクラスを利用してよりスマートな書き方があれば、教えて頂きたいです。
宜しくお願い致します。
コード #1回戦の選手の組み合わせのリスト player_data = [ list(map(int,input().split())) for _ in range(2) ] #1回戦の選手の組み合わせのリストからそれぞれのゼッケンナンバー抽出 a,b = [ x for x in player_data[0]] c,d = [x for x in player_data[1]] #一回戦のタイム結果、二回戦のタイム結果 リスト作成 #なお、二回戦のタイム結果は、勝者二人のゼッケンナンバーが小さい方から二つタイムが与えられる game_result = [ list(map(int,input().split())) for x in range(2)] #print(*game_result) #上記のタイム結果のリストそれぞれに、初項に0 を代入 #リストの要素ひとつ追加することで、ゼッケンナンバー=リストの項数 にするため game_result[0].insert(0,0) game_result[1].insert(0,0) #print(game_result) #一回戦のタイム結果、二回戦のタイム結果をgame_1, game_2の変数に代入 game_1, game_2 = game_result[0], game_result[1] #一回戦目の勝者二人を抽出 winner_1 = [] if game_1[a] > game_1[b]: winner_1.append(b) else: winner_1.append(a) if game_1[c] > game_1[d]: winner_1.append(d) else: winner_1.append(c) #print(winner_1) #上記の勝者二人を、ゼッケンナンバーを降順で並び変え #二回戦のタイム結果は、勝者二人のゼッケンナンバーが小さい方から二つタイムが与えられるから sorted_winnter_1 = sorted(winner_1) #print(sorted_winnter_1) #二回戦の選手2人のそれぞれのゼッケンナンバーを取得 e,f = sorted_winnter_1[0], sorted_winnter_1[1] #print(e,f) #二回戦目の優勝者、準優勝者二人のリスト作成 winner_2 = [] if game_2[0] > game_2[1]: winner_2.append(f) winnter_2.append(e) else: winner_2.append(e) winner_2.append(f) winner_2 = list(map(str,winner_2)) print('\n'.join(map(' '.join,winner_2)))
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/16 05:42
2018/04/16 09:41
2018/04/17 04:03