鍋谷さんの参考問題: へなちょこ解答(Java)
鍋谷さんのオフラインリアルタイムどう書くに参加したいなーと思って、試しに参考問題をJavaで解いてみました。
問題はこちら。http://qiita.com/items/cbc3af152ee3f50a822f
package sample; import java.util.ArrayList; import java.util.List; class Card { char suit; String rank; Card() { rank = null; } } /** * 問題: http://qiita.com/items/cbc3af152ee3f50a822f */ public class Main { protected List<Card> convertToCard(String str) { List<Card> list = new ArrayList<>(); for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch == 'S' || ch == 'H' || ch == 'D' || ch == 'C') { Card card = new Card(); card.suit = ch; list.add(card); } else { Card card2 = list.remove(list.size() - 1); if (card2.rank != null) { String rank = card2.rank; card2.rank = rank.concat(String.valueOf(ch)); } else { card2.rank = String.valueOf(ch); } list.add(card2); } } return list; } protected String confirmHand(List<Card> list) { String result = null; List<String> ranks = new ArrayList<String>(); List<String> pairs = new ArrayList<>(); for (Card card : list) { for (String r : ranks) { if (r.equals(card.rank)) { pairs.add(card.rank); break; } } ranks.add(card.rank); } if (pairs == null || pairs.size() == 0) { result = "--"; } else if (pairs.size() == 1) { result = "1P"; // one pair } else if (pairs.size() == 2) { if (pairs.get(0).equals(pairs.get(1))) { result = "3K"; // three cards } else { result = "2P"; // two pair } } else if (pairs.size() == 3) { if (pairs.get(0).equals(pairs.get(1)) && pairs.get(0).equals(pairs.get(2))) { result = "4K"; // four cards } else { result = "FH"; // full house } } return result; } }
正直1時間くらいかかった>< おいおい…ばかなの? しぬぞ!!
そして、nidoさんの回答例(Ruby)がわずか3行なのを見て、悶絶しているトコロ。凄いなぁ。
こんなレベルでも参加できるんだろうか? 『プログラマのための論理パズル』とか解いた方がいいかもね。。。
(追記)
- tm_sendaさんが、よりすっきりした解答例をコメント欄に書いてくださいました。
- もがみさんのより堅牢な解答例も、あわせてどうぞ。
- お二方に触発されて、自分の解答にテストを追加しました。。。
(追記: 2012/6/25)
誤字訂正。suite→suit
(e_Mattsanさん、ご指摘ありがとうございます orz)