ブログトップ

電子工作やってみたよ

前回 「数独」をBASICと乱数を使って解いてみたものを、同じ方法でHP電卓でやりました。
電卓の機種はメモリー容量の心配があったので容量の大きなHP42Sを使いました。
結果は 226ステップ(380Byte)で済みましたのでHP32SやHP15Cでもそのまま行けると思います。
(HP42Sはメモリーが7kByteあるので 5%しか使わなかったのですね。)

時間は 4x4マス(16マス)のうち空欄が2個の状態で、50秒かかりました。乱数なので運しだいですけれど。
演算時間に関して乱数で総当たりはHP電卓には可哀そうですが、人間が考える手順と同じ方法で答えを確定的に決めていければ早くすむと思います。
メモリ容量に関してはこの「HP42S」で頑張ってみてもし足りなくなるようならば「HP48G」(128kByte)もいいかな。

「こんなのやっても意味ないじゃん」と言われそうですが(すでに言われていたかな)そんなことありません。
「ボケ」の防止には十分役立っています。
ブログを見ていたら、どなたかHP電卓大好きなひとが、定年退職しちゃってHP電卓あっても計算することがない、となげいていましたが、そのお気持ちわかりますね。
 
今回「乱数」で答えを出すなどと超邪道な方法でしたが、次には人間が考える手順と同じ方法をやらせてみようとおもいます。
その次には、9X9マス フルサイズに挑戦、 すがわらさんが教えてくれた合成した方法などまだまだいろいろと楽しめそう。


c0335218_10495804.jpg

01  LBL "SDOK01"
02 LBL 01     ’ローカルフラグ メインループヘッド
03 XEQ 02     ’元になる問題を定数に入力する
04 XEQ 03     ’空いたマスに乱数で数値を埋めていく
05 XEQ 04     ’縦、横、ブロック、の3要素がルールに合うかチェック
06 FS? 01     ’OKでないなら先頭に戻り違う数値でやり直す
07 GTO 01
08 STOP

’4X4の16マスに問題を埋めていく(R1~R16を4X4マスに相当させる)
今回の問題 R1とR2が0が入って空欄です。
'R1=0, R2=0 R3=1, R4=2
’R5=1, R6=2 R7=3, R8=4
’R9=2, R10=3, R11=4, R12=1
'R13=4, R14=1, R15=2, R16=3

09 LBL 02
10 0
11 STO 01
12 STO 02
13 1
14 STO 03
15 2
16 STO 04
17 1
18 STO 05
19 2
20 STO 06
21 3
22 STO 07
23 4
24 STO 08
25 2
26 STO 09
27 3
28 STO 10
29 4
30 STO 11
31 1
32 STO 12
33 4
34 STO 13
35 1
36 STO 14
37 2
38 STO 15
39 2
40 STO 16
41 RTN


’R1~R16で0を探し0の所に1~4の値を乱数で入れる
42 LBL 03
43 RCL 01
44 XEQ 31
45 STO 01
46 RCL 02
47 XEQ 31
48 STO 02
49 RCL 03
50 XEQ 31
51 STO 03
52 RCL 04
53 XEQ 31
54 STO 04
55 RCL 05
56 XEQ 31
57 STO 05
58 RCL 06
59 XEQ 31
60 STO 06
61 RCL 07
62 XEQ 31
63 STO 07
64 RCL 08
65 XEQ 31
66 STO 08
67 RCL 09
68 XEQ 31
69 STO 09
70 RCL 10
71 XEQ 31
72 STO 10
73 RCL 11
74 XEQ 31
75 STO 11
76 RCL 12
77 XEQ 31
78 STO 12
79 RCL 13
80 XEQ 31
81 STO 13
82 RCL 14
83 XEQ 31
84 STO 14
85 RCL 15
86 XEQ 31
87 STO 15
88 RCL 16
89 XEQ 31
90 STO 16
91 RTN
92 LBL 31
93 Xキ0?
94 GTO 32
95 RAN
96 4
97 X
98 1
99 +
100 IP
101 LBL 32
102 RTN

’たて、よこ、ブロック、の4文字単位で数値のダブリがあるかチェックする。
103 LBL 04
104 RCL 01
105 RCL 02
106 RCL 05
107 RCL 06
108 XEQ 41
109 FS? 01
110 RTN

111 RCL 01
112 RCL 02
113 RCL 05
114 RCL 06
115 XEQ 41
116 FS? 01
117 RTN

118 RCL 01
119 RCL 02
120 RCL 05
121 RCL 06
122 XEQ 41
123 FS? 01
124 RTN

125 RCL 01
126 RCL 02
127 RCL 05
128 RCL 06
129 XEQ 41
130 FS? 01
131 RTN

132 RCL 01
133 RCL 02
134 RCL 05
135 RCL 06
136 XEQ 41
137 FS? 01
138 RTN

139 RCL 01
140 RCL 02
141 RCL 05
142 RCL 06
143 XEQ 41
144 FS? 01
145 RTN

146 RCL 01
147 RCL 02
148 RCL 05
149 RCL 06
150 XEQ 41
151 FS? 01
152 RTN

153 RCL 01
154 RCL 02
155 RCL 05
156 RCL 06
157 XEQ 41
158 FS? 01
159 RTN

160 RCL 01
161 RCL 02
162 RCL 05
163 RCL 06
164 XEQ 41
165 FS? 01
166 RTN

167 RCL 01
168 RCL 02
169 RCL 05
170 RCL 06
171 XEQ 41
172 FS? 01
173 RTN

174 RCL 01
175 RCL 02
176 RCL 05
177 RCL 06
178 XEQ 41
179 FS? 01
180 RTN

181 RCL 01
182 RCL 02
183 RCL 05
184 RCL 06
185 XEQ 41
186 FS? 01
187 RTN
188 12345678  ’答えが見つかったので画面に12345678と表示しておわる
189 RTN

 ’4文字単位で同じ数値が無いことを確認する
190 LBL 41   
191 STO 24
192 R↓
193 STO 23
194 R↓
195 STO 22
196 R↓
197 STO 21
198 SF? 01
199 RCL 22
200 X=Y?
201 GTO 42
202 RCL 21
203 RCL 23
204 XキY?
205 GTO 42
206 RCL 21
207 RCL 24
208 XキY?
209 GTO 42
210 RCL 22
211 RCL 23
212 XキY?
213 GTO 42
214 RCL 22
215 RCL 24
216 XキY?
217 GTO 42
218 RCL 23
219 RCL 24
220 XキY?
221 GTO 42
222 CF 01
223 RTN

224 LBL 42
225 RTN
226 END




今年はじめての イチゴの収穫です。
手入れをしていないので、やはりだんだんと小さくなってきたようです。
このイチゴ 今シーズン食べ終わったら植え替えてみます。
真ん中は大きさ比較のための電卓のHP29Cです。
わたしの美的センス なんとかならないか。

c0335218_10492890.jpg
ジャガイモです。 成長がびっくりするぐらい早いですね。

c0335218_10502969.jpg



ジャガイモのはな、  それなりにきれいですね。

c0335218_10510503.jpg


by telmic-gunma | 2018-05-24 11:20 | HP電卓 | Trackback | Comments(4)

101歳で現役のお医者さん(女性)の記事を読んでいたら、ボケ防止で「数独」をやっていると書いてありました。
私にとっては、 「数独」って何 初めて見たけど  と言う感じでした。

「数独」を調べてみたらもう一つの呼び名が「ナンプレ」と言い、クロスワードパズルの数字版のようなもと分かりました。
たてよこ 9マス X 9マス に1~9の一桁の数字をダブらないように入れていきます。
最初に問題として数字がいくつか入れてあり、解く人は空いたマスに約束に則り埋めていきます。
入門用としてやさしい 4マス X 4マス のものや 6マス X 6マスの物などがあります。

早速 初級の問題やってみました。かなり頭を使いましたね。
このお医者さんの歳まであと30年くらい。
そんな先まで私の脳みそ大丈夫か?


これは標準の大きさ 9X9マスのものです。 ルールは
1、 ひとつの横の列には、1から9までの数字が1回ずつ入る。
2、 ひとつの立ての列には、1から9までの数字が1回ずつ入る。
3、 太い線で囲まれたブロックに、1から9までの数字が1回ずつ入る。


c0335218_20592059.jpg



これは一番簡単な 4X4マスのものです。
1、 ひとつの横の列には、1から4までの数字が1回ずつ入る。
2、 ひとつの立ての列には、1から4までの数字が1回ずつ入る。
3、 太い線で囲まれたブロックに、1から4までの数字が1回ずつ入る。


c0335218_20590340.jpg

答えを書いてみます。  これは初級の初級です。
空いたマスにその行にない1~4の数字を選ぶわけです。

c0335218_20592634.jpg


本もたくさん出版されています。
「数独」と「ナンプレ」 この名前の違いは出版社のちがいですか?


c0335218_20584712.jpg
ネットを見るとこの「数独」をパソコンで解くソフトを何人も発表しています。
この「数独」をHP電卓を使って解くことができれば最高に面白いのではないかとおもいつきました。

まずはメモリー容量や論理の動きなど皆目わからないので、BASICでやってみます。
最初はごく普通に、縦横のデータから可能性のある数値を導き出してやろうとしました。
しかしパズルを計算機で解くというのは、普通の計算ソフトや制御ソフトとは違うのですね。
人間の頭で考えるとすぐできることが、ソフトに置き換えるというのはすごく難しいようです。
行ったり戻ったり もうぐちゃぐちゃ。 二週間考えてもソフトできませんでした。(私だけかもしれませんが)
逆に考えると、人間の脳というのは、そんなプログラムが出来ていない問題でもちゃんと答えをだしてくれるというすごいものなのですね。
そんな時思いついたのは、データを入力した表が正しいかいなかは、パソコンで瞬時に解るのですからデータを乱数で作ってもいいのじゃないかということです。
正攻法はとりあえず諦めて 乱数を発生させて空欄にはめ込んで、正解になるまで何度も繰り返すという強引な方法でやってみました。

これは エプソンの PC386LSC です。
NECのPC9801のソフトがそのままうごきます。
30年近く前のものになるのでしょうか。
デスクトップパソコンとノートパソコンの丁度あいだと言ったところですね。
キーはデスクトップと同じで押しやすく 出張にも持って行きやすかったので気に入ってました。


c0335218_20585542.jpg
やってみた結果です。
4X4マスで合計16マスあるうち空欄の数で答えの出るまでの回数は大幅に違います。
空欄 2個  正解までの演算回数 10回
空欄 3個  正解までの演算回数 82回
空欄 4個  正解までの演算回数 450回
空欄 5個  正解までの演算回数 1384回
空欄 6個  正解までの演算回数 3737回
空欄 7個  正解までの演算回数 9038回  (これで 約 7分の時間がかかりました。)
空欄 8個  正解までの演算回数 200000回やっても答えは出ませんでした。(1時間以上)

やはり人間の頭で考えるような普通の手順で解くべきですね。
それと この問題はHP電卓で解けるかしら。 グダグダ考えているより作ってしまった方が早いですね。


N88BASICで 4X4を乱数で強引に解くプログラムです。 これは一日も掛からず出来ました。

1' SAVE "ADOK_M36",A
100'
103 RANDOMIZE
105 DIM X(20)
110 GOSUB 9800         ’問題のデータを読み込む
150 GOSUB 9000         ’問題を16マスに表示して確認する
170 '
180 GOSUB 9800         ’空欄のある問題のデータを読み込む
200 GOSUB 4000         ’すべての空欄(空いたマス)を乱数で埋める。
300 GOSUB 5000         ’縦横すべての条件を満たしているか確認する
310 CNT=CNT+1: PRINT CNT   ’乱数を入れて確認した回数を表示する
320 IF ER<>0 THEN GOTO 180  ’データが条件を満たさなければ180行がらやり直し
370 GOSUB 9000         ’条件を満たしたので完成した表16マスを表示する
380 '
990 PRINT" OK END "      ’完成したので"OK" を画面に表示する
995 STOP '停止して終了

4000'              16マスのうち空欄に乱数を入れる
4100 FOR I=1 TO 16
4110 A=( RND X 4 ) + 1    ’1~4の乱数を発生させる
4120 JF X(I)=0 THEN X(I)=A  ’空欄ならば乱数を入れる
4180 NEXT I
4250 RETURN

5000' 4文字単位で処理するためにデータ転送して同じ数字が無いか比較する
5510 S1=X(1):S2=X(2):S3=X(5):S4=X(6):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'AA
5520 S1=X(3):S2=X(4):S3=X(7):S4=X(8):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'BB
5530 S1=X(9):S2=X(10):S3=X(13):S4=X(14):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'CC
5540 S1=X(11):S2=X(12):S3=X(15):S4=X(16):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'DD

5545 '横の行 4文字のデータ比較
5550 S1=X(1):S2=X(2):S3=X(3):S4=X(4):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'A1
5560 S1=X(5):S2=X(6):S3=X(7):S4=X(8):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'A2
5570 S1=X(9):S2=X(10):S3=X(11):S4=X(12):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'A3
5580 S1=X(13):S2=X(14):S3=X(15):S4=X(16):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'A4

5585 '縦の列 4文字のデータ比較
5590 S1=X(1):S2=X(5):S3=X(9):S4=X(13):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'B1
5600 S1=X(2):S2=X(6):S3=X(10):S4=X(14):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'B2
5610 S1=X(3):S2=X(7):S3=X(11):S4=X(15):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'B3
5620 S1=X(4):S2=X(8):S3=X(12):S4=X(16):GOSUB 5700: IF ER<>0 THEN GOTO 5650 'B4
5630 PRINT "Double Check OK"
5650 RETURN

5700 ' 4文字についてのみ同じものが無いか比較する
5710 ER=0
5720 IF S1<>0 AND S1=S2 THEN ER=1: GOTO 5760
5725 IF S1<>0 AND S1=S3 THEN ER=1: GOTO 5760
5730 IF S1<>0 AND S1=S4 THEN ER=1: GOTO 5760
5735 IF S2<>0 AND S2=S3 THEN ER=1: GOTO 5760
5740 IF S2<>0 AND S2=S4 THEN ER=1: GOTO 5760
5745 IF S3<>0 AND S3=S4 THEN ER=1: GOTO 5760
5760 RETURN

9000 ' 全16文字データを画面表示する
9010 PRINT "X 1=" ; X(1); X(2); X(3); X(4)
9015 PRINT "X 5 =" ; X(5); X(6); X(7); X(8)
9020 PRINT "X 9 =" ; X(9); X(10); X(11); X(12)
9025 PRINT "X13=" ; X(13); X(14); X(15); X(16)
9030 RETURN

9800 ' 問題データ  (ゼロは空欄のことです)
9810 X(1)=0:X(2)=4:X(3)=1:X(4)=2
9810 X(5)=1:X(6)=2:X(7)=3:X(8)=4
9810 X(9)=2:X(10)=3:X(11)=4:X(12)=1
9810 X(13)=4:X(14)=1:X(15)=0:X(16)=3
9830 RETURN




我が家の庭に咲いている花


西洋シャクナゲ
c0335218_21445058.jpg





昔は 「テツセン」 と言ったそうです。

c0335218_21452092.jpg
c0335218_21470978.jpg


散歩している途中の道端にあるリンゴの木です。 
ちょうど花が咲いていました。

c0335218_21453574.jpg

c0335218_21454449.jpg

道ばたに咲いていたきれいな花、 名前は解りません。

c0335218_21445672.jpg

















by telmic-gunma | 2018-05-12 12:58 | HP電卓 | Trackback | Comments(10)