以前、JavaScriptで作ったSEND MORE MONEY のプログラムをJavaに翻訳してみました。
Javaのプログラムは、ふつうCより遅いんですが、このプログラムの場合は、Cより少し速いようです。意外な結果が出てしまいました。(^_^;
●SendMoreMoney01.java
/* * SendMoreMoney01.java */ class SendMoreMoney01 { // 順列生成 static boolean next_perm(int[] p, int n, int r) { int i, j; int t; if(r <= 0 || n < r) return(false); for(i = r + 1; i <= n-1; i++) for(j = i; j >= r + 1 && p[j-1] < p[j]; j--){ t = p[j]; p[j] = p[j-1]; p[j-1] = t; // swap(p,j,j-1); } for(i = n - 1; i > 0 && p[i-1] >= p[i]; i--); if(i==0) return(false); for(j = n - 1; j > i && p[i-1] >= p[j]; j--); t = p[j]; p[j] = p[i-1]; p[i-1] = t; // swap(p,j,i-1); for(j = n - 1; i < j; i++, j--){ t = p[i]; p[i] = p[j]; p[j] = t; // swap(p,i,j); } return(true); } static int Hn(int p, int q, int r,int s, int t) { return(10*(10*(10*(10*p+q)+r)+s)+t); // 10000*p+1000*q+100*r+10*s+t } public static void main(String[] args) { int[] p = {0,1,2,3,4,5,6,7,8,9}; int s,e,n,d,m,o,r,y; int send, more, money; long tm=System.nanoTime(); // Timer Start do{ s=p[0]; e=p[1]; n=p[2]; d=p[3]; m=p[4]; o=p[5]; r=p[6]; y=p[7]; if(s*m==0) continue; // (s==0||m==0)ならスキップ send = Hn(0,s,e,n,d); more = Hn(0,m,o,r,e); money = Hn(m,o,n,e,y); if(send+more!=money) continue; // チェックを潜り抜けたものだけを出力 System.out.println(" "+send); System.out.println(" +"+more); System.out.println("-------"); System.out.println(" "+money); System.out.println(); }while(next_perm(p,10,8)); tm=System.nanoTime()-tm; // Timer Stop System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); } }
●実行結果
9567 +1085 ------- 10652 Runtime : 0.091 [sec]
※参考URL
http://www.coderanch.com/t/595306/java/java/Optimizing-send-money-code
●SEND MORE MONEY C言語プログラム - rscの日記
●SEND MORE MONEY(2) C++ - rscの日記
●SEND MORE MONEY(3) C言語プログラム - rscの日記
●SEND MORE MONEY JavaScriptプログラム - rscの日記
●SEND MORE MONEY in Python - rscの日記
●SEND MORE MONEY in Ruby - rscの日記
●SEND MORE MONEY in Python(2) - rscの日記
●SEND MORE MONEY in Ruby(2) - rscの日記
●SEND MORE MONEY in Python(3) - rscの日記
- 作者: 林晴比古
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/11/29
- メディア: 単行本
- クリック: 2回
- この商品を含むブログ (1件) を見る
- 作者: 柴田望洋
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2007/08/08
- メディア: 単行本
- 購入: 16人 クリック: 271回
- この商品を含むブログ (55件) を見る
Java言語プログラミングレッスン 第3版(上) Java言語を始めよう
- 作者: 結城浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/11/14
- メディア: 単行本
- 購入: 1人 クリック: 7回
- この商品を含むブログ (8件) を見る
Java言語プログラミングレッスン 第3版(下) オブジェクト指向を始めよう
- 作者: 結城浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/11/14
- メディア: 単行本
- クリック: 4回
- この商品を含むブログ (10件) を見る