インディアン・ポーカーのプログラムを作ってみました。既にQiitaで投稿していた方がいたのでQiitaに書こうかと思ってましたが、完成度が低くなってしまったことと、paiza.ioとその埋め込み機能を使ってみたかったのとでこちらに書いておきます。
早速完成品がこちらです。下部の「入力」タブで、一行ごとにプレイヤー数、カード数、全パターン表示(true/false),を予め入力しといて「実行」をクリック。8名8枚ぐらいからタイムアウトになります…。
以下、つらつらと備忘録です〜
Qiitaでたまたま@it-heroさんの記事を見て、オブジェクト指向というより元ネタのテーマである「相手の思考を推理する」というインディアン・ポーカーのアルゴリズムをどう実装するかに興味を持ちました。
その後@hiki_neet_pさんの記事でコードを見ても私の勉強不足でよく理解できなかったので、自分で書いてみようと。
たのしかったです。(こなみ)
本筋からは逸れますが、全パターンを表示するために順列を列挙するアルゴリズムを作ってみたのですが、それがなかなかの駄作となりました。
問題のコードがこちら。1からnの数字のうちk個を使う順列を全て返します。(Main.java)
private static List<List> permutate(int k, int n) { List<List > workingPermutatesList = IntStream.rangeClosed(1, n) .mapToObj(i -> new ArrayList (Arrays.asList(i))) .collect(ArrayList::new, ArrayList::add, ArrayList::addAll); for(int i = 1; i < k; i++){ List<List > tmp = new ArrayList<>(); for(List p : workingPermutatesList) for(int j = 1; j <= n; j++) if(!p.contains(j)){ List permutate = new ArrayList (p); permutate.add(j); tmp.add(permutate); } workingPermutatesList = tmp; } return workingPermutatesList; }
簡単にググったところ再帰呼び出しで実装するのが多かったので、再帰じゃないほうが早いんじゃね?と思ってやってみましたが、どうもメモリを食ってしまっている気がする…。
あとこの機会にストリーム処理とラムダ式を勉強してみようと思ったのですが、それも冒頭で(無駄に)使うぐらいの中途半端な結果に。
という訳で、今度は順列アルゴリズムの比較と改善の記事でも書こうかと思います。
で、こちらも本筋から逸れるんですが、せっかくプログラムを書いてみたんだったら気軽に試してみてほしくなりますよね。
オンラインの実行環境を調べてみたら予想以上にいろいろあったのですが、ここはやはり国産のサービスということでpaiza.ioを使ってみました。
私は今回アカウントも作ったのですが、ゲストユーザーとして作成したプログラムもURLで公開することができます。
コマンドライン引数を付けて実行することができないのが玉に瑕(なのでMain.javaも少し直した)ですし、コードの管理には向きませんが、今回のように簡単なプログラムを公開する分には必要十分です。
前回DataCamp Lightを紹介しましたが、どちらもメインの事業が学習サイト(paizaは転職支援が主か?)というのが興味深いですね。
個人的にはローカルで環境を構築したいタイプですしそこから学べることも多いと思ってますが、公開/共有という点でこれらのサービスは大歓迎です。どういう運営をしているかも気になりますよね。
Twitterでシェア Facebookでシェアchromebook で開発環境の構築(Crostini と時々Crouton)<br>その③Tmux, ほかターミナルカスタマイズ
chromebook で開発環境の構築(Crostini と時々Crouton)<br>その②Eclipse, Tomcat
Java 2
Linux 3
R 1
docker 1
python 1
書きかけ(1) DataCamp Light(1) paizaio(1) 備忘録(1)
arakaki (7)
コメント
承認待ちのコメント 6 年 前
承認待ちのコメント 5 年, 12 ヶ月 前
承認待ちのコメント 5 年, 11 ヶ月 前
承認待ちのコメント 5 年, 11 ヶ月 前
承認待ちのコメント 5 年, 11 ヶ月 前
承認待ちのコメント 5 年, 11 ヶ月 前
承認待ちのコメント 5 年, 11 ヶ月 前
承認待ちのコメント 5 年, 11 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 10 ヶ月 前
承認待ちのコメント 5 年, 9 ヶ月 前
承認待ちのコメント 5 年, 9 ヶ月 前
承認待ちのコメント 5 年, 9 ヶ月 前
承認待ちのコメント 5 年, 9 ヶ月 前
承認待ちのコメント 5 年, 9 ヶ月 前
承認待ちのコメント 5 年, 9 ヶ月 前
承認待ちのコメント 5 年, 9 ヶ月 前
承認待ちのコメント 5 年, 5 ヶ月 前
承認待ちのコメント 5 年, 4 ヶ月 前
承認待ちのコメント 5 年, 4 ヶ月 前
承認待ちのコメント 5 年, 4 ヶ月 前
承認待ちのコメント 5 年, 4 ヶ月 前
承認待ちのコメント 5 年, 4 ヶ月 前
承認待ちのコメント 5 年, 4 ヶ月 前
承認待ちのコメント 5 年, 4 ヶ月 前
承認待ちのコメント 5 年, 3 ヶ月 前
承認待ちのコメント 4 年, 9 ヶ月 前
承認待ちのコメント 4 年, 4 ヶ月 前
承認待ちのコメント 4 年, 4 ヶ月 前
承認待ちのコメント 4 年, 3 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年, 1 ヶ月 前
承認待ちのコメント 4 年 前
承認待ちのコメント 3 年, 11 ヶ月 前
承認待ちのコメント 3 年, 11 ヶ月 前
新しいコメント