2010年6月4日金曜日

麻雀あがり判定

このエントリーをはてなブックマークに追加
麻雀のあがり判定について

すっごく簡易化したもので考えてみたけど,
頭を取る→刻子を取る→順子を取る→残りをチェックということでいいのかな?
刻子と順子が逆になったほうがいい場合は,あるのか???

import java.util.ArrayList;
import java.util.List;

public class Test {
   public static void main(String[] args) {
      // 簡略化のために牌は1-9のみ
      // 配列haiのindex番号と牌の枚数が対応している
      // 例) hai[1]<=>1の枚数
      int[] hai = {0,0,2,2,2,2,2,2,2,0};   // 大車輪
//      int[] hai = {0,3,1,1,1,1,1,1,1,4};   // 九連宝燈
//      int[] hai = {0,3,3,3,3,0,0,0,0,2};   // 四暗刻
      int[] c_hai;
      List<Integer> mentu;

      // 頭をまず取る
      for(int i = 1; i < hai.length; i++){
         if(hai[i] >= 2){
            c_hai = hai.clone();
            c_hai[i] -= 2;
            mentu = new ArrayList<Integer>();
            judge(c_hai, mentu, i);
         }
      }
   }
   // 再帰
   static void judge(int[] hai, List<Integer> mentu, int atama){
      if(mentu.size() == 12){
         print(mentu, atama);
      }
      // 刻子を取る
      for(int i = 1; i < hai.length; i++){
         if(hai[i] >= 3){
            mentu.add(i); mentu.add(i); mentu.add(i);
            hai[i] -= 3;
            judge(hai, mentu, atama);
         }
      }
      // 順子を取る
      for(int i = 1; i < (hai.length-2); i++){
         if(hai[i] > 0 && hai[i+1] > 0 && hai[i+2] > 0){
            mentu.add(i); mentu.add(i+1); mentu.add(i+2);
            hai[i]--; hai[i+1]--; hai[i+2]--;
            judge(hai, mentu, atama);
         }
      }
   }
   // 表示
   static void print(List<Integer> mentu, int atama){
      for(int i = 0; i < mentu.size(); i++){
         System.out.print(mentu.get(i) + " ");
         if(i % 3 == 2)
            System.out.print("| ");
      }
      System.out.println(atama + " " + atama);
   }
}


上記の実行結果は下記のようになる
------------------------------------------------------
3 4 5 | 3 4 5 | 6 7 8 | 6 7 8 | 2 2
2 3 4 | 2 3 4 | 6 7 8 | 6 7 8 | 5 5
2 3 4 | 2 3 4 | 5 6 7 | 5 6 7 | 8 8
------------------------------------------------------

2010年6月1日火曜日

Android marketへの登録およびアプリのアップロード

このエントリーをはてなブックマークに追加
◆Android marketへの登録方法
Android marketへの登録については下記サイトを参考にさせていただきました.
注意点としては,登録料として$25が必要となります.
また,クレジッドカード払いとなるのですが,JCBは使えません.

Android Marketのユーザ登録開始&登録方法(1) « 突然消失するかもしれないブログ

◆アップロードに関して
apkファイルをアップロードする際,アプリケーションに対して署名を行う必要があります.Eclipseを使用している人は,簡単に署名を行えます.
署名に関しては,下記サイトが参考となりました.

八角研究所 : Android で再開する Java プログラミング(13) - Android Market で作品を公開しよう!

注意点として,Android marketにアップロードするアプリは,動作を保証するバージョンを明記する必要があるということです.
アプリのAndroidManifest.xmlにて,

<uses-sdk android:minsdkversion="4" />

等を記載しましょう.4はAndroid SDK1.6を指しますので,そこはご自分のアプリの最小バージョンを明記しましょう.

ちなみに,私は,仕事効率化カテゴリーに「MultiSearch」というアプリケーションをアップロードしました.


公開して2日間経ちましたが30ダウンロードされているみたいです.嬉しいです.

以下,説明&アプリのスクリーンショットです.よろしければお使いください.

--
MultiSearchは、検索のためのユーティリティソフトウェアです。
MultiSearchでは、ドロップダウンメニューから、検索サイトを選択し、文字列を検索することで、その該当検索サイトから直接 検索結果を取得できます。そのため、無駄なステップを踏む必要がなく、快適に検索を行うことができます。現在、対応している検索サイトは、Wikipedia、英辞郎、クックパッ ド、e-Words、はてなキーワード、Acronyms(頭字語検索)となっています。





TeX早見表

このエントリーをはてなブックマークに追加
論文等を制作する際に使用する組版ソフト「TeX」の早見表を制作しました.

 TeXの環境構築等については言及していないので,ある程度TeXを触ったことがあるユーザをターゲットとしています.

具体的な内容は下記のようになっています.
・箇条書き
・画像・図の張り方
・表の張り方
・参考文献の書き方
・各種記号
・各種書体
・数式
・その他Tips集

ダウンロードは下記から行ってください.
http://ayakixlablog.web.fc2.com/tex_hayami.pdf