JavaScriptで作った小町算のプログラムをJavaに翻訳してみました。(^_^;
実行結果は、JavaScriptの約10倍ぐらい遅いようです。お粗末な結果となってしまいました。(^_^;
面倒だけど、アルゴリズム辞典などから自作のeval()を作った方がいいのかな。(^_^;
●Komachizan01.java
/* * Komachizan01.java * * □1□2□3□4□5□6□7□8□9=100 * * (1)□={"","-","+"} * (2)□={"","-","+","*","/"} * */ import javax.script.*; public class Komachizan01 { static ScriptEngineManager factory = new ScriptEngineManager(); static ScriptEngine engine = factory.getEngineByName("JavaScript"); static String sEval(String sExpr) { try{ return( engine.eval(sExpr).toString() ); } catch(Exception e){ // System.out.println(e); return("error: "+e); } } static double dEval(String sExpr) { try{ return( Double.parseDouble(engine.eval(sExpr).toString()) ); } catch(Exception e){ // System.out.println(e); return( Double.NaN ); } } static boolean next_rep_perm(int[] p, int n, int r) { int cy=1; for(int i=r-1; i>=0; i--) { p[i]+=cy; if(p[i]>=n){ p[i]=0; cy=1; } else cy=0; } if(cy==0) return(true); return(false); } public static void main(String[] args) { final int M=100; final int N=3; // (1)空白と'+','-'だけ使用する場合 //final int N=5; // (2)空白と'+','-','*','/'を使用する場合 final int R=8; final String OPR=" -+*/"; char[] o=OPR.toCharArray(); int[] p=new int[R]; String f=""; long tm=System.nanoTime(); // Timer Start for(int i=0; i< 2; i++){ // 先頭は空白か'-'とする for(int j=0; j< R; j++) p[j]=0; do{ f=String.format("%c1%c2%c3%c4%c5%c6%c7%c8%c9",o[i], o[p[0]],o[p[1]],o[p[2]],o[p[3]],o[p[4]],o[p[5]],o[p[6]],o[p[7]]); f=f.replace(" ",""); //System.out.println(f+"="+sEval(f)); if(dEval(f)==M) System.out.println(f+"="+M); } while(next_rep_perm(p,N,R)); } tm=System.nanoTime()-tm; // Timer Stop System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); } }
●実行結果
123-45-67+89=100 123-4-5-6-7+8-9=100 123+45-67+8-9=100 123+4-5+67-89=100 12-3-4+5-6+7+89=100 12+3-4+5+67+8+9=100 12+3+4+5-6-7+89=100 1+23-4+56+7+8+9=100 1+23-4+5+6+78-9=100 1+2+34-5+67-8+9=100 1+2+3-4+5+6+78+9=100 -1+2-3+4+5+6+78+9=100 Runtime : 1.747 [sec]
※参考URL
●以前、出題したプログラムクイズをJavaに翻訳してみた。
●小町算をJavaScriptで解いてみた(2)
●JavaScriptで作った小町算のプログラムをJavaに翻訳してみた。(2)
●evalMyJava(Javaでの自作のeval関数)
●Java文字列内の式の解釈/演算クラス(Hishidama's Java-Eval class)
●JavaからJavaScriptを呼び出すサンプル - 昼間のメモ
●using eval in Java - Stack Overflow
●『Javaによるアルゴリズム事典』サポートページ
C言語による最新アルゴリズム事典 (ソフトウェアテクノロジー)
- 作者: 奥村晴彦
- 出版社/メーカー: 技術評論社
- 発売日: 1991/03/01
- メディア: 単行本
- 購入: 20人 クリック: 396回
- この商品を含むブログ (95件) を見る
- 作者: 奥村晴彦,杉浦方紀,津留和生,首藤一幸,土村展之
- 出版社/メーカー: 技術評論社
- 発売日: 2003/05
- メディア: 単行本
- 購入: 2人 クリック: 61回
- この商品を含むブログ (60件) を見る