人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

私が持ってる玩具でジャマイカというのがあるのですが
http://www.masudaya.com/product/jamaica.html
これの最適解をExcelマクロで出す方法を考えてください。
詳細はコメント参照。

●質問者: きねーま
●カテゴリ:学習・教育 ゲーム
✍キーワード:Excel コメント ジャマイカ マクロ 玩具
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Mook
●60ポイント ベストアンサー

面白そうなので一応作成してみました。


Shoot で初期化、Jamaica で回答を表示します。

実際の計算をしているのは JCalc の部分です。

Option Explicit

'//-------------------------------------------
'// True ・・・ 完全一致のみ表示
'// False ・・・ 最も近い計算値を表示
Const CompleteMatch = True

Public Goal As Double  '// 目標値(黒ダイスの合計)
Public Nqueue(5) As Double  '// 白ダイス
Public OutRow As Long  '// 結果出力行
Public NearNum As Double  '// 近似解表示字の最近値

Sub Shoot()
'-----------------------------------------------------------------
 Columns("B").Value = ""
 
 Dim c
 For Each c In Array("D1", "D2", "D3", "D4", "D5", "F2")
 Range(c).Value = Int(Rnd() * 6) + 1
 Next
 Range("F1").Value = 10 * (Int(Rnd() * 6) + 1)
End Sub

'-----------------------------------------------------------------
Sub Jamaica()
'-----------------------------------------------------------------
 Dim c, ns, i As Long
 
 ns = Array("D1", "D2", "D3", "D4", "D5")
 For i = 0 To 4
 Nqueue(i) = CDbl(Range("Num" & i + 1))
 Next
 Nqueue(5) = 1
 Goal = CDbl(Range("F1").Value + Range("F2").Value)
 
 If CompleteMatch = True Then
 NearNum = Goal
 Range("B2") = "NO ANSWER"
 OutRow = 2
 Else
 NearNum = 0
 End If
 
 JCalc Nqueue(0), 0, CStr(Nqueue(0))
End Sub

'-----------------------------------------------------------------
Sub JCalc(num As Double, ByVal index As Integer, exp As String)
'-----------------------------------------------------------------
 If index = 4 Then
 If Abs(Goal - NearNum) > Abs(Goal - num) Then
 NearNum = num
 OutRow = 2
 Columns("B") = ""
 End If
 
 If num = NearNum Then
 Cells(OutRow, "B").Value = exp & " = " & num
 OutRow = OutRow + 1
 End If
 Exit Sub
 End If
 
 index = index + 1
 JCalc num + Nqueue(index), index, "(" & exp & " + " & Nqueue(index) & ")"
 JCalc num - Nqueue(index), index, "(" & exp & " - " & Nqueue(index) & ")"
 JCalc num * Nqueue(index), index, "(" & exp & " * " & Nqueue(index) & ")"
 JCalc num / Nqueue(index), index, "(" & exp & " / " & Nqueue(index) & ")"
 JCalc Nqueue(index) - num, index, "(" & Nqueue(index) & " - " & exp & ")"
 If num <> 0 Then JCalc Nqueue(index) / num, index, "(" & Nqueue(index) & "/" & exp & ")"
End Sub

GUI を付けたファイルを公開しましたので、興味あったらご覧ください。

http://d.hatena.ne.jp/Mook/20091027

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ