jamaicaで遊ぶことが多いのですが

プログラム?(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件までとさせて頂きます。コメントでの回答もお待ちしております。すいませんが宜しくお願いします。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2011/03/09 18:10:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Galapagos No.3

回答回数963ベストアンサー獲得回数89

ポイント40pt

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>
id:karajin1128

プログラム(JavaScript)の作成ありがとうございました。

とても、分かりやすく短かったのでビックリしました。(多少分からないのがありますが、そこは勉強します。)

実際に実行してみたのですが、『問題を入力して下さい』の入力場所への入力の仕方が最初はイマイチ良く分かりませんでした。

ですが、そのぐらいなら私でも修正できますので・・・

あとは、結果がなかった時に何も現れないのが気になりましたが、

回答ありがとうございました。

2011/03/02 20:54:00

その他の回答2件)

id:garyo No.1

回答回数1782ベストアンサー獲得回数96

ポイント40pt

以前このような質問があったようです

http://q.hatena.ne.jp/1256711755

http://q.hatena.ne.jp/1256599368

id:karajin1128

早々の回答ありがとうございました。

233通りなんですね!

けれども、私はVBAのことについて分からないんです。これからは、人力検索の過去の質問を見るように心がけますね。

2011/03/02 18:47:24
id:shujisi No.2

回答回数15ベストアンサー獲得回数0

http://tool.stabucky.com/jamaica.htm

このページのソースを見ると、お探しのものが書いてありますね。

javascriptです。仕組みを(子供でもわかるぐらいやさしく)いうと、要するに総当りで計算して、黒サイコロの合計と同じ計算結果になったものだけを最後に出力するプログラムのようです。

「function seek_goal」のなかに、4重の入れ子になっているFor~Nextステートメントと、5重の入れ子になっているFor~Nextステートメントがありますね。

4重のほうですべての演算記号の順列をつくり、5重のほうですべての数値(白サイコロ)の順列を作り、それぞれ演算をしたけっかが黒サイコロの合計とおなじになるかどうかをチェックしています。プログラム自体の転記はマナー上できないのでご自身でサイトを見ながら検討していただければと思います。

プログラムのつくりも分かりやすく出来ていると思いますが、いかがですか?

id:karajin1128

実は、このサイトを前に拝見したのですがその時ソースの内容がどうなっているのか分からず困っていたのですが、Id:shujisiさんの回答で少し流れが分かりました。

ありがとうございました。

けれども、まだ分からないことがあるのでそれは自分で勉強することにします。(人力検索の意味が・・・)

本当にありがとうございました。

2011/03/02 20:54:23
id:Galapagos No.3

回答回数963ベストアンサー獲得回数89ここでベストアンサー

ポイント40pt

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>
id:karajin1128

プログラム(JavaScript)の作成ありがとうございました。

とても、分かりやすく短かったのでビックリしました。(多少分からないのがありますが、そこは勉強します。)

実際に実行してみたのですが、『問題を入力して下さい』の入力場所への入力の仕方が最初はイマイチ良く分かりませんでした。

ですが、そのぐらいなら私でも修正できますので・・・

あとは、結果がなかった時に何も現れないのが気になりましたが、

回答ありがとうございました。

2011/03/02 20:54:00
  • id:karajin1128

    基本的にどんなプログラムでも良いのですが・・・

    プログラムは、VBS,javascriptに限定します。
    宜しくお願いします。
  • id:SALINGER
    garyoさんのリンク先にもあるように、以前、作成したときに1週間近くかかりました。
    それで子供にもわかるようにというのはちょっと無理な気がします。
    答えを見るのではなく自分で考えて作るのはとても楽しいのでチャレンジしてみてください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません