トランプ大統領って、190cmもあるんだ...
ドナルド・ジョン・トランプは、アメリカ合衆国の実業家、政治家。第45代アメリカ合衆国大統領。 歴代最高齢で就任した大統領であり、また史上初の政治や軍人の経験がない大統領でもある。身長6フィート3インチ。
※ フィート、インチは下記参照
というわけで、今回は、トランプの不足カードを表示してみようって話です、Javaでね。
今回も、
・AIZU ONLINE JUDGE: Programming Challenge
⇧ こちらのサイトの問題ですね。
では、レッツ~トライ。
トランプの不足カードを表示してみる
そも、トランプとは?
トランプは、日本ではカードを使用した室内用の玩具を指すために用いられている用語で、もっぱら4種各13枚の計52枚(+α)を1セットとするタイプのものを指して言うことが多い。「プレイング・カード」「西洋かるた」とも。多種多様なゲームに用いられるほか、占いの道具としても手品(マジック)の小道具としてもよく用いられる。
⇧ 「(+α)」 は、JOKER のことですかね、今回は、JOKER は除外します。
問題はこんな感じ。
では、ソースは、
package aizu; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class TestJugdeCards { // トランプの「絵柄」用のEnumクラス static enum CardDesign { S(0), H(1), C(2), D(3); private int id; public int getId() { return this.id; } private CardDesign (int id) { this.id = id; } } public static void main(String[] args) throws NumberFormatException, IOException { // 標準入力を受け取る用 BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); // トランプの数のマトリックス用 boolean[][] checkInput = new boolean[4][13]; // 標準入力(トランプの枚数) int inputCards = Integer.parseInt(input.readLine()); int inputNumberOfCards; // トランプの各カードの数字用 // 標準入力(トランプの枚数)の回数だけ繰り返し for (int i = 0; i < inputCards; i++) { // 標準入力を、「絵柄」と「数字」に分ける String[] inputCardsArray = (input.readLine()).split("\\s"); // トランプの各カードの数字 inputNumberOfCards = Integer.parseInt(inputCardsArray[1]); // 「絵柄」(「スペード」「ハート」「クラブ」「ダイヤ」)で場合分け switch(CardDesign.valueOf(inputCardsArray[0])) { case S: // 「スペード」 checkInput[0][(inputNumberOfCards -1)] = true; break; case H: // 「ハート」 checkInput[1][(inputNumberOfCards -1)] = true; break; case C: // 「クラブ」 checkInput[2][(inputNumberOfCards -1)] = true; break; case D: // 「ダイヤ」 checkInput[3][(inputNumberOfCards -1)] = true; break; } } // 「絵柄」の数だけ繰り返し for (int i = 0; i < CardDesign.values().length; i++) { // 「絵柄」に対応する枚数(13枚)だけ繰り返し for (int j = 0; j < checkInput[1].length; j++) { // 標準入力で、入力されなかったカードを表示 if (!checkInput[i][j]) { System.out.println(CardDesign.values()[i] + " " + (j +1)); } } } } }
で、実行してみる。
標準入力が、3枚の場合
3 S 12 D 1 C 3 S 1 S 2 S 3 S 4 S 5 S 6 S 7 S 8 S 9 S 10 S 11 S 13 H 1 H 2 H 3 H 4 H 5 H 6 H 7 H 8 H 9 H 10 H 11 H 12 H 13 C 1 C 2 C 4 C 5 C 6 C 7 C 8 C 9 C 10 C 11 C 12 C 13 D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 9 D 10 D 11 D 12 D 13
という感じで、不足カードが表示されています。
OKも出た感じです。
標準のJava APIでは、重複したKeyを扱う場合は、Mapを使うとValue(値)が上書きされてしまうので、Arrayで、2次元配列とかで実現するしかない感じですかね...
Googleが、重複したKeyのMapを実現するAPIを作ってるみたいです。
⇧ 「guava」ってライブラリの中の、「com.google.common.collect.Multimap」ってAPIで重複したKeyのMapを実現できると。
勉強していかねばですね。
今回はこのへんで。