人気ブログランキング | 話題のタグを見る

ブログトップ

電子工作やってみたよ

このパズル、HP電卓で解けるかな

薬屋さんの広告のパズル、 ちょっと考えただけでは答えが出ません。
数独と同じようですが、種になる数字が入っていないので、これの方が難しいかもしれません。
頭で考えるのは、すぐギブアップしてHP電卓でやってみることにしました。
星印など図形に数値を入れるようになってますが、それではHP電卓のプログラムに入れられないのでA,B,C---に置き換えてやってみました。

ところがどうやっても答えが出ないのですよ。
悪いくせですぐ他人を疑ってしまうのですね。
お店まで「ほんとに答えあるのですか」とずうずうしく聞きに行ってしまいました。
答えはありますよ、と言う事で教えてもらった数値を問題に当てはめると確かに成り立つのですね。
そのあといろいろ調べたら結局私の作ったプログラムにミスがあることがわかりました。
大恥をかいてしまったのですが、やはり「他人を疑う前に自分を疑え」ですね。

ここでは答えは書かないでおきます。
興味のある方は挑戦してみて下さい。


このパズル、HP電卓で解けるかな_c0335218_20131613.jpg

図形の変数は、以下の形でアルファベットに置き換えました。

このパズル、HP電卓で解けるかな_c0335218_19352015.jpg


正解が出るまでに10分ほどかかりました。(USBから電源供給)
ゼロからスタートして正解までの距離しだいですね。

全プログラムリスト 
DM42(HP42Sと同じ) 動作はUSBで電源供給なので電池の3倍速で動いています。

01 LBL "ABC"
02 0.01 for next 0から10まで
03 STO "A"  変数Aをfor nextで順次数値を変えて確認する
04 LBL 01
05 0.01 for next 0から10まで
06 STO "B"  変数Bをfor nextで順次数値を変えて確認する
07 LBL 02
08 0.01    for next 0から10まで
09 STO "C"  変数Cをfor nextで順次数値を変えて確認する
10 LBL 03
11 0.01     for next 0から10まで
12 STO "D"  変数Dをfor nextで順次数値を変えて確認する
13 LBL 04
14 0.01 for next 0から10まで
15 STO "E"  変数Eをfor nextで順次数値を変えて確認する
16 LBL 05
17 0.01 for next 0から10まで
18 STO "F"  変数Fをfor nextで順次数値を変えて確認する
19 LBL 06
20 XEQ "CHK"   数値を変化させながら合計が結果に対応するかチェックする
21 ISG "F"
22 GTO 06 Fが10に到達するまで1づつ増やしながら LBL 06 へ行く
23 ISG "E"
24 GTO 05 Fが10に到達するまで1づつ増やしながら LBL 06 へ行く
25 ISG "D"
26 GTO 04 Fが10に到達するまで1づつ増やしながら LBL 06 へ行く
27 ISG "C"
28 GTO 03 Fが10に到達するまで1づつ増やしながら LBL 06 へ行く
29 ISG "B"
30 GTO 02 Fが10に到達するまで1づつ増やしながら LBL 06 へ行く
31 ISG "A"
32 GTO 01 Fが10に到達するまで1づつ増やしながら LBL 06 へ行く
33 999      答えが無ければ999を表示して終わりとする
34 R/S      ストップする
-------------------------------------------------------------------
35 LBL "CHK" サブルーチン  代入された数値で計算して答えが合っているか確認する
36 RCL "A"
37 IP  Aの整数部分を取り出す
38 ENT Aをシフト
39 + AとAを足す、すなわちAを2倍する
40 RCL "B"
41 IP Bの整数部分を取り出す
42 + Aを2倍したものにBを足す
43 13
44 XキY 変数3個合計したものが13で無いならば戻る
45 RTN
46 RCL "B"
47 IP Bの整数部分と
48 RCL "C"
49 IP Cの整数部分と
50 +
51 RCL "D"
52 IP Dの整数部分を合計する
53 +
54 9
55 XキY 変数3個合計したものが9で無いならば戻る
56 RTN
57 RCL "E"
58 IP Eの整数部分と
59 ENT
60 + EとEを足す、すなわちEを2倍する
61 RCL "F"
62 IP Fの整数部分を加算する
63 +
64 13
65 XキY     変数3個合計したものが13で無いならば戻る
66 RTN
67 RCL "A"
68 IP Aの整数部分と
69 RCL "B"
70 IP Bの整数部分と
71 +
72 RCL "E"
73 IP Eの整数部分を加算して
74 +
75 14
76 XキY     変数3個合計したものが14で無いならば戻る
77 RTN
78 RCL "A"
79 IP Aの整数部分と
80 RCL "C"
81 IP Cの整数部分と
82 +
83 RCL "E"
84 IP Eの整数部分を加算して
85 +
86 15
87 XキY     変数3個合計したものが15で無いならば戻る
88 RTN
89 RCL "B"
90 IP Bの整数部分と
91 RCL"D"
92 IP
93 + Dの整数部分と
94 RCL "F"
95 IP Fの整数部分を加算して
96 +
97 6
98 XキY     変数3個合計したものが6で無いならば戻る
99 RTN
100 XEQ "ALLAD" 全部が一致したら "ADDAD"を実行する
101 STOP
102 RTN
------------------------------------------------------------------
103 LBL "ALLAD" 正解が出たものを見やすく一つの変数に合成する
104 0
105 STO "ALL" 合成数の初期値をまずゼロにする
106 RCL "A"
107 IP
108 100000
109 ×
110 STO "ALL" 変数Aの整数部分を100000倍して合成数に置く
111 RCL "B"
112 IP
113 10000
114 ×
115 STO + "ALL" 変数Bの整数部分を10000倍して合成数に加算する
116 RCL "C"
117 IP
118 1000
119 ×
120 STO + "ALL" 変数Cの整数部分を1000倍して合成数に加算する
121 RCL "D"
122 IP
123 100
124 ×
125 STO + "ALL" 変数Dの整数部分を100倍して合成数に加算する
126 RCL "E"
127 IP
128 10
129 ×
130 STO + "ALL" 変数Eの整数部分を10倍して合成数に加算する
131 RCL "F"
132 IP
133 STO + "ALL" 変数Fの整数部分を合成数に加算する
134 RCL "ALL"
135 PSE 合成数を表示して終わり
136 STOP

========


以下のものは同じ問題をF-BASIC97で書いたものです。
WinXP上で動作させて約1秒で答えが出ました。
F-BASICはコンパイラ言語ですが、こんなにスピードの違いあるのは不思議です。
HP電卓のプログラムのどこかでミスっているのかも知れません。
答えはどちらでやっても同じ正解でした。

全プログラムリスト 
F-BASIC97にて。

'ABC
cls
for A=0 to 9
for B=0 to 9
for C=0 to 9
for D=0 to 9
for E=0 to 9
for F=0 to 9
gosub *CHK
next
next
next
next
next
next
?" ENDEND "
stop
*CHK
if A+A+B<>13 then return
if B+C+D<>9 then return
if E+E+F<>13 then return
if A+B+E<>14 then return
if A+C+E<>15 then return
if B+D+F<>6 then return
goto *OKOK
return
*OKOK
print "A B C D E F =";
print A;B;C;D;E;F
stop
end

========


これ 数学の問題ではないですね。 やはりパズルと言う事でしょうか。
もっと 数学らしい問題をやらねば。

先日 たしか9歳の男の子が数学検定1級に受かったそうですね。
すごいですね





電子工作ランキング

にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村



by telmic-gunma | 2019-12-23 22:31 | HP電卓