プログラム?(VBS若しくは、javascript)で、
以下の条件のを作ってください
(例)
式 4 3 3=10 1 1 1 1 1 1=6
答え 4+3+3=10 1+1+1+1+1+1=6
みたいな感じです。
いわゆる穴埋めです。プログラムの最後にMSGBOX(VBSだったら)で表示するようお願いします。
答えをだすサイトはたくさんありますが、どういう仕組みなのか(子供でもわかるぐらいやさしく)教えてください。基本的にどんなプログラムでも良いですが、簡単なものでお願いします。まだ、初心者なもので・・・
ポイントをあまり持っていないため、回答5件までとさせて頂きます。コメントでの回答もお待ちしております。すいませんが宜しくお願いします。
JavaScriptで書いてみました。下記のソースをHTMLでセーブして実行してみてください。
与えられた問題の空白部分に、順々に四則演算式を並べていき(重複を許す順列)、その計算結果をeval関数で判定しています。
<html lang="ja"> <head> <script type="text/javascript"> <!-- var n, p; var items; var answer = ''; var tbl = new Array('+', '-', '*', '/'); //使用する演算式 //正解をanswerに代入 function check() { var i; var e = items[0]; for (i = 0; i < n; i++) { e = e + p[i] + items[i + 1]; } e1 = e.replace('=', '=='); //JavaScriptでは等式は '==' なので置換 //式を実行してみて正しければ代入 if (eval(e1)) { answer = answer + e + '<br />'; } } //重複を許す順列の生成 function rep_perm(pos) { var i; if (pos == n) { check(); } else { for (i = 0; i < tbl.length; i++) { p[pos] = tbl[i]; rep_perm(pos + 1); } } } //答えを探索 function search() { var q = document.getElementById('question').value; items = q.split(' '); //個々の要素に分解 n = items.length - 1; p = new Array(n); rep_perm(0); document.getElementById('answer').innerHTML = answer; } //結果クリア function cancel() { document.getElementById('answer').innerHTML = ''; } --> </script> </head> <body> <form> 問題を入力してください:<br /> <input id="question" type="text" size="40" /> <input type="button" value="計算" onClick="search()" /> <input type="button" value="クリア" onClick="cancel()" /> </form> <br /> 結果は:<br /> <div id="answer" /> </body> </html>
早々の回答ありがとうございました。
233通りなんですね!
けれども、私はVBAのことについて分からないんです。これからは、人力検索の過去の質問を見るように心がけますね。
http://tool.stabucky.com/jamaica.htm
このページのソースを見ると、お探しのものが書いてありますね。
javascriptです。仕組みを(子供でもわかるぐらいやさしく)いうと、要するに総当りで計算して、黒サイコロの合計と同じ計算結果になったものだけを最後に出力するプログラムのようです。
「function seek_goal」のなかに、4重の入れ子になっているFor~Nextステートメントと、5重の入れ子になっているFor~Nextステートメントがありますね。
4重のほうですべての演算記号の順列をつくり、5重のほうですべての数値(白サイコロ)の順列を作り、それぞれ演算をしたけっかが黒サイコロの合計とおなじになるかどうかをチェックしています。プログラム自体の転記はマナー上できないのでご自身でサイトを見ながら検討していただければと思います。
プログラムのつくりも分かりやすく出来ていると思いますが、いかがですか?
実は、このサイトを前に拝見したのですがその時ソースの内容がどうなっているのか分からず困っていたのですが、Id:shujisiさんの回答で少し流れが分かりました。
ありがとうございました。
けれども、まだ分からないことがあるのでそれは自分で勉強することにします。(人力検索の意味が・・・)
本当にありがとうございました。
JavaScriptで書いてみました。下記のソースをHTMLでセーブして実行してみてください。
与えられた問題の空白部分に、順々に四則演算式を並べていき(重複を許す順列)、その計算結果をeval関数で判定しています。
<html lang="ja"> <head> <script type="text/javascript"> <!-- var n, p; var items; var answer = ''; var tbl = new Array('+', '-', '*', '/'); //使用する演算式 //正解をanswerに代入 function check() { var i; var e = items[0]; for (i = 0; i < n; i++) { e = e + p[i] + items[i + 1]; } e1 = e.replace('=', '=='); //JavaScriptでは等式は '==' なので置換 //式を実行してみて正しければ代入 if (eval(e1)) { answer = answer + e + '<br />'; } } //重複を許す順列の生成 function rep_perm(pos) { var i; if (pos == n) { check(); } else { for (i = 0; i < tbl.length; i++) { p[pos] = tbl[i]; rep_perm(pos + 1); } } } //答えを探索 function search() { var q = document.getElementById('question').value; items = q.split(' '); //個々の要素に分解 n = items.length - 1; p = new Array(n); rep_perm(0); document.getElementById('answer').innerHTML = answer; } //結果クリア function cancel() { document.getElementById('answer').innerHTML = ''; } --> </script> </head> <body> <form> 問題を入力してください:<br /> <input id="question" type="text" size="40" /> <input type="button" value="計算" onClick="search()" /> <input type="button" value="クリア" onClick="cancel()" /> </form> <br /> 結果は:<br /> <div id="answer" /> </body> </html>
プログラム(JavaScript)の作成ありがとうございました。
とても、分かりやすく短かったのでビックリしました。(多少分からないのがありますが、そこは勉強します。)
実際に実行してみたのですが、『問題を入力して下さい』の入力場所への入力の仕方が最初はイマイチ良く分かりませんでした。
ですが、そのぐらいなら私でも修正できますので・・・
あとは、結果がなかった時に何も現れないのが気になりましたが、
回答ありがとうございました。
プログラム(JavaScript)の作成ありがとうございました。
とても、分かりやすく短かったのでビックリしました。(多少分からないのがありますが、そこは勉強します。)
実際に実行してみたのですが、『問題を入力して下さい』の入力場所への入力の仕方が最初はイマイチ良く分かりませんでした。
ですが、そのぐらいなら私でも修正できますので・・・
あとは、結果がなかった時に何も現れないのが気になりましたが、
回答ありがとうございました。