275 lines
13 KiB
Markdown
275 lines
13 KiB
Markdown
# Question18 - 一覧(コレクション)操作
|
||
|
||
本資料の練習問題は、複数のプログラミング言語(Java / C# / PHP / Python)で共通して利用できるよう記述されています。静的型付け・動的型付けの違いや文字列の連結ルールなど、言語固有の文法仕様に基づき、問題文の表現をご使用の言語の仕様に適宜読み替えて進めてください。
|
||
|
||
## この問題のねらい
|
||
|
||
- 一覧(リスト)に要素を追加し、追加した順序を保ったまま全件を取り出して出力できること
|
||
- 複数のフィールドを持つデータ(レコード)を定義し、そのデータを一覧に格納して扱えること
|
||
- 一覧の要素の中から、条件に合うものだけを取り出す(絞り込む)、または条件に合うものを取り除くことができること
|
||
- 与えられたデータ(外部データを読み込んで組み立てた一覧)を対象に、絞り込み・除外・集計といった加工ができること
|
||
- 一覧からランダムに複数の要素を重複なく選び出し、その結果をもとに合計・税込み計算・小数点以下の切り捨てといった計算ができること
|
||
|
||
以下の設問はそれぞれ独立したプログラムとして実装してください。ただし、設問2〜4は共通データ定義「選手データ」を、設問5は共通データ定義「料理データ」を、それぞれ使用します。
|
||
|
||
---
|
||
|
||
## 共通データ定義: 選手データ(設問2〜4で使用)
|
||
|
||
次の4つのフィールドを持つデータを表せるようにしてください。
|
||
|
||
- ポジション(文字列)
|
||
- 名前(文字列)
|
||
- 国(文字列)
|
||
- 所属チーム(文字列)
|
||
|
||
このデータを1件の文字列として表現する場合は、「ポジション,名前,国,所属チーム」の順にカンマ区切りで表してください(設問2〜4の出力形式として使用します)。
|
||
|
||
### 選手データの一覧(設問3・4の入力データ)
|
||
|
||
次の55件の選手データのインスタンスを、この順序のまま並んだ一覧として用意してください(同じ内容のファイル `file/BestElevenCandidate.csv` を用意しているので、外部データとして読み込んで組み立てる形でも、プログラム内に直接用意する形でも構いません)。
|
||
|
||
```
|
||
GK,クラウディオ・ブラボ,チリ,マンチェスター・C
|
||
GK,ジャンルイジ・ブッフォン,イタリア,ユヴェントス
|
||
GK,ダビド・デ・ヘア,スペイン,マンチェスター・U
|
||
GK,ケイロル・ナバス,コスタリカ,レアル・マドリード
|
||
GK,マヌエル・ノイアー,ドイツ,バイエルン
|
||
DF,ダヴィド・アラバ,オーストリア,バイエルン
|
||
DF,ジョルディ・アルバ ,スペイン,バルセロナ
|
||
DF,セルジュ・オーリエ,コートジボワール,パリ・サンジェルマン
|
||
DF,エクトル・ベジェリン,スペイン,アーセナル
|
||
DF,ジェローム・ボアテング,ドイツ,バイエルン
|
||
DF,レオナルド・ボヌッチ,イタリア,ユヴェントス
|
||
DF,ダニエル・カルバハル,スペイン,レアル・マドリード
|
||
DF,ジョルジョ・キエッリーニ,イタリア,ユヴェントス
|
||
DF,ダニエウ・アウヴェス,ブラジル,ユヴェントス
|
||
DF,ダヴィド・ルイス,ブラジル,チェルシー
|
||
DF,ディエゴ・ゴディン,ウルグアイ,アトレティコ・マドリード
|
||
DF,マッツ・フンメルス,ドイツ,バイエルン
|
||
DF,フィリップ・ラーム,ドイツ,バイエルン
|
||
DF,マルセロ,ブラジル,レアル・マドリード
|
||
DF,ハビエル・マスチェラーノ,アルゼンチン,バルセロナ
|
||
DF,ペペ,ポルトガル,レアル・マドリード
|
||
DF,ジェラール・ピケ,スペイン,バルセロナ
|
||
DF,セルヒオ・ラモス,スペイン,レアル・マドリード
|
||
DF,チアゴ・シウヴァ,ブラジル,パリ・サンジェルマン
|
||
DF,ラファエル・ヴァラン,フランス,レアル・マドリード
|
||
MF,シャビ・アロンソ,スペイン,バイエルン
|
||
MF,セルヒオ・ブスケツ,スペイン,バルセロナ
|
||
MF,ケヴィン・デ・ブライネ,ベルギー,マンチェスター・C
|
||
MF,エデン・アザール,ベルギー,チェルシー
|
||
MF,アンドレス・イニエスタ,スペイン,バルセロナ
|
||
MF,エンゴロ・カンテ,フランス,チェルシー
|
||
MF,トニ・クロース,ドイツ,レアル・マドリード
|
||
MF,ルカ・モドリッチ,クロアチア,レアル・マドリード
|
||
MF,メスト・エジル,ドイツ,アーセナル
|
||
MF,ディミトリ・パイェ,フランス,ウェストハム
|
||
MF,ポール・ポグバ,フランス,マンチェスター・U
|
||
MF,イヴァン・ラキティッチ,クロアチア,バルセロナ
|
||
MF,ダビド・シルバ,スペイン,マンチェスター・C
|
||
MF,マルコ・ヴェラッティ,イタリア,パリ・サンジェルマン
|
||
MF,アルトゥーロ・ビダル,チリ,バイエルン
|
||
FW,セルヒオ・アグエロ,アルゼンチン,マンチェスター・C
|
||
FW,ギャレス・ベイル,ウェールズ,レアル・マドリード
|
||
FW,カリム・ベンゼマ,フランス,レアル・マドリード
|
||
FW,クリスティアーノ・ロナウド,ポルトガル,レアル・マドリード
|
||
FW,パウロ・ディバラ,アルゼンチン,ユヴェントス
|
||
FW,アントワーヌ・グリーズマン,フランス,アトレティコ・マドリード
|
||
FW,ゴンサロ・イグアイン,アルゼンチン,ユヴェントス
|
||
FW,ズラタン・イブラヒモヴィッチ,スウェーデン,マンチェスター・U
|
||
FW,ロベルト・レヴァンドフスキ,ポーランド,バイエルン
|
||
FW,リオネル・メッシ,アルゼンチン,バルセロナ
|
||
FW,トーマス・ミュラー,ドイツ,バイエルン
|
||
FW,ネイマール,ブラジル,バルセロナ
|
||
FW,アレクシス・サンチェス,チリ,アーセナル
|
||
FW,ルイス・スアレス,ウルグアイ,バルセロナ
|
||
FW,ジェイミー・ヴァーディ,イングランド,レスター
|
||
```
|
||
|
||
---
|
||
|
||
## 設問1
|
||
|
||
文字列を格納できる一覧を用意し、変数名は `animals` としてください。
|
||
|
||
`animals` に次の4つの文字列を、この順序で追加してください。
|
||
|
||
- いぬ
|
||
- ねこ
|
||
- うさぎ
|
||
- たぬき
|
||
|
||
`animals` に格納されているすべての要素を、追加した順序のまま、1件ずつ出力してください。
|
||
|
||
- 出力(4行、追加順):
|
||
|
||
```
|
||
いぬ
|
||
ねこ
|
||
うさぎ
|
||
たぬき
|
||
```
|
||
|
||
---
|
||
|
||
## 設問2
|
||
|
||
共通データ定義「選手データ」を格納できる一覧を用意し、変数名は `playerList` としてください。
|
||
|
||
次の3件の選手データのインスタンスを、この順序で作成し、`playerList` に追加してください。
|
||
|
||
1人目
|
||
- ポジション: MF
|
||
- 名前: 佐川真司
|
||
- 国: 日本
|
||
- 所属チーム: ドルトムント
|
||
|
||
2人目
|
||
- ポジション: DF
|
||
- 名前: 永元佑都
|
||
- 国: 日本
|
||
- 所属チーム: インテル
|
||
|
||
3人目
|
||
- ポジション: MF
|
||
- 名前: 本田健佑
|
||
- 国: 日本
|
||
- 所属チーム: ACミラン
|
||
|
||
`playerList` に格納されているすべての選手データを、追加した順序のまま、共通データ定義の文字列表現で1件ずつ出力してください。
|
||
|
||
- 出力(3行):
|
||
|
||
```
|
||
MF,佐川真司,日本,ドルトムント
|
||
DF,永元佑都,日本,インテル
|
||
MF,本田健佑,日本,ACミラン
|
||
```
|
||
|
||
---
|
||
|
||
## 設問3
|
||
|
||
※この設問を解く前に、共通データ定義「選手データ」および「選手データの一覧」をよく確認してください。
|
||
|
||
「選手データの一覧」を取得してください。
|
||
|
||
取得した一覧の中から、ポジションが `FW` の選手データのみを、元の順序を保ったまま、共通データ定義の文字列表現で出力してください。
|
||
|
||
- 出力(15件、元データの並び順のまま):
|
||
|
||
```
|
||
FW,セルヒオ・アグエロ,アルゼンチン,マンチェスター・C
|
||
FW,ギャレス・ベイル,ウェールズ,レアル・マドリード
|
||
FW,カリム・ベンゼマ,フランス,レアル・マドリード
|
||
FW,クリスティアーノ・ロナウド,ポルトガル,レアル・マドリード
|
||
FW,パウロ・ディバラ,アルゼンチン,ユヴェントス
|
||
FW,アントワーヌ・グリーズマン,フランス,アトレティコ・マドリード
|
||
FW,ゴンサロ・イグアイン,アルゼンチン,ユヴェントス
|
||
FW,ズラタン・イブラヒモヴィッチ,スウェーデン,マンチェスター・U
|
||
FW,ロベルト・レヴァンドフスキ,ポーランド,バイエルン
|
||
FW,リオネル・メッシ,アルゼンチン,バルセロナ
|
||
FW,トーマス・ミュラー,ドイツ,バイエルン
|
||
FW,ネイマール,ブラジル,バルセロナ
|
||
FW,アレクシス・サンチェス,チリ,アーセナル
|
||
FW,ルイス・スアレス,ウルグアイ,バルセロナ
|
||
FW,ジェイミー・ヴァーディ,イングランド,レスター
|
||
```
|
||
|
||
---
|
||
|
||
## 設問4
|
||
|
||
「選手データの一覧」を取得してください。
|
||
|
||
取得した一覧から、所属チームが「レアル・マドリード」または「バルセロナ」である選手データを取り除いてください。
|
||
|
||
残った選手データを、元の順序を保ったまま、共通データ定義の文字列表現ですべて出力してください。
|
||
|
||
- 期待される結果: 55件の選手データのうち、所属チームがレアル・マドリードの11件とバルセロナの9件(合計20件)が除外され、残り35件が元データの並び順のまま出力される
|
||
|
||
- 出力(35件、元データの並び順のまま):
|
||
|
||
```
|
||
GK,クラウディオ・ブラボ,チリ,マンチェスター・C
|
||
GK,ジャンルイジ・ブッフォン,イタリア,ユヴェントス
|
||
GK,ダビド・デ・ヘア,スペイン,マンチェスター・U
|
||
GK,マヌエル・ノイアー,ドイツ,バイエルン
|
||
DF,ダヴィド・アラバ,オーストリア,バイエルン
|
||
DF,セルジュ・オーリエ,コートジボワール,パリ・サンジェルマン
|
||
DF,エクトル・ベジェリン,スペイン,アーセナル
|
||
DF,ジェローム・ボアテング,ドイツ,バイエルン
|
||
DF,レオナルド・ボヌッチ,イタリア,ユヴェントス
|
||
DF,ジョルジョ・キエッリーニ,イタリア,ユヴェントス
|
||
DF,ダニエウ・アウヴェス,ブラジル,ユヴェントス
|
||
DF,ダヴィド・ルイス,ブラジル,チェルシー
|
||
DF,ディエゴ・ゴディン,ウルグアイ,アトレティコ・マドリード
|
||
DF,マッツ・フンメルス,ドイツ,バイエルン
|
||
DF,フィリップ・ラーム,ドイツ,バイエルン
|
||
DF,チアゴ・シウヴァ,ブラジル,パリ・サンジェルマン
|
||
MF,シャビ・アロンソ,スペイン,バイエルン
|
||
MF,ケヴィン・デ・ブライネ,ベルギー,マンチェスター・C
|
||
MF,エデン・アザール,ベルギー,チェルシー
|
||
MF,エンゴロ・カンテ,フランス,チェルシー
|
||
MF,メスト・エジル,ドイツ,アーセナル
|
||
MF,ディミトリ・パイェ,フランス,ウェストハム
|
||
MF,ポール・ポグバ,フランス,マンチェスター・U
|
||
MF,ダビド・シルバ,スペイン,マンチェスター・C
|
||
MF,マルコ・ヴェラッティ,イタリア,パリ・サンジェルマン
|
||
MF,アルトゥーロ・ビダル,チリ,バイエルン
|
||
FW,セルヒオ・アグエロ,アルゼンチン,マンチェスター・C
|
||
FW,パウロ・ディバラ,アルゼンチン,ユヴェントス
|
||
FW,アントワーヌ・グリーズマン,フランス,アトレティコ・マドリード
|
||
FW,ゴンサロ・イグアイン,アルゼンチン,ユヴェントス
|
||
FW,ズラタン・イブラヒモヴィッチ,スウェーデン,マンチェスター・U
|
||
FW,ロベルト・レヴァンドフスキ,ポーランド,バイエルン
|
||
FW,トーマス・ミュラー,ドイツ,バイエルン
|
||
FW,アレクシス・サンチェス,チリ,アーセナル
|
||
FW,ジェイミー・ヴァーディ,イングランド,レスター
|
||
```
|
||
|
||
- 出力内容は「選手データの一覧」とこの除外条件から一意に定まります(上記の共通データ定義のデータをもとに、除外後の一覧を組み立ててください)
|
||
|
||
---
|
||
|
||
## 設問5
|
||
|
||
共通データ定義: 料理データ(この設問のみで使用)
|
||
|
||
次の2つのフィールドを持つデータを表せるようにしてください。
|
||
|
||
- 名前(文字列)
|
||
- 値段(整数、単位は円)
|
||
|
||
料理データの一覧として、次の8件のインスタンスを用意してください(同じ内容のファイル `file/FoodMenu.csv` を用意しているので、外部データとして読み込んで組み立てる形でも、プログラム内に直接用意する形でも構いません)。
|
||
|
||
```
|
||
オムライス,500
|
||
焼きそば,450
|
||
ハンバーグ,600
|
||
ステーキ,800
|
||
ナポリタン,600
|
||
ミラノ風ドリア,299
|
||
フライドチキン,300
|
||
カレー,600
|
||
```
|
||
|
||
料理データの一覧を取得し、その中からランダムに3件を選んでください。
|
||
|
||
- 選んだ3件の料理名を出力してください
|
||
- 選んだ3件の値段の合計に対して消費税8%を加算した金額を出力してください(小数点以下は切り捨てて、整数の金額として出力すること)
|
||
|
||
- 期待される結果の形式(選ばれる料理はランダムなので値は一例):
|
||
|
||
```
|
||
ハンバーグ
|
||
カレー
|
||
ナポリタン
|
||
1944
|
||
```
|
||
|
||
- 補足:
|
||
- 同じ料理を2回以上選んではいけません(重複なく3件を選ぶこと)
|
||
- 税込み合計金額は「選んだ3件の値段の合計 × 1.08」の小数点以下を切り捨てた整数値とすること
|