ブログトップ

電子工作やってみたよ

いままで利根川サイクリングロードを何度か走りましたが、今回一番上流の端っこの出発点に初めて行ってみました。
前回と同じく車で 道の駅よしおか温泉まで行きそこから地図を頼りに利根川サイクリングロードを上流にすすみました。
このあたり国道17号線と一緒になったり分かれたりで道に迷ってしまったのですが、GPSを頼りにして何とか利根川サイクリングロードを見つけました。


今回の装備 自転車にキャリアや泥除けを付けて普通の形にしてみました。

c0335218_20165396.jpg


これが利根川サイクリングロードの上流の端っこ。
「出発点」と思っていたところが、なんと「終点」でした。
普通 上流が「出発点」でないのかなあ。
それと名前は「利根川自転車道」でした。
ここが 太平洋まで240kmの端っこなのに、あまりにも素っ気ない感じ。

c0335218_19562191.jpg


終点のまわりは野球が出来るグランドになってました。
ベンチなど休憩できるものは何もありませんでした。


c0335218_19554990.jpg

「終点」から「よしおか温泉」に向けて下りの途中

c0335218_19553628.jpg

途中 自転車に乗っている人には一人も会いませんでした。 散歩している人は、結構いました。

c0335218_19545072.jpg


途中 榛名山を望むところ。

c0335218_19552850.jpg



途中に咲いていた コスモスの花。 模様や色などたくさんの種類がるのですね。

c0335218_19592246.jpg


c0335218_19580467.jpg


c0335218_19595366.jpg

c0335218_20001193.jpg


c0335218_20082651.jpg


c0335218_20085157.jpg



# by telmic-gunma | 2018-09-16 20:10 | サイクリング | Trackback | Comments(5)

スプリング付き皮サドル組み付けてから、初めてのサイクリングに行ってみました。
安全なところということで、車に自転車積んで35km先の、群馬県渋川の先、道の駅よしおか温泉まで行きました。
そこから自転車に乗り換えて、側を通っている利根川サイクリングロードを太平洋の方向へ下って行きました。
今回 ブルックスのスプリング付きサドルを組み付けるついでに細かな外せる部品すべて外して、使い勝手がどうなるかの試しもあります。
代わりに背中には、ドイターの30Lリュックを背負いました。
工具や予備チューブ、水筒など全部入れたので合計5.5kgにもなってしまいました。

まずは、ブルックスのスプリング付き皮サドルの感想。
履いていたズボンも関係するのでしょうが、とにかくお尻がサドルの上でつるつると滑ってお尻の位置が定まらない感じ。
それとサドルのスプリングが固くて無いのといっしょ。
誰かのブログに「5000kmくらい乗ったらやっとお尻に馴染んできた」と書いてありましたが、これはサドルがお尻に馴染んだのではなくてお尻がサドルに馴染んだのでしょうね。
なのでサドルの印象を言うにはまだまだ乗り慣れてみないと判らないですね。
そうそう 今回、自動車で35kmも先まで移動しながら自転車で漕いだ距離は往復25km程度でした。
バカみたい。



今回 不便を感じたことは、
1、リュックに詰めたものは、自転車を停止して背中から降ろさなくてはならないので取り出しに時間がかかる。
2、重いリュックの分さらにお尻に過重がかかるのでお尻が痛い、さらに背中の熱が逃げない。
3、スピードメーター(距離積算計、時計付き)はハンドルに必要
4、GPSは必要
5、水筒はフレームに付ける
6、A4サイズで地図がハンドルの上にあると良い。(風の抵抗を受けないようにして)
7、羊かんやパンなどすぐ取り出して食べられると良い。
8、タオルを走行中でも簡単に取り出して顔を拭けると良い。
9、財布や携帯、車のカギなどは、体に付けておきたい。
10、すべての荷物は自転車に付けて、人間には何もつけず自由でありたい。
11、自転車を立ちかけるのに不便なのでスタンドがほしい。

とにかく必要な物へのアクセスタイムは1秒程度でないと役に立たない。
結局 元に戻ってしまうのかな。
まあ 少しづつ改良していけばいいですね。





フレームに付いていたキャリアや水筒などはみな外しました。 
ペダルの所にある黄色のアームは、自転車を持ち上げて移動するときに使う取っ手です。
これは、いまは無きアルプス自転車で販売していたキャンピング車 「アルプスローバー」の特徴です。

フロント 44X38X26  リア 15~28 6段
c0335218_20250066.jpg


ハンドルにも何も付けてありません。 
最初のオリジナルは、 普通のドロップハンドルが付いていたのですけれどね。
私にとっては、これの方が手が圧迫されず楽なんです。

c0335218_20244131.jpg


ここは 道の駅 よしおか温泉です。 群馬県の渋川と前橋のあいだ、国道17号線と利根川のそばにあります。
大きな駐車場や綺麗なトイレが有るのでサイクリングの拠点とするにはとてもいいですね。
汗をかいた帰りには温泉に入ればさっぱりしますしね。 最近はやりの足湯もありました。

c0335218_20241958.jpg

遠くからも良く目立つ風力発電機が一つ立っています。
検証実験で建てたそうですが、お役目終わって そのうち解体するそうです。 
群馬の空っ風でも足りなかったのか。 もったいないですね。
国道17号線の脇にあるので、よしおか温泉はこれ目指してすぐ行けます。

c0335218_20240206.jpg

飛行場はないけど、なぜか本物のグライダーが飾ってありました。
やはり本物は大きいですね。 台風きても平気かなあ。

c0335218_20241183.jpg


途中 利根川サイクリングロードの高まったところから利根川を覗いたところです。
サイクリングロードは土手の上じゃなくて山の淵といったところで、平らではなく結構10m位上がったり下がったりです。

c0335218_20310166.jpg

利根川サイクリングロードの道ばたで咲いていた花たちです。

c0335218_20224817.jpg


これ 自宅近くの散歩道でも咲いていましたね。

c0335218_20230349.jpg


これは ケイトウですね。
わたしが小さいとき、庭にたくさん咲いて埋め尽くされていた思い出があります。

c0335218_20235253.jpg



c0335218_20234253.jpg



# by telmic-gunma | 2018-09-02 16:20 | サイクリング | Trackback | Comments(2)

自転車は安全ですか?

今日( 2018-8-28 )ヤフーニュース見たら茨城県常総市の国道で朝4:20頃大型トラックが自転車旅行中の20代男性二人をはねてそのまま逃げた、と出ていました。二人とも意識不明の重体.
(次の日ニュースで二人の内一人死亡 朝4:20は今の時期もう暗いですね)

自転車に限らず歩行者など交通弱者がいつも犠牲になります。

しかし新聞に載るようなことは全体から見ればごく一部と思います。
その裏側には、新聞には載らない事故が数百倍、数千倍あると思われます。
自転車は弱い立場のせいか、事故となると被害者になると思っていましたが、最近加害者となってしまうことも多いみたい。
もし加害者となって相手を死亡させたりしたら億に近い損害賠償を請求されることも珍しくないでしょう。
しばらく前に女子大生が77歳の女性にぶつかり死亡させた事故がありましたね。
この女子大生の親はお医者さんで1億円の示談金を被害者に払ったとネットに出ていました。
このひとのように誰かがお金だしてくれればいいですが、二十歳前後で1億の借金などといったら前途真っ暗、
何のための人生だろうとなってしまいます。
被害者で有ろうと加害者であろうと、いくら保険に入っていても、すべてお金で解決できる問題ではないと思います。
一億円もらったとしても、死ぬまでベッドの上で何十年も過ごすなんてそれこそ地獄でしょう。

ではこういう悲劇を無くするにはどうしたらいいのでしょうか。
いつも思うのですが、一つの道路に歩行者と自転車そして自動車など、スピードが大きく違うものを一緒に走らせたら、
必ず事故が起きて当たり前と思います。
都会では歩道が整備されているので少しは良いと思いますが、田舎では歩道なんてまったくありません。
かりに歩道を歩いていても、最近は高齢者の運転する自動車からの攻撃で命を落とす人が多いようです。

自転車の使い方は大きく分けて二つあると思います。
一つは 通勤、通学、買い物などの実用 いまはこれ考えません。
もう一つは サイクリングなどのレジャー。 私はこれ専門ですが。
これは走ること自体を楽しめればいいので、

もう自動車や歩行者のいるところは走らない。
自転車専用道路(サイクリングロード)などに車で移動してから
そこで自転車で走れば、もうそこは天国。
信号もないし自由気ままに全力で走れます。
これしかないと思います。

最近、自転車専用道路ほんと沢山あります。
群馬の山奥から利根川の土手沿いに200km以上も続いた「利根川サイクリングロード」もあります。
それでも自損事故は起きるかも知れません。
でもヘルメットを被っていれば、最低限 命は助かることが出来るでしょう。

多摩サイクリングロードでこけた自民党の元幹事長 谷垣さんも命は大丈夫でしたね。
また 政界に復帰すると言ってるので元気になっているとおもいます。



川場村にある田んぼアートです。 すぐ近くにつり橋があり、その上から見学できるようになっています。


c0335218_17171939.jpg


はじめて植えた「サトイモ」です。 大きなイモできるかな。


c0335218_17140159.jpg




「いちご」です。  雑草にやられそう。 手入れしなくてはと思いつつやってません。

c0335218_17143674.jpg


「朝顔」です。 まだ元気ですね。


c0335218_17152788.jpg


# by telmic-gunma | 2018-08-28 17:24 | サイクリング | Trackback | Comments(0)

前回のブログ「華麗なる双輪主義」に出てきたスプリング付きサドル買っちゃいました。
「いいなあ」と思うと、もう我慢できなくなってしまう私の悪い性格が出てしまいました。
「サドル コンクエスト」をアマゾンで調べたらブルックス製のスプリング付き皮サドルがでました。
いろいろ調べたら、スプリング付きの物でもたくさんの種類があるのですね。
ブルックス_フライヤーのカスタマーレビューに10人の人が投稿していましたが、
皆さん最高ランクの5に入れており、異口同音に「良い買い物をした」と言ってるのを見て我慢できなくなってしまいました。
そしてアマゾンをポチっとやってしまったのですね。
いまのこの便利な世の中 ほんとにいいことなのでしょうか。
どうしても無駄遣いしてしまうようになっているんじゃないですか。

それはともかくサドルは直ぐきたので付けてみますた。
写真のものですが、スプリングが付いていても、それほど違和感はないと思います。
すぐ乗れれば良かったのですが、ちょうど出張になったのでしばしお預けです。
やはり最低100km以上乗らなければお尻に合うか判らないでしょうね。
出張から帰って乗るのが楽しみです。

ブルックスのカタログ写真です。やはり綺麗に撮れていますね。

c0335218_20095998.jpg


ブルックスのサドルをアルプスローバーに付けて、不要なものをみな外してみました。
このアルプスローバーは、元はキャンピング自転車です。 
これなら山の林道を走るためのパスハンターに見えますね。?

c0335218_20355226.jpg

ちょっと前方向から見ました。  ハンドルの位置が高いので恰好がいまいち、ママチャリみたいですね。
以前 ドロップハンドルで頑張って遊びまわっていたとき、体は前傾だけど首は上げていたので、
頸椎ヘルニア(首の骨のヘルニア)になってしまいました。
それ以来無理はやめました。

c0335218_20361197.jpg



ブルックスのスプリング付きサドル。 私が小さい頃の大人の自転車はみなこれだったような気がします。

c0335218_20364256.jpg



こんなにスプリングが大きくては、サドルバッグを付ける余裕が有りませんね。

c0335218_20363595.jpg
ついでに、いろいろな物を外したこの状態で重さをはかってみました。
みなさん良くやる、自転車を抱えて体重計に乗り全重量をはかり、次に人間だけの体重を量りその差を求める方法でやってみました。

人間 + 自転車 = 91.65kg
人間のみ     = 79.20kg
差(自転車単体) = 12.45kg

いがいや思っていた値より軽かったです。
元はキャンピング車なので頑丈なフレームの為15kg位あると思っていたんですけれど。
でも今のスポーツ車はみな10kg以下なんでしょうね。
パーツを変えて10kg以下にするには、べら棒な部品代がかかるでしょうから、
体重を減らした方がお金も安上がりに済みそうです。 でもないかな?



家の前の畑で、枝豆がたくさん出来ています。
奥に見えるのは、私の作業小屋です。
c0335218_20433123.jpg

おすそ分けしてもらった枝豆。
今年は、高温で雨が降らなかったので、出来が悪いそうです。 その分値段は高いみたいですけれど。

c0335218_20434194.jpg

庭に咲いたアサガオ

c0335218_20403885.jpg
毎朝 散歩する道ばたに咲いているきれいな花。 名前は不明

c0335218_20420171.jpg



c0335218_20422883.jpg



More
# by telmic-gunma | 2018-08-18 21:49 | サイクリング | Trackback | Comments(2)

「華麗なる双輪主義」 書いた人「小池一介」 発行2006年5月11日

自転車に関連したエッセイは好きなので、いろいろ読んでいますが、
その中でこの本は強烈な個性で自転車と人間の付き合い、そして自転車への愛情を語っています。
どちらかというと、こまかな技術的なことは少なく、感性の世界を「良くここまで考えますね」というくらい追及しています。
発行は12年前ですが、決して古いという感じはなく楽しく読めます。

著者の小池一介さん 歳は私よりちょっと上かなと思われます。
この本は、いろいろなブログに紹介されていますが、イギリスにしばらく住んでいたことぐらいで詳しくは解りません。



c0335218_20080219.jpg

この本の、心に残ったところを書いてみます。
以下 「私」とあるのは著者の小池一介さんです。 
*****************************************************
私は実は、かなりのバスケットマニアである。( 籠のバスケットです)
バスケットの、何がそんなに面白いのかと聞かれると困るが、これは理由なしに感覚的なものである。
材料となる植物のアースカラーもいいしその表面の質感も面白い。
バスケットの味わい深さというものは、これは茅葺き屋根の良さなのだ。
金属製自転車という機械の一部に、植物性であるバスケットが組み込まれる事によって、自転車が自然の風景の中にうまく溶け込むようになる。
籠がついた自転車は力まず、人口のものと自然の物との架け橋にになるのである。



c0335218_20074129.jpg


サドルにバネが入っているのを馬鹿にする傾向が、マニア間にあるようだが、これも気にすることはない。
英国には自転車で1300km 3日間走り続ける極限のレースがある。
これを走るとたいていの選手はお尻の痛みで、走り続けられなくなってしまう。
そういう要求に応えて、英国ではバネの入った細身のレース用サドルが1930年代に存在したが、これはすごく楽なサドルである。
そのサドルは現在、「コンクエスト」の名称で手に入る。


c0335218_20095998.jpg


私は自転車好きであるが、ほんのささいなことで、乗るのに「面倒くさい」と思うことがある。
ひとつはズボンの裾を処理すること。
もう一つは、自転車のために、それ専用の靴を履くことである。・・・・・・・
どんな靴でも乗れるペダルの付いた自転車は「敷居が低い」ので、自然とよく乗るようになることもメリットと言える。
私は両面踏みのペダルにしてから、「出撃回数」が激増したと断言できる。


c0335218_20111561.jpg



自転車には統一された色彩がエレガンスを生み出すという、時代を超えた法則があると言ってよい。
自転車の第一印象を決めるのは色だと思う。
「自分の色」というのがオーダーメイド自転車を作るときの、大きな醍醐味となる。
・・・・
大切な思い出の自転車が、自分の一番好きな色に塗られているのは幸福の結晶そのものという感じである。


自転車の色のことで、意外に見落とされているのが、乗りての服の色と自転車の色の不調和の問題だ。
車両が黒や白なら何を着ても合うものだが、オレンジ色とかの強いフレーム色では、着る洋服の色がかなり限定される。
場合によっては「毒トカゲ」さながらの配色になることを覚悟しなければいけなくなるのでご注意。



c0335218_20130460.jpg


弁当というのは楽しい。 これは歳を重ねても同じだと思う。
たまの休みに、どこかに持ってゆくものの場合は、
「うまいものをどこかへ運んで行って、安全なところでゆっくりと味わう」という、きわめて動物的な本能をも満足させてくれているにちがいない。


c0335218_20134478.jpg






アムステルダム・オリンピックの自転車競技で銀メダル、銅メダルを取ったジャック・ラウッターワッサーは90歳を超えてからも、自転車工場でのホイール組み立て工程を手伝うため自転車通勤をしていた。
94歳の時台所でころんで骨盤にヒビが入り、自転車から遠ざかってしまった。
亡くなったのは98歳であった。
ジャック本人から聞いた話。「自転車で転んだのだったら、”もう危ないから自転車に乗るな”
という神の声として受け入れられたかもしれないが、台所での事故で自転車を諦めることになったんだから、
悔やんでも悔やみきれない。
自転車こそが俺の唯一の健康法だったのに。」




自転車を壊さないように目的地まで乗るのと同じように、精神を肉体という船に乗せて人生の終着港まで無事に送り届けることを考えるのは無意味ではあるまい。


************************************************************************

これくらい 自分の考えに自信と信念をもって「俺の考えはこれだ 文句あっか」と言えるのは素晴らしいですね。






# by telmic-gunma | 2018-08-14 20:23 | いい本 | Trackback | Comments(0)

数独は奥が深いですねえ。
錆びかけた脳みそに油をさしながら頑張ってみたのですが、やっと ニコリの数独攻略ガイドの中級が解けるプログラムが出来ました。
解析手順は今までの2つの方法に新たに2つ追加して以下の4つの方法をグルグルと繰り返しています。

1、 空きマスを探して 縦、横、3X3ブロックの条件からそこに入力出来る数値を探す。
2、 1~9のなかで注目する数値を決めその数値がない3x3のブロックの中のどこに置くことが出来るか探す。
3、 1~9のなかで注目する数値を決めその数値がない縦の列の中のどこに置くことが出来るか探す。
4、 1~9のなかで注目する数値を決めその数値がない横の行の中のどこに置くことが出来るか探す。

言葉で言えばこれだけの事ですが、これをプログラムで表現しようとするとなかなうまく行きませんでした。
2~4においては、答えの場所を探すというよりは、置けないところを見つけてはじき出すという感じですね。
このなかでは、「先読み」や数値の「仮置き」は使っていません。

この次は「上級」の問題に挑戦してみます。


c0335218_19035428.jpg

ニコリ 数独攻略ガイド (中級) P52,53 No17,18
c0335218_10091709.jpg


ニコリ 数独攻略ガイド (中級)P52 No17
正常な答えがでました。

上半分は問題  下半分は回答です。 演算時間はみな5秒以内でした。
c0335218_10003189.jpg

ニコリ 数独攻略ガイド (中級)P53 No18
正常な答えが出ました。
上半分は問題  下半分は回答です。
c0335218_10003962.jpg


ニコリ 数独攻略ガイド (上級) P73 No26 上級の問題

c0335218_10100381.jpg


ニコリ 数独攻略ガイド (上級)P73 No26   
答えがまったく出ません。

上半分は問題  下半分は回答です。
c0335218_10004645.jpg




F-97 BASICで書いたプログラムリストです。

------------------------------
数独(ナンプレ) Ver SDOK_050N.BAS 2018-08-7
'基本テーブル配列の定義
dim AL(9,9) 
dim CHK(27)
dim INV1(20)
dim M_BUF(9)
'
'問題のテーブルデータの設定
gosub *TBL_ABCD
gosub *DISP3
gosub *ALBKCOPY
'stop
for AL_COUNT = 1 to 20
    ?" AL_COUNT=";AL_COUNT
gosub *MAIN_1
gosub *MAIN_2
gosub *MAIN_3
gosub *MAIN_4
next AL_COUNT
gosub *DISP3
?" ALL END"
stop
'=====================================================================================
'空欄を順に探してそこに入る可能性のある数値を、空欄のたて、横、ブロックのデータから類推する
*MAIN_1
'?" MAIN_1 ============================== "
X=1:Y=1
'空欄のマスをサーチする
for JJJ=1 to 20
for Y=1 to 9
for X=1 to 9
'?" X=";X;:?" Y=";Y;
if AL(X,Y)=0 then gosub *SHORI
next X
next Y
next JJJ

return
'
'=============================================================================
'空欄のたて、横、ブロックのデータを読み込む
*SHORI
'?" SHORI":'stop
for XXA=1 to 27
CHK(XXA)=0
next XXA
for XXB=1 to 9
' ?" XXB=";XXB;" Y=";Y
INV1(XXB)=AL(XXB,Y)
'stop
next XXB
'gosub *disp1:stop

'空欄に入る可能性データに変換する
for XX=1 to 9
INV2(XX)=XX
next XX

for YY=1 to 9
for XX=1 to 9
if INV2(XX)=INV1(YY) then INV2(XX)=0
next XX
next YY
for XX=1 to 9
CHK(XX)=INV2(XX)
next XX
'------------------------------------------------
'問題のテーブルから縦の列データをコピーする
for YY=1 to 9
INV1(YY)=AL(X,YY)
next YY
'gosub *disp1:stop
'空欄に入る可能性データに変換する
for XX=1 to 9
INV2(XX)=XX
next XX
'gosub *DISP2:stop
for YY=1 to 9
for XX=1 to 9
if INV2(XX)=INV1(YY) then INV2(XX)=0
next XX
next YY
'gosub *DISP2:stop
for XX=1 to 9
CHK(XX+9)=INV2(XX)
next XX
'gosub *DISP27:stop
'-------------------------------------------------
'問題のテーブルからブロックデータをINV1へコピーする
if (X<=3)and(Y<=3) then gosub *AAA:goto *BLKMOVEND
if (X>=4)and(X<=6)and(Y<=3) then gosub *BBB:goto *BLKMOVEND
if (X>=7)and(Y<=3) then gosub *CCC:goto *BLKMOVEND
if (X<=3)and(Y>=4)and(Y<=6)then gosub *DDD:goto *BLKMOVEND
if (X>=4)and(X<=6)and(Y>=4)and(Y<=6)then gosub *EEE:goto *BLKMOVEND
if (X>=7)and(Y>=4)and(Y<=6)then gosub *FFF:goto *BLKMOVEND
if (X<=3)and(Y>=7) then gosub *GGG:goto *BLKMOVEND
if (X>=4)and(X<=6)and(Y>=7)then gosub *HHH:goto *BLKMOVEND
if (X>=7)and(Y>=7) then gosub *III:goto *BLKMOVEND
?" ERR_blkend":stop
*BLKMOVEND
'空欄に入る可能性データに変換する
for XX=1 to 9
INV2(XX)=XX
next XX
'gosub *disp2:stop
for YY=1 to 9
for XX=1 to 9
if INV2(XX)=INV1(YY) then INV2(XX)=0
next XX
next YY
'gosub *disp2:stop
for XX=1 to 9
CHK(XX+18)=INV2(XX)
next XX
'gosub *disp27:stop
'-------------------------------------------------
for XX=1 to 9
BF(XX)=0
next XX
'gosub *DISP_BF
for M=1 to 9
KZ=0:GT=0
for T=1 to 27
if CHK(T)=M then KZ=KZ+1
if KZ>=3 then ANS=M:GT=1:BF(M)=1:T=27: '?"KZ";KZ;:?"GT=";GT;
next T
next M
OKCHK=0
for XX=1 to 9
OKCHK=OKCHK + BF(XX)
next XX
'gosub *DISP_BF
'?" OKCHK=";OKCHK,
'?" X="X;:?" Y=";Y
'stop
if OKCHK<>1 then goto *NON
AL(X,Y)=ANS
    '?" ANS=";ANS,
'?" X=";X,
'?" Y=";Y
*NON
return
'------------------------------------------------------------
'注目する数値を決めてからその注目値の無いブロックを探し、注目値がそのブロックのどこに当てはまるかを調べる。
*MAIN_2
'?" ":?" ":
'?" MAIN_2 ====================================================================== "
'stop
X=1:Y=1
'空欄のマスをサーチする
for ALOOP=1 to 20
for CHUMOKU=1 to 9
for BLKNO=1 to 9 ' *AA: 1 *BB: 2 ----
           '?" ":?" CHUMOKU=";CHUMOKU;  :?" BLKNO=";BLKNO;
'stop
gosub *BLOCK
next BLKNO
next CHUMOKU
next ALOOP
'?"  All end"
'gosub *DISP3B
'?" "
'gosub *DISP3
return
'------------------------------------------------------------
*BLOCK
if BLKNO=1 then BLKYUP=1:BLKXLF=1:gosub *AAA:goto *BLKXX
if BLKNO=2 then BLKYUP=1:BLKXLF=4:gosub *BBB:goto *BLKXX
if BLKNO=3 then BLKYUP=1:BLKXLF=7:gosub *CCC:goto *BLKXX
if BLKNO=4 then BLKYUP=4:BLKXLF=1:gosub *DDD:goto *BLKXX
if BLKNO=5 then BLKYUP=4:BLKXLF=4:gosub *EEE:goto *BLKXX
if BLKNO=6 then BLKYUP=4:BLKXLF=7:gosub *FFF:goto *BLKXX
if BLKNO=7 then BLKYUP=7:BLKXLF=1:gosub *GGG:goto *BLKXX
if BLKNO=8 then BLKYUP=7:BLKXLF=4:gosub *HHH:goto *BLKXX
if BLKNO=9 then BLKYUP=7:BLKXLF=7:gosub *III:goto *BLKXX
?" BLK ERR":stop
'------------------
*BLKXX
CNT=0
'このブロック(*AAA *BBB *CCC~) の中に注目している(CHUMOKU)数値があれば何もせずリターン
for XXX=1 to 9
CNT=CNT+1
'if INV1(XXX)=CHUMOKU then ?" ":?"M2 ブロック内に注目値あり":CNT=0:XXX=9:return
if INV1(XXX)=CHUMOKU then :CNT=0:XXX=9:return
next XXX

' ?" ":?"M2 ブロック内に注目値が無いので場所探しをする":stop
gosub *BK_Y_IV
gosub *BK_X_IV
gosub *XY_LNCK
gosub *CHUSET
return
'---------------------------------------------------------------
*AAA
'?"":?" AAA"
INV1(1)=AL(1,1): INV1(2)=AL(2,1): INV1(3)=AL(3,1)
INV1(4)=AL(1,2): INV1(5)=AL(2,2): INV1(6)=AL(3,2)
INV1(7)=AL(1,3): INV1(8)=AL(2,3): INV1(9)=AL(3,3)
gosub *BLKOUTCOPY
return
'----------------------------------------
*BBB
'?"":?" BBB"
INV1(1)=AL(4,1): INV1(2)=AL(5,1): INV1(3)=AL(6,1)
INV1(4)=AL(4,2): INV1(5)=AL(5,2): INV1(6)=AL(6,2)
INV1(7)=AL(4,3): INV1(8)=AL(5,3): INV1(9)=AL(6,3)
gosub *BLKOUTCOPY
return
'----------------------------------------
*CCC
'?"":?" CCC"
INV1(1)=AL(7,1): INV1(2)=AL(8,1): INV1(3)=AL(9,1)
INV1(4)=AL(7,2): INV1(5)=AL(8,2): INV1(6)=AL(9,2)
INV1(7)=AL(7,3): INV1(8)=AL(8,3): INV1(9)=AL(9,3)
gosub *BLKOUTCOPY
return
'----------------------------------------
*DDD
'?"":?" DDD"
INV1(1)=AL(1,4): INV1(2)=AL(2,4): INV1(3)=AL(3,4)
INV1(4)=AL(1,5): INV1(5)=AL(2,5): INV1(6)=AL(3,5)
INV1(7)=AL(1,6): INV1(8)=AL(2,6): INV1(9)=AL(3,6)
gosub *BLKOUTCOPY
return
'----------------------------------------
*EEE
'?"":?" EEE"
INV1(1)=AL(4,4): INV1(2)=AL(5,4): INV1(3)=AL(6,4)
INV1(4)=AL(4,5): INV1(5)=AL(5,5): INV1(6)=AL(6,5)
INV1(7)=AL(4,6): INV1(8)=AL(5,6): INV1(9)=AL(6,6)
gosub *BLKOUTCOPY
return
'----------------------------------------
*FFF
'?"":?" FFF"
INV1(1)=AL(7,4): INV1(2)=AL(8,4): INV1(3)=AL(9,4)
INV1(4)=AL(7,5): INV1(5)=AL(8,5): INV1(6)=AL(9,5)
INV1(7)=AL(7,6): INV1(8)=AL(8,6): INV1(9)=AL(9,6)
gosub *BLKOUTCOPY
return
'----------------------------------------
*GGG
'?"":?" GGG"
INV1(1)=AL(1,7): INV1(2)=AL(2,7): INV1(3)=AL(3,7)
INV1(4)=AL(1,8): INV1(5)=AL(2,8): INV1(6)=AL(3,8)
INV1(7)=AL(1,9): INV1(8)=AL(2,9): INV1(9)=AL(3,9)
gosub *BLKOUTCOPY
return
'----------------------------------------
*HHH
'?"":?" HHH"
INV1(1)=AL(4,7): INV1(2)=AL(5,7): INV1(3)=AL(6,7)
INV1(4)=AL(4,8): INV1(5)=AL(5,8): INV1(6)=AL(6,8)
INV1(7)=AL(4,9): INV1(8)=AL(5,9): INV1(9)=AL(6,9)
gosub *BLKOUTCOPY
return
'----------------------------------------
*III
'?"":?" III"
INV1(1)=AL(7,7): INV1(2)=AL(8,7): INV1(3)=AL(9,7)
INV1(4)=AL(7,8): INV1(5)=AL(8,8): INV1(6)=AL(9,8)
INV1(7)=AL(7,9): INV1(8)=AL(8,9): INV1(9)=AL(9,9)
gosub *BLKOUTCOPY
return
'---------------------------------------------------------
*BK_Y_IV
'?"ブロックを含むヨコ3行(1行9マス)の中に注目値を含む行が有るかチェック"
'?"YCHU(1)は1行目の9マスに注目値があったら1を入れる"
'?"YCHU(1)は2行目の9マスに注目値があったら1を入れる"
'?" "
YCHU(1)=0:YCHU(2)=0:YCHU(3)=0:
for BKJJ=0 to 2
'?"ブロックの上横1行9文字をINV1へコピーして注目値を調べる"
'?"注目値があればYCHU(1-3)に1が設定される"
'stop
for XX=1 to 9: INV1(XX)=AL(XX,BLKYUP+BKJJ): next XX
CNT=0
for XXX=1 to 9
CNT=CNT+1
'if INV1(XXX)=CHUMOKU then CNT=0:XXX=9:YCHU(BKJJ+1)=1:?"よこ3行に注目値が有り" '0, 1, 2 => 1, 2, 3
if INV1(XXX)=CHUMOKU then CNT=0:XXX=9:YCHU(BKJJ+1)=1: '0, 1, 2 => 1, 2, 3
next XXX
'stop
next BKJJ
return
'----------------------------------------------------------
*BK_X_IV
'?"M3 BK_X_IV ブロックを含む縦3列の中に注目値を含む列が有るかチェック"
'?"XCHU(1)は1列目の9マスに注目値があったら1を入れる"
'?"XCHU(2)は2列目の9マスに注目値があったら1を入れる"
'?" "
XCHU(1)=0:XCHU(2)=0:XCHU(3)=0:
for BKJJ=0 to 2
    '?"ブロックの左端縦の1列9文字をINV1へコピーして注目値を調べる"
'?"注目値があればXCHU(1-3)に1が設定される"
'stop
    for YY=1 to 9: INV1(YY)=AL(BLKXLF+BKJJ,YY): next YY
CNT=0
for YYY=1 to 9
CNT=CNT+1
'if INV1(YYY)=CHUMOKU then CNT=0:YYY=9:XCHU(BKJJ+1)=1:?"縦3列に注目値が有り" '0, 1, 2 => 1, 2, 3
if INV1(YYY)=CHUMOKU then CNT=0:YYY=9:XCHU(BKJJ+1)=1: '0, 1, 2 => 1, 2, 3
next YYY
'stop
next BKJJ
return
'------------------------------------------------------------------------------
*XY_LNCK
'?"注目数値のある行(9個)および列(9個)に関わるマスには使用不可の10を入れておく"
'?"INV1 をセーブしたBLKOUTからINV1へ戻す"
'?"BLKOUTとは現在作業中のブロックのデータを1列にしたもの"
'stop
for BLKX=1 to 9 
INV1(BLKX)=BLKOUT(BLKX)
next BLKX
if YCHU(1)=0 then goto *LBL200
INV1(1)=10:INV1(2)=10:INV1(3)=10
'?" YCHU INV(1-3)=10"
*LBL200
if YCHU(2)=0 then goto *LBL210
INV1(4)=10:INV1(5)=10:INV1(6)=10:
'?" YCHU INV(4-6)=10"
*LBL210
if YCHU(3)=0 then goto *LBL220
INV1(7)=10:INV1(8)=10:INV1(9)=10:
'?" YCHU INV(7-9)=10"
*LBL220
'stop
if XCHU(1)=0 then goto *LBL300
INV1(1)=10:INV1(4)=10:INV1(7)=10:
'?" XCHU INV(1,4,7)=10"
*LBL300
if XCHU(2)=0 then goto *LBL310
INV1(2)=10:INV1(5)=10:INV1(8)=10:
'?" XCHU INV(2,5,10)=10"
*LBL310
if XCHU(3)=0 then goto *LBL320
INV1(3)=10:INV1(6)=10:INV1(9)=10:
'?" XCHU INV(3,6,10)=10"
*LBL320
'stop
return
'--------------------------------------------------------------------
*CHUSET
'?"注目数値に対応する空きマスが1つの時そこに注目数値を入れる"
'?" 空きマスの数を数え2個以上あったらリターンする"
'?" 空きマスの場所をPOJに覚えておく"
WCHK=0:POJ=0
for III=1 to 9
if INV1(III)=0 then WCHK=WCHK+1:POJ=III
next III
'if WCHK>=2 then  ?"空マスが2個以上あったのでリターンする":return
if WCHK>=2 then return
'?"空マスが1個でした"
'?" 空きマスの位置の元のXY座標を求める"
if POJ<=3 then YY=1:XX=POJ:goto *MTRX
if (POJ>=4)and(POJ<=6)then YY=2:XX=POJ-3:goto *MTRX
if(POJ<=9) then YY=3: XX=POJ-6: goto *MTRX
?"ERR 5 ":stop
'stop
*MTRX
'?"ブロックNOとの組み合わせで大元のALテーブル上のXY座標を求め注目値を置く"
if BLKNO=1 then X=XX:Y=YY: goto *DTSET
if BLKNO=2 then X=XX+3:Y=YY: goto *DTSET
if BLKNO=3 then X=XX+6:Y=YY: goto *DTSET
if BLKNO=4 then X=XX:Y=YY+3: goto *DTSET
if BLKNO=5 then X=XX+3:Y=YY+3: goto *DTSET
if BLKNO=6 then X=XX+6:Y=YY+3: goto *DTSET
if BLKNO=7 then X=XX:Y=YY+6: goto *DTSET
if BLKNO=8 then X=XX+3:Y=YY+6: goto *DTSET
if BLKNO=9 then X=XX+6:Y=YY+6: goto *DTSET
?" ERROR 10 ": stop
*DTSET
AL(X,Y)=CHUMOKU
'?" ":?" X=";X," Y=";Y," DATA=";CHUMOKU,"WCHK=";WCHK
'stop
'gosub *DISP3
'?" ================ "
'stop
return
'----------------------------------------------------------------------------
----------------------------------------------------------------------------
'注目する数値を決めてからその注目値の無いヨコ行を探し、注目値がその行のどこに当てはまるかを調べる。
*MAIN_3
'?" MAIN_3 ============================== "
'stop
'空欄のマスをサーチする
X=1:Y=1
for ALOOP=1 to 20
'?"ALOOP=";ALOOP
'stop
for CHUMOKU = 1 to 9 '********************************************************************************
'stop
for X = 1 to 9 '********************************************************************************
'?"":?" MAIN3 CHU=";CHUMOKU; " 現在調査中の縦列 左から何列目の位置か X=";X
'stop
gosub *LINE_Y
next X
next CHUMOKU
next ALOOP
'?"  M3 All end"
'gosub *DISP3B
'?" "
'gosub *DISP3
'stop
return
'----------------------------------------------------------------------------
*LINE_Y
'?" ":?" M3 LINE_Y 01 TATE JYOUGE ============================================== "
'?"これから調べるメインの縦1列の中に注目値があったら何もせずリターンする"
'stop
for YY = 1 to 9
'?"注目値チェック 主調査の縦列に注目値があれば何もせずもどる"
'?" CHUMOKU=";CHUMOKU;
'?" X=";X; " YY=";YY; " マス値=";AL( X,YY)
'if AL( X,YY)=CHUMOKU then ?"M3 この縦列内に注目値あり":YY=9: ?"":return
if AL( X,YY)=CHUMOKU then :YY=9:return
next YY
'stop
'?"M3 この縦列内に注目値が無いので何処に入るか調査開始する
'?"ALテーブルから現在の縦列1行をメインバッファ(M_BUF)にコピーして表示"
'stop
'?" X=";X
for YY=1to 9
M_BUF(YY) = AL( X,YY)
next YY
'gosub *DISP_M_BUF
'stop
if (X<=3) then goto *LEF
if (X>=4)and(X<=6)then goto *SNT
if (X>=7) then goto *RGT
?"ERR ":stop
'-------------------------------
*LEF
'?" M3 LEF_1====================================== "
'?" 1列~3列の範囲なので一番上のブロックAAAに注目値があるかチェック"
'gosub *AAA: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 AAAに注目値なし ":goto *LEF3
gosub *AAA: gosub *BK_CHU_CK: if CHUFLG=0 then goto *LEF3
'?" AAAに注目値があるので空きマスを10で埋める "
for PT=1 to 3
M_BUF(PT)=10
next PT
'gosub *DISP_INV1:gosub *DISP_M_BUF
*LEF3
'?"":?" M3 LEF_3 "
'stop
'?" M3 1列~3列の範囲なので2段目のブロックDDDに注目値があるかチェック"
'gosub *DDD: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 DDDに注目値なし ": goto *LEF4
gosub *DDD: gosub *BK_CHU_CK: if CHUFLG=0 then : goto *LEF4
'?" DDDに注目値があるので空きマスを10で埋める "
for PT=4 to 6
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*LEF4
'?"":?"M3 LEF_4 *************************"
'?" M3 1列~3列の範囲なので上から3段目のブロックGGGに注目値があるかチェック"
'gosub *GGG: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 GGGに注目値なし ": goto *LEF5
gosub *GGG: gosub *BK_CHU_CK: if CHUFLG=0 then goto *LEF5
'?" GGGに注目値があるので空きマスを10で埋める "
for PT=7 to 9
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*LEF5
'?"":?"M3 LEF 5 "
'stop
gosub *LINE_Y_YOKO
'stop
return
'----------------------------------------------------------------
*SNT
'?"":?" M3 SNT_1============================== "
'stop
'?" 4列~6列の範囲なので一番上のブロックBBBに注目値があるかチェック"
'gosub *BBB: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 BBBに注目値なし ": goto *SNT3
gosub *BBB: gosub *BK_CHU_CK: if CHUFLG=0 then goto *SNT3
'?" BBBに注目値があるので空きマスを10で埋める "
for PT=1 to 3
'if INV1(PT)=0 then M_BUF(PT)=10:?" M_BUF(PT)=10を代入する "
M_BUF(PT)=10
next PT
'gosub *DISP_INV1:gosub *DISP_M_BUF
*SNT3
'?"":?" M3 SNT_3 "
'stop
'?" 4列~6列の範囲なので2段目のブロックEEEに注目値があるかチェック"
'gosub *EEE: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 EEEに注目値なし ":goto *SNT4
gosub *EEE: gosub *BK_CHU_CK: if CHUFLG=0 then goto *SNT4

'?" EEEに注目値があるので空きマスを10で埋める "
for PT=4 to 6
'if INV1(PT)=0 then M_BUF(PT)=10:?" M_BUF(PT)=10を代入する "
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*SNT4
'?"":?" M3 SNT_4 "
'stop
'?" 4列~6列の範囲なので3段目のブロックHHHに注目値があるかチェック"
'gosub *HHH: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 HHHに注目値なし":goto *SNT5
gosub *HHH: gosub *BK_CHU_CK: if CHUFLG=0 then goto *SNT5

'?" HHHに注目値があるので空きマスを10で埋める "
for PT=7 to 9
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*SNT5
'?"":?" M3 SNT 5 "
'stop
gosub *LINE_Y_YOKO
return
'------------------------------
*RGT
'?"":?" RGT_1============================== "
'stop
'?" 7列~9列の範囲なので一番上のブロックCCCに注目値があるかチェック"
'gosub *CCC: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 CCCに注目値なし":goto *RGT3
gosub *CCC: gosub *BK_CHU_CK: if CHUFLG=0 then goto *RGT3
'?" CCCに注目値があるので空きマスを10で埋める "
for PT=1 to 3
M_BUF(PT)=10
next PT
'gosub *DISP_INV1:gosub *DISP_M_BUF
*RGT3
'?"":?" M3 RGT_3 "
'stop
'?" 7列~9列の範囲なので2番目のブロックFFFに注目値があるかチェック"
'gosub *FFF: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 FFFに注目値なし":goto *RGT4
gosub *FFF: gosub *BK_CHU_CK: if CHUFLG=0 then goto *RGT4

'?" FFFに注目値があるので空きマスを10で埋める "
for PT=4 to 6
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*RGT4
'?"":?" M3 RGT_4 "
'stop
'?" 7列~9列の範囲なので3番目のブロックIIIに注目値があるかチェック"
'gosub *III: gosub *BK_CHU_CK: if CHUFLG=0 then ?"M3 CHUFLG=0 IIIに注目値なし":goto *RGT5
gosub *III: gosub *BK_CHU_CK: if CHUFLG=0 then goto *RGT5
'?" IIIに注目値があるので空きマスを10で埋める "
for PT=7 to 9
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*RGT5
'?"":?" M3 RGT 5 "
gosub *LINE_Y_YOKO
return
'----------------------------------------------------------------------------
*LINE_Y_YOKO
'?" *M3 LINE_Y_YOKO===================================================="
'?"調査中の縦列に存在する空きマスのヨコ1行をチェックして注目値があるか見る"
'stop
for YYY=1 to 9
'?" YYY=";YYY;:?" CHUMOKU=";CHUMOKU
'if M_BUF(YYY)<>0 then ?"M_BUF(YYY)<>0の時 ":goto *YOKO
    if M_BUF(YYY)<>0 then  goto *YOKO
'?"M_BUF(YYY)=0 空きマスなのでよこ1行に注目値があるかチェックする"
CNT=0
for XXX=1 to 9
'?" XXX=";XXX; " YYY=";YYY; " マス値=";AL(XXX,YYY)
'if AL( XXX,YYY)=CHUMOKU then M_BUF(YYY)=10: ?"M3 このよこ列内に注目値あり":XXX=9:
if AL( XXX,YYY)=CHUMOKU then M_BUF(YYY)=10:XXX=9:
            'gosub *DISP_M_BUF
'stop
next XXX
*YOKO
next YYY
'gosub *DISP_M_BUF
'stop
KARA=0:ZERO_Y=0
for YYY=1 to 9
if M_BUF(YYY)=0 then KARA=KARA+1:ZERO_Y=YYY
next YYY
'if KARA=1 then AL(X,ZERO_Y)=CHUMOKU:M_BUF(ZERO_Y)=CHUMOKU:?" KARA=1 SET OK  X,ZERO_Y=";:?X;ZERO_Y
if KARA=1 then AL(X,ZERO_Y)=CHUMOKU:M_BUF(ZERO_Y)=CHUMOKU
'?" X,ZERO_Y =";X;ZERO_Y
'?" KARA=";KARA;
'?" ZERO_Y=";ZERO_Y;
'?" CHUMOKU=";CHUMOKU
'gosub *DISP_INV1:gosub *DISP_M_BUF:gosub *DISP3
'?"M3 end M3 end M3 end"
'stop
return

'---------------------------------------------------------
*BK_CHU_CK
'?"":?"*BK_CHU_CK 01================================================= "
'?"通過するブロック(3*3)の中に注目値が含まれるかチェック"
'gosub *DISP_INV1
CHUFLG=0
CNT=0:CHUFLG=0
'   ?" CHUMOKU=";CHUMOKU;
for XXX=1 to 9
CNT=CNT+1
'if INV1(XXX)=CHUMOKU then CHUFLG=1:CNT=0:?" BK_CHU_CK 注目値あり ":XXX=9:goto *BK_CHU_CK03
if INV1(XXX)=CHUMOKU then CHUFLG=1:CNT=0:XXX=9:goto *BK_CHU_CK03
next XXX
'?" BK_CHU_CK 注目値無し "
*BK_CHU_CK03
return

'----------------------------------------------------------------------------
'注目する数値を決めてからその注目値の無いヨコ行を探し、注目値がその行のどこに当てはまるかを調べる。
*MAIN_4
'?" MAIN_4 ============================== "
'stop
'空欄のマスをサーチする
X=1:Y=1
for ALOOP = 1 to 20
'?"ALOOP=";ALOOP
'stop
for CHUMOKU = 1 to 9 '***********************************************
'stop
for Y = 1 to 9 ' **********************************************
'?" MAIN4 CHU=";CHUMOKU; " 現在調査中の横列 上から何行目の位置か Y=";Y
'stop
gosub *LINE_X ' Y => X
next Y ' X => Y
next CHUMOKU
next ALOOP
'?" M4 All end"
'gosub *DISP3B
'?" "
'gosub *DISP3
'stop
return
'----------------------------------------------------------------------------
*LINE_X ' Y => X
'?" ":?" M4 LINE_X 01============================================== "
'?" これから調べる横1行の中に注目値があったら何もせずリターンする"
'stop
for XX = 1 to 9                ' YY =>  XX
'?" 注目値チェック 主調査の横行に注目値があれば何もせずもどる"
'?" M4 CHUMOKU=";CHUMOKU;
'?" XX=";XX; " Y=";Y;" マス値=";AL( XX,Y)
'if AL( XX,Y)=CHUMOKU then ?" M4 この横行内に注目値あり ":XX=9:return :'stop
if AL( XX,Y)=CHUMOKU then XX=9:return :'stop
next XX

'?"この横行内に注目値が無いので何処に入るか調査開始する
'?"ALテーブルから現在の横行 1行をメインバッファ(M_BUF)にコピーして表示"
'stop
'?" M4  XX=";XX;" Y=";Y
for XX=1to 9 ' YY => XX
M_BUF(XX) = AL( XX,Y)
next XX ' YY => XX
'gosub *DISP_M_BUF
'stop
if (Y<=3) then goto *UP            ' X => Y           *LEF => *UP
if (Y>=4)and(Y<=6)then goto *MD ' X => Y *SNT => *MD
if (Y>=7) then goto *LO ' X => Y *RGT => *LO
?"ERR ":stop
'-------------------------------
*UP '*LEF => *UP
'?" M4 UP_1====================================================== "
'?" 1行~3行の範囲なので一番上のブロックAAAに注目値があるかチェック"
'gosub *AAA: gosub *BK_CHU_CK: if CHUFLG=0 then ?" M4 CHUFLG=0 ":goto *UP3
gosub *AAA: gosub *BK_CHU_CK: if CHUFLG=0 then goto *UP3
'?" AAAに注目値があるので空きマスを10で埋める "
for PT=1 to 3
M_BUF(PT)=10
next PT
'gosub *DISP_INV1:gosub *DISP_M_BUF
*UP3                                                  'LEF => UP
'?"":?" M4 UP_3 "
'stop
'?" M4 1行~3行の範囲なので2行目のブロックBBBに注目値があるかチェック"
gosub *BBB: gosub *BK_CHU_CK: if CHUFLG=0 then goto *UP4
'?" M4 BBBに注目値があるので空きマスを10で埋める"

for PT=4 to 6
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*UP4
'?"":?" M4 UP_4 ================================================"
'?" M4 1行~3行の範囲なので左から3行目のブロックCCCに注目値があるかチェック"
gosub *CCC: gosub *BK_CHU_CK: if CHUFLG=0 then goto *UP5
'?" CCCに注目値があるので空きマスを10で埋める "
for PT=7 to 9
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*UP5
'?"":?"M4 UP 5 "
'stop
gosub *LINE_X_TATE
'stop
return
'---------------------------------------------------------------
*MD ' SNT => MD
'?"":?" M4 MD_1 =============================== "
'stop
'?" 4行~6行の範囲なので一番左のブロックBBBに注目値があるかチェック"
gosub *DDD: gosub *BK_CHU_CK: if CHUFLG=0 then goto *MD3
'?" DDDに注目値があるので空きマスを10で埋める "
for PT=1 to 3
M_BUF(PT)=10
next PT
'gosub *DISP_INV1:gosub *DISP_M_BUF
*MD3
'?"":?" M4 MD_3 "
'stop
'?" 4行~6行の範囲なので左から2個目のブロックEEEに注目値があるかチェック"
gosub *EEE: gosub *BK_CHU_CK: if CHUFLG=0 then goto *MD4
'?" EEEに注目値があるので空きマスを10で埋める "
for PT=4 to 6
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*MD4
'?"":?" M4 SNT_4 "
'stop
'?" 4行~6行の範囲なので左から3個目のブロックFFFに注目値があるかチェック"
gosub *FFF: gosub *BK_CHU_CK: if CHUFLG=0 then goto *MD5
for PT=7 to 9
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*MD5
'?"":?"M4 MD 5 "
'stop
gosub *LINE_X_TATE               ' *LINE_Y_YOKO  =>  *LINE_X_TATE
'stop
return
'------------------------------
*LO 'RGT => LO
'?"":?" M4 LO_1========================= "
'?" 7行~9行の範囲なので左から2個目のブロックGGGに注目値があるかチェック"
'stop
gosub *GGG: gosub *BK_CHU_CK: if CHUFLG=0 then goto *LO3
'?" GGGに注目値があるので空きマスを10で埋める "
for PT=1 to 3
M_BUF(PT)=10
next PT
'gosub *DISP_INV1:gosub *DISP_M_BUF
*LO3
'?"":?" M4 LO_3 "
'stop
'?" 7行~9行の範囲なので一番左のブロックGGGに注目値があるかチェック"
gosub *HHH: gosub *BK_CHU_CK: if CHUFLG=0 then goto *LO4
'?" HHHに注目値があるので空きマスを10で埋める "
for PT=4 to 6
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*LO4
'?"":?" M4 LO_4 "
'stop
'?" 7行~9行の範囲なので左から2個目のブロックGGGに注目値があるかチェック"
gosub *III: gosub *BK_CHU_CK: if CHUFLG=0 then goto *LO5
'?" GGGに注目値があるので空きマスを10で埋める "
for PT=7 to 9
M_BUF(PT)=10
next PT
'gosub *DISP_INV1: gosub *DISP_M_BUF
*LO5
'?"":?" M4 LO 5 "
'stop
gosub *LINE_X_TATE 
'stop
return
'----------------------------------------------------------------------------
*LINE_X_TATE ' *LINE_Y_YOKO
'?" M4 LINE_X_TATE============================================= "
'?"調査中のMAINの横行に存在する空きマスのSUB縦1列をチェックして注目値があるか見る"
'stop
for XXX=1 to 9                            'YYY => XXX
'?" XXX=";XXX;:?" CHUMOKU=";CHUMOKU
'if M_BUF(XXX)<>0 then ?"M_BUF(XXX)<>0の時 ":goto *TATE
    if M_BUF(XXX)<>0 then goto *TATE 
CNT=0
'?"M_BUF(XXX)=0 空きマスなのでSUB_縦1列に注目値があるかチェックする"
CNT=0
for YYY=1 to 9
'?" XXX=";XXX;:?" YYY=";YYY;:?"値=";AL(XXX,YYY)
if AL( XXX,YYY)=CHUMOKU then M_BUF(XXX)=10:YYY=9:

'gosub *DISP_M_BUF
'stop
next YYY
*TATE
next XXX
'gosub *DISP_M_BUF
'stop
KARA=0:ZERO_X=0
for XXX=1 to 9
if M_BUF(XXX)=0 then KARA=KARA+1:ZERO_X=XXX
next XXX
if KARA=1 then AL(ZERO_X,Y)=CHUMOKU:M_BUF(ZERO_X)=CHUMOKU:?" KARA=1 SET OK  ZERO_X,Y=";:? ZERO_X;Y
'?" ZERO_X,Y =";ZERO_X;Y
'?" KARA=";KARA;
'?" ZERO_X=";ZERO_X;
'?" CHUMOKU=";CHUMOKU
'gosub *DISP_INV1:gosub *DISP_M_BUF:gosub *DISP3
'?"M4 end M4 end M4 end"
'stop
return
'----------------------------------------------------------------------------
 *BLKOUTCOPY
for BLKX=1 to 9
BLKOUT(BLKX)=INV1(BLKX)
next BLKX
return
'---------------------------------------
*ALBKCOPY
?" "
for YYY=1 to 9
for XXX=1 to 9
ALBK(XXX,YYY)=AL(XXX,YYY)
next XXX
next YYY
return

'--------------------------------------------------------------------------
*DISP_M_BUF
'?"":?" M_BUF=";
for YY=1to 9
'?M_BUF(YY);
next YY
'?" "
return
'----------------------------------------------------------------------------
*DISP_INV1
*DISP1
'?" INV1 =";
for KKK=1 to 9
'?INV1(KKK);
next kkk
return
'---------------------------------------
'*DISP2
'?" INV2(1~)=";
for KKK=1 to 9
'?INV2(KKK);
next kkk
return
'---------------------------------------
*DISP3
'?" "
for YYY=1 to 9
for XXX=1 to 9
?AL(XXX,YYY);
if XXX=3 then ?" ";
if XXX=6 then ?" ";
next XXX
if YYY=3 then ?" "
if YYY=6 then ?" "
?" "
next YYY
return
'---------------------------------------
*DISP3B
?" "
for YYY=1 to 9
for XXX=1 to 9
?ALBK(XXX,YYY);
if XXX=3 then ?" ";
if XXX=6 then ?" ";
next XXX
' if YYY=3 then ?" "
' if YYY=6 then ?" "
?" "
next YYY
return
'---------------------------------------
'*DISP27
for X12=1 to 27
? CHK(X12);
if X12=9 then ?" "
if X12=18 then ?" "
next X12
?" "
return
'-----------------------------------------
'*DISP_BF
?" "
?" BF(1~9)=";
for KKK=1 to 9
?BF(KKK);
next kkk
return
'---------------------------------------
'問題のテーブルデータの設定
'ニコリ 数独攻略ガイド P51 No16
'M1,2,3,4 全OK    20180804
*TBL_ABCD

data 2,0,1, 6,0,0, 0,0,9
data 0,0,0, 0,0,8, 2,0,0
data 3,0,0, 0,4,0, 0,5,0
data 9,0,0, 0,0,0, 0,2,0
data 0,0,8, 0,0,0, 3,0,0
data 0,4,0, 0,0,0, 0,0,6
data 0,3,0, 0,5,0, 0,0,8
data 0,0,9, 7,0,0, 0,0,0
data 6,0,0, 0,0,1, 4,0,5

for YY=1 to 9
for XX=1 to 9
read AL(XX,YY)
next XX
next YY
return



これで終わりです。




今年は、猛烈な暑さのため、スイカはみなひび割れてしまいました。
トウモロコシも半分以上のものが乾燥してダメでした。
この花だけは、毎年元気で咲いてくれています。

c0335218_09115141.jpg

朝顔も元気ですね。
c0335218_09112206.jpg

***************

++++++++++++++ 
-------------------------



# by telmic-gunma | 2018-08-08 10:21 | HP電卓 | Trackback | Comments(2)

前回の4x4の解き方をそのまま9x9の拡張してやってみました。
しかし4x4ではうまく行っていた方法も9x9では単純な問題しか解くことができなくなりました。
そこで数独の解説書などを参考に新たな方法に挑戦してみました。
ここでも 人力で解くことは可能なのですが、それをプログラム化するところで四苦八苦してしまいました。
何とか出来上がったソフトでいろいろ試したのですが、やはりオールマイティーということはなくて、

限られた問題しか解けません。
やはり いろいろな問題を解くには、いろいろな方式のプログラムを作りそれを組み合わせていかなくてはならないようです。

今回の方式は、3x3の一つのブロックに注目しその中にない数値がどの場所ならば置くことが出来るかをさがしていく方法です。
これは ニコリの「全問解説数独」のP6に載っている方法をプログラム化したものです。

1) 1~9までの注目する数値を決める(実際は「1」から順番にやる)
2) その数値がない3x3のブロックを順に見つける。(今回は上の右端)
3) 横方向の行で注目数値「1」が入らないところを見つける。
   a行 b行には「1」が有るので入らない。
4) 縦方向で「1」が入らないのは I列です。
5) 上記より「1」の入る可能性はGcとHcです。
6) しかしHcはすでに「2」が入っている。
7) ゆえに残るのはGcだけなのでここに「1」が入ります。

表題に出している「HP電卓」はどうしたのと言われそうですが、ベーシックで問題が解けるようになったら、人間コンパイラになってHP電卓に書き直してみようと思います。
c0335218_19035428.jpg



この問題は 最初にやった4x4の延長の方式では解くことが出来ませんでした。
今回の各ブロックに注目してやる方法で解けました。
だけど この方式でも解けない問題がわんさか有ります。

c0335218_19045525.jpg



画面上側が問題です。  問題のブランクの所には、ゼロが入っています。
下側はパソコンが出した回答です。
Fベーシック97で3秒ほどかかりました。
デバッグのための途中経過を表示しているので、その時間がかかっていると思います。


c0335218_19042435.jpg





( Fベーシック97  富士通が作った20年前のBASIC言語をWinXPで動かしてます)


'数独(ナンプレ) SDOK9x9_30D 2018-06-20
'基本テーブル配列の定義
dim AL(9,9)
dim CHK(27)
dim INV1(9)
'
'問題のテーブルデータの設定
gosub *TBL_P6
gosub *DISP3
stop
'空欄のマスをサーチする
for ALOOP=1 to 10
for CHUMOKU=1 to 9
for BLKNO=1 to 9 ' *AA: 1 *BB: 2 ----
'          ?" CHUMOKU=";CHUMOKU;  :?" BLKNO=";BLKNO;
'stop
gosub *BLOCK
next BLKNO
next CHUMOKU
next ALOOP
?"  All end"
gosub *DISP3
stop:stop
'------------------------------------------------------------
*BLOCK
if BLKNO=1 then BLKYUP=1:BLKXLF=1:gosub *AAA:goto *BLKXX
if BLKNO=2 then BLKYUP=1:BLKXLF=4:gosub *BBB:goto *BLKXX
if BLKNO=3 then BLKYUP=1:BLKXLF=7:gosub *CCC:goto *BLKXX
if BLKNO=4 then BLKYUP=4:BLKXLF=1:gosub *DDD:goto *BLKXX
if BLKNO=5 then BLKYUP=4:BLKXLF=4:gosub *EEE:goto *BLKXX
if BLKNO=6 then BLKYUP=4:BLKXLF=7:gosub *FFF:goto *BLKXX
if BLKNO=7 then BLKYUP=7:BLKXLF=1:gosub *GGG:goto *BLKXX
if BLKNO=8 then BLKYUP=7:BLKXLF=4:gosub *HHH:goto *BLKXX
if BLKNO=9 then BLKYUP=7:BLKXLF=7:gosub *III:goto *BLKXX
?" BLK ERR":stop
'---------------------------------------------------------------
*BLKXX
CNT=0
'このブロックの中に注目している(CHUMOKU)数値があれば何もせずリターン
for XXX=1 to 9
CNT=CNT+1
if INV1(XXX)=CHUMOKU then CNT=0:XXX=9:?"同一文字有り":return
next XXX
'----------------------------------------
YCHU(1)=0:YCHU(2)=0:YCHU(3)=0:
for BKJJ=0 to 2
'ブロックの上横1行9文字をINV1へコピー
for XX=1 to 9: INV1(XX)=AL(XX,BLKYUP+BKJJ): next XX
CNT=0
for XXX=1 to 9
CNT=CNT+1
if INV1(XXX)=CHUMOKU then CNT=0:XXX=9:YCHU(BKJJ+1)=1
next XXX
next BKJJ
'-------------------------
XCHU(1)=0:XCHU(2)=0:XCHU(3)=0:
for BKJJ=0 to 2
'ブロックの左縦から1行9文字をINV1へコピー
for YY=1 to 9: INV1(YY)=AL(BLKXLF+BKJJ,YY): next YY
CNT=0
for YYY=1 to 9
CNT=CNT+1
if INV1(YYY)=CHUMOKU then CNT=0:YYY=9:XCHU(BKJJ+1)=1
next YYY
next BKJJ
'-------------------------------------------
for BLKX=1 to 9
INV1(BLKX)=BLKOUT(BLKX)
next BLKX
if YCHU(1)=0 then goto *LBL200
INV1(1)=10:INV1(2)=10:INV1(3)=10:
*LBL200
if YCHU(2)=0 then goto *LBL210
INV1(4)=10:INV1(5)=10:INV1(6)=10:
*LBL210
if YCHU(3)=0 then goto *LBL220
INV1(7)=10:INV1(8)=10:INV1(9)=10:
*LBL220
if XCHU(1)=0 then goto *LBL300
INV1(1)=10:INV1(4)=10:INV1(7)=10:
*LBL300
if XCHU(2)=0 then goto *LBL310
INV1(2)=10:INV1(5)=10:INV1(8)=10:
*LBL310
if XCHU(3)=0 then goto *LBL320
INV1(3)=10:INV1(6)=10:INV1(9)=10:
*LBL320
WCHK=0
for III=1 to 9
if INV1(III)=0 then WCHK=WCHK+1:POJ=III
next III
if WCHK>=2 then ?"空マスが2個以上あった":return
if POJ<=3 then YY=1:XX=POJ:goto *MTRX
if (POJ>=4)and(POJ<=6)then YY=2:XX=POJ-3:goto *MTRX
if(POJ<=9) then YY=3: XX=POJ-6: goto *MTRX
?"ERR 5 ":stop
*MTRX
if BLKNO=1 then X=XX:Y=YY: goto *DTSET
if BLKNO=2 then X=XX+3:Y=YY: goto *DTSET
if BLKNO=3 then X=XX+6:Y=YY: goto *DTSET
if BLKNO=4 then X=XX:Y=YY+3: goto *DTSET
if BLKNO=5 then X=XX+3:Y=YY+3: goto *DTSET
if BLKNO=6 then X=XX+6:Y=YY+3: goto *DTSET
if BLKNO=7 then X=XX:Y=YY+6: goto *DTSET
if BLKNO=8 then X=XX+3:Y=YY+6: goto *DTSET
if BLKNO=9 then X=XX+6:Y=YY+6: goto *DTSET
?" ERROR 10 ": stop
*DTSET
AL(X,Y)=CHUMOKU
ALLCNT=ALLCNT+1
?" ":?" X=";X," Y=";Y," DATA=";CHUMOKU,"ALL CNT=";ALLCNT
'gosub *DISP3
?" ================ "
return
'---------------------------------------------------------------
*AAA
INV1(1)=AL(1,1): INV1(2)=AL(2,1): INV1(3)=AL(3,1)
INV1(4)=AL(1,2): INV1(5)=AL(2,2): INV1(6)=AL(3,2)
INV1(7)=AL(1,3): INV1(8)=AL(2,3): INV1(9)=AL(3,3)
gosub *BLKOUTCOPY
return
*BBB
INV1(1)=AL(4,1): INV1(2)=AL(5,1): INV1(3)=AL(6,1)
INV1(4)=AL(4,2): INV1(5)=AL(5,2): INV1(6)=AL(6,2)
INV1(7)=AL(4,3): INV1(8)=AL(5,3): INV1(9)=AL(6,3)
gosub *BLKOUTCOPY
return
*CCC
INV1(1)=AL(7,1): INV1(2)=AL(8,1): INV1(3)=AL(9,1)
INV1(4)=AL(7,2): INV1(5)=AL(8,2): INV1(6)=AL(9,2)
INV1(7)=AL(7,3): INV1(8)=AL(8,3): INV1(9)=AL(9,3)
gosub *BLKOUTCOPY
return
*DDD
INV1(1)=AL(1,4): INV1(2)=AL(2,4): INV1(3)=AL(3,4)
INV1(4)=AL(1,5): INV1(5)=AL(2,5): INV1(6)=AL(3,5)
INV1(7)=AL(1,6): INV1(8)=AL(2,6): INV1(9)=AL(3,6)
gosub *BLKOUTCOPY
return
*EEE
INV1(1)=AL(4,4): INV1(2)=AL(5,4): INV1(3)=AL(6,4)
INV1(4)=AL(4,5): INV1(5)=AL(5,5): INV1(6)=AL(6,5)
INV1(7)=AL(4,6): INV1(8)=AL(5,6): INV1(9)=AL(6,6)
gosub *BLKOUTCOPY
return
*FFF
INV1(1)=AL(7,4): INV1(2)=AL(8,4): INV1(3)=AL(9,4)
INV1(4)=AL(7,5): INV1(5)=AL(8,5): INV1(6)=AL(9,5)
INV1(7)=AL(7,6): INV1(8)=AL(8,6): INV1(9)=AL(9,6)
gosub *BLKOUTCOPY
return
*GGG
INV1(1)=AL(1,7): INV1(2)=AL(2,7): INV1(3)=AL(3,7)
INV1(4)=AL(1,8): INV1(5)=AL(2,8): INV1(6)=AL(3,8)
INV1(7)=AL(1,9): INV1(8)=AL(2,9): INV1(9)=AL(3,9)
gosub *BLKOUTCOPY
return
*HHH
INV1(1)=AL(4,7): INV1(2)=AL(5,7): INV1(3)=AL(6,7)
INV1(4)=AL(4,8): INV1(5)=AL(5,8): INV1(6)=AL(6,8)
INV1(7)=AL(4,9): INV1(8)=AL(5,9): INV1(9)=AL(6,9)
gosub *BLKOUTCOPY
return
*III
INV1(1)=AL(7,7): INV1(2)=AL(8,7): INV1(3)=AL(9,7)
INV1(4)=AL(7,8): INV1(5)=AL(8,8): INV1(6)=AL(9,8)
INV1(7)=AL(7,9): INV1(8)=AL(8,9): INV1(9)=AL(9,9)
gosub *BLKOUTCOPY
return
'----------------------------------------------------------------------------
*BLKOUTCOPY
for BLKX=1 to 9
BLKOUT(BLKX)=INV1(BLKX)
next BLKX
return
'----------------------------------------------------------------------------
*DISP1
'?" INV1(1~)=";
for KKK=1 to 9
?INV1(KKK);
next kkk
return
'---------------------------------------
*DISP3
?" "
for YYY=1 to 9
for XXX=1 to 9
?AL(XXX,YYY);
if XXX=3 then ?" ";
if XXX=6 then ?" ";
next XXX
if YYY=3 then ?" "
if YYY=6 then ?" "
?" "
next YYY
return
'---------------------------------------
'問題のテーブルデータの設定
'ニコリ全問解説数独P6
*TBL_P6
data 6,0,2,0,0,1,0,0,5
data 0,0,1,0,0,0,6,0,0
data 0,8,0,0,5,0,0,2,3
data 3,0,0,9,0,2,0,0,0
data 0,0,4,0,0,0,8,0,0
data 0,0,0,1,0,3,0,0,7
data 5,1,0,0,6,0,0,8,0
data 0,0,3,0,0,0,2,0,0
data 2,0,0,7,0,0,5,0,1

for YY=1 to 9
for XX=1 to 9
read AL(XX,YY)
next XX
next YY
return





今我が家の庭に大きく咲きだした変わった形のアジサイ
ばあちゃんが大事にしていた形見です。

c0335218_20195548.jpg

とんがり帽子の形をしています。 まだこれから大きくなるところですね。

c0335218_20200528.jpg


何という花?



c0335218_20201743.jpg

葉っぱの中心に紫色のかわいい花が咲いています。
c0335218_20204033.jpg






# by telmic-gunma | 2018-06-20 20:41 | HP電卓 | Trackback | Comments(6)

4x4の数独(ナンプレ)をBASIC言語で解けるようになりました。
池田書店の「小学生のナンプレ」に載っている4x4の練習問題20問すべて解けたのでまず間違いないとおもいます。
前回は乱数を使って答えが合うまでやり直すという無茶な方法でしたが、今回は人間が考えるのと同じ手順で理屈に合わせながらすすめる方法でやりました。
解いていく過程で行き詰まって逆戻りしてやり直す機能が必要かなと思っていましたが、そのような機能は必要ありませんでした。
ニコリで出している「数独攻略ガイド」の9ページに


「面倒な先読みは数独では一切不要なのです。
「ここは確実にこれだ」という推理を積み重ねていくことで、
必ずただ1つの正解にたどりつくことができますよ。」
これだと 問題を作るとき、いい加減には出来ないですね。
ちゃんと1つづつ手順を考えて矛盾が起きないようにする必要がありますね。
逆に考えると、先読みが必要だったり逆戻りして数値入れ替えてやり直す必要がある問題なんて言うのも楽しいかもしれません。
すがわらさんが言っていた乱数とのハイブリッドなんていうのもいいですね。


いろいろと悩んだ原因で思いついたことは、「パズルは数式で表せないので、プログラム化し難い」という事でした。
数学や制御の計算ならば必ず「数式」があるのでそれに基づいてプログラム化できますが、「パズルの数式」というのは世の中にあるのでしょうか。

今回やった答えを出す手順を言葉で表すとするならば以下のようになります。
1、左上から右方向に空欄を探していく
2、空欄があれば、その座標の横方向、縦方向、含まれるブロック、の3種の縛りから各々の取りうる可能性のある数値をだす。
3、例えば横方向に1、と3、の数値が置かれていたらその空欄の取りうる可能性のある数値は2、と4、になります。
4、縦の方向に2、と3、の数値が置かれていたらその空欄の取りうる数値は1、と4、になります。
5、そのブロックに1、と2、が置かれていたら取りうる数値は3、と4、になります。
6、この3っつの縛りに共通しているのは4、だけなのでここは4で確定するということになります。
7、もし共通する数値が2個以上あるということならば確定しないのでそこは何もしないでパスします。
8、これをすべての空欄について行うと必ず答えが見つかります。
  (まだ 4x4 でしか動かしていませんが)

わたしにとっては、このような言葉での説明が一番わかりやすいですね。
それは、私の頭の中でこのような言葉で考えているからでしょうか。

つぎは、これがHP電卓で動作できるか、そして 9x9に対応させられるかというところですね。
c0335218_15183401.jpg


c0335218_15190578.jpg


c0335218_15193404.jpg


c0335218_15200548.jpg


F-BASIC97 人間が考えるのと同じ手順でやってます。



'数独 SDOK_61B

'基本テーブル配列の定義
dim AL(4,4) '4行4列の元データ
dim CHK(12) '可能性データの集合 横4個 縦4個 ブロック4個
dim INV1(4) '変換前のテーブルデータ
dim INV2(4) '変換後の可能性数値データ
'
'問題のテーブルデータの設定
gosub *TBL020 '小学生のナンプレ 例題 020
gosub *DISP3 '数値確認のため 画面表示
stop
'空欄のマスをサーチする
for Y=1 to 4
for X=1 to 4
'?" X=";X;:?" Y=";Y;
if AL(X,Y)=0 then gosub *SHORI   'もし空欄ならSHORIルーチンへ行く
next X
next Y
?" All kaitou"
stop:stop 'メインルーチン 終わり
'-------------------------------------------------------------------------
'空欄のたて、横、ブロックのデータを読み込む
*SHORI
for XX=1 to 12
CHK(XX)=0 '変換テーブルをクリアする
next XX


for XX=1 to 4
INV1(XX)=AL(XX,Y) '該当する横軸データ4個を変換テーブルにコピーする
next XX
'空欄に入る可能性データに変換する
for XX=1 to 4
INV2(XX)=XX  ’変換テーブルの種データ1~4を入れておく
next XX
for YY=1 to 4
for XX=1 to 4
if INV2(XX)=INV1(YY) then INV2(XX)=0  ’同一データの時は消す
next XX
next YY
for XX=1 to 4
CHK(XX)=INV2(XX)   ’残った可能性有りデータを移す
next XX
'------------------------------------------------
'問題のテーブルから縦の列データをコピーする
for YY=1 to 4
INV1(YY)=AL(X,YY)
next YY
'空欄に入る可能性データに変換する
for XX=1 to 4
INV2(XX)=XX
next XX
for YY=1 to 4
for XX=1 to 4
if INV2(XX)=INV1(YY) then INV2(XX)=0  ’可能性無いのを消し有りを残す
next XX
next YY
for XX=1 to 4
CHK(XX+4)=INV2(XX)
next XX
'-------------------------------------------------
'問題のテーブルからブロックデータをINV1へコピーする
if (X<=2)and(Y<=2) then gosub *AA:goto *BLKMOVEND
if (X>=3)and(Y<=2) then gosub *BB:goto *BLKMOVEND
if (X<=2)and(Y>=3) then gosub *CC:goto *BLKMOVEND
if (X>=3)and(Y>=3) then gosub *DD:goto *BLKMOVEND
?" ERR_blkend":stop
*BLKMOVEND
'空欄に入る可能性データに変換する
for XX=1 to 4
INV2(XX)=XX
next XX
for YY=1 to 4
for XX=1 to 4
if INV2(XX)=INV1(YY) then INV2(XX)=0
next XX
next YY
for XX=1 to 4
CHK(XX+8)=INV2(XX)
next XX
'-------------------------------------------------
'
BF(1)=0:BF(2)=0:BF(3)=0:BF(4)=0
for M=1 to 4
KZ=0:GT=0
for T=1 to 12
if CHK(T)=M then KZ=KZ+1
if KZ>=3 then ANS=M:GT=1:BF(M)=1:T=12: ’同一数値が3個あれば可能性有りとする
next T
next M
OKCHK=BF(1)+BF(2)+BF(3)+BF(4) ’可能性有りフラグを合計する
if OKCHK<>1 then goto *NON    ’可能性有りが1つ以外ならダメ
AL(X,Y)=ANS          ’可能性OKなので空欄に書き込む
*NON
gosub *disp3
?" LOOP end"
return
'-------------------------------------------------
’該当するブロックデータを変換テーブルに移す
*AA
INV1(1)=AL(1,1): INV1(2)=AL(2,1): INV1(3)=AL(1,2): INV1(4)=AL(2,2): return
*BB
INV1(1)=AL(3,1): INV1(2)=AL(4,1): INV1(3)=AL(3,2): INV1(4)=AL(4,2): return
*CC
INV1(1)=AL(1,3): INV1(2)=AL(2,3): INV1(3)=AL(1,4): INV1(4)=AL(2,4): return
*DD
INV1(1)=AL(3,3): INV1(2)=AL(4,3): INV1(3)=AL(3,4): INV1(4)=AL(4,4): return
'-------------------------------------------------------
*DISP1   ’デバッグ用画面表示
?" INV1(1)=";INV1(1),
?" INV1(2)=";INV1(2),
?" INV1(3)=";INV1(3),
?" INV1(4)=";INV1(4)
return

*DISP2   ’デバッグ用画面表示
?" INV2(1)=";INV2(1),
?" INV2(2)=";INV2(2),
?" INV2(3)=";INV2(3),
?" INV2(4)=";INV2(4)
return

*DISP3   ’デバッグ用画面表示
?AL(1,1);:?AL(2,1);:?AL(3,1);:?AL(4,1)
?AL(1,2);:?AL(2,2);:?AL(3,2);:?AL(4,2)
?AL(1,3);:?AL(2,3);:?AL(3,3);:?AL(4,3)
?AL(1,4);:?AL(2,4);:?AL(3,4);:?AL(4,4)
return

*DISP4   ’デバッグ用画面表示
for X12=1 to 12
? CHK(X12);
next X12
?" "
return

'問題のテーブルデータの設定

*TBL020
AL(1,1)=4:AL(2,1)=0:AL(3,1)=0:AL(4,1)=0:
AL(1,2)=2:AL(2,2)=0:AL(3,2)=3:AL(4,2)=4:
AL(1,3)=3:AL(2,3)=4:AL(3,3)=0:AL(4,3)=1:
AL(1,4)=0:AL(2,4)=0:AL(3,4)=0:AL(4,4)=3:
return




庭の花です。  今年はもう咲きだしました。 アルストロメリアでしたよね。
c0335218_15221863.jpg

これは なでしこ ですね。

c0335218_15204173.jpg



c0335218_15213889.jpg


# by telmic-gunma | 2018-06-03 16:08 | HP電卓 | Trackback | Comments(4)

前回 「数独」を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)

今日 群馬県の前橋にある「ぐんまフラワーパーク」に行ってきました。
一面 チューリップばかり  我が家の数本のチューリップとは比べ物になりません。
昔来たときは混雑がひどくて駐車するのにたいへんだったですが、今日は平日だったので渋滞もありませんでした。
チューリップ 一つの花でも綺麗ですが、このような数の力と言うのもすごいですね。
これだけの数を咲かせるには、お金と手間は大変だとおもいます。
入場料700円でよくやっていけますね。
このブログ 前回、今回と花ばかりで、電子工作はどこに行ってしまったのでしょうか。 それなりに気にはしているのですが。

c0335218_20383596.jpg



c0335218_20385247.jpg



c0335218_20504282.jpg



c0335218_20510119.jpg



c0335218_20391726.jpg



c0335218_20394795.jpg



c0335218_20405881.jpg



c0335218_20413534.jpg



c0335218_20421828.jpg



c0335218_20425882.jpg



c0335218_20433309.jpg




c0335218_20435326.jpg



c0335218_20441258.jpg



c0335218_20494511.jpg



c0335218_20520373.jpg



c0335218_20562546.jpg
やはり 花が咲きだす春は良いですね。




# by telmic-gunma | 2018-04-19 20:58 | 季節の風景 | Trackback | Comments(2)

出張から帰ったら、沢山の花が咲いていました。
このチューリップの場所は 去年間違って耕運機で耕してしまったのですが、何とか球根は残っていたようです。


c0335218_20362298.jpg




c0335218_20340171.jpg




c0335218_20363002.jpg




c0335218_20363534.jpg




c0335218_20364086.jpg




c0335218_20364614.jpg




c0335218_20370266.jpg




c0335218_20335228.jpg



この桜は 近くの「かわば田園プラザ」で今朝撮影しました。
種類がいくつかあるようで半分ほどの木はすでに散っていました。


c0335218_08430696.jpg




c0335218_08433119.jpg




c0335218_08433634.jpg





c0335218_08431384.jpg




これは 室内の鉢植えです。


c0335218_20334116.jpg



c0335218_20333424.jpg



イチゴは手入れもせずそのままです。
新しいツルからできた株を植え替えないと大きなイチゴは出来ないそうです。
いまからでもやって見るかな。

c0335218_20370970.jpg


去年植えたタマネギです。
今まで雪の下でしたが元気になりました。
ただ かなりの数がなくなっていますね。

c0335218_20372446.jpg

花の写真の撮り方 いまいちですね。 もっと何とかならないかな。

最近 土いじりが楽しくなってきました。
幼稚園児に逆戻りしつつあるのかな。
あのころ泥団子で遊んでいたら上手なやつがいて、真ん丸で表面がテカテカのを作ってました。
あの歳であんな凄いことやっていたのだからその後の人生どうしたかしら。





# by telmic-gunma | 2018-04-15 22:16 | 季節の風景 | Trackback | Comments(2)

SMC777  フロッピーからデータの読み込みは、何とかできたけれど、データのセーブが出来ない。
3.5インチのドライブが悪いのか、ディスクが悪いのかはまだわかりません。
とりあえずは、なにかプログラムを組んでソフトは動くのか、他に問題はないのかを見てみます。


c0335218_19064423.jpg
 

ソニーBASICで「石取りゲーム」を作って見ました。
ちょうど モニター画面 1枚分におさまりました。
フロッピー以外の動作は正常でしたので、CPUやメモリーはOKということですね。
ウインドーズになれてしまうと、この時代の1行40文字、半角のみは猛烈に辛いですね。
それに MS-DOSの操作でさえ怪しいのに CPM80の操作なんて全く覚えていません。

c0335218_19065174.jpg


 モニター画面では見にくいので見やすくしてみました。

------------------------------
50 ISHIZAN=15
100 PRINT "イシノ ノコリ=" ; ISHIZANN
110 PRINT "アナタノ バンデス 1-3"
120 INPUT HITO
130 ISHIZANN = ISHIZAN - HITO
150 PRINT "イシノ ノコリ=" ; ISHIZAN
200 IF ISHIZAN < 2 THEN PRINT "アナタノ カチ" ; GOTO 500
260 PRINT ISHIZANN ; "コンピュータ ノバン"
300 AMARI = ISHIZAN - (4*INT(ISHIZAN/4))
310 PRINT "アマリ=" ; AMARI
320 IF AMARI=0 THEN HIKU=3:GOTO400
330 IF AMARI=1 THEN HIKU=1:GOTO400
340 IF AMARI=2 THEN HIKU=1:GOTO400
350 IF AMARI=3 THEN HIKU=2:GOTO400
380 PRINT"380 error ":STOP
390'
400 PRINT "コンピュータ ノ トッタイシ=";HIKU
410 ISHIZAN=ISHIZAN-HIKU
430 IF ISHIZAN < 2 THEN PRINT "コンピュータ ノ カチ":GOTO 500
450 GOTO 100
500 PRINT "ゲーム シュウリョウ シマシタ":STOP

これで終わりです。



以前に作った 石取りゲームの手順を考えたときのメモです。 
これが有ってよかったです。   
基本の計算手順は、現在の残数を4で割ったときの余りを出して、(0~3) その余りに対応する数値に変換します。
その変換したものを、現在の残数から引きます。
      (メモ1)
c0335218_19045062.jpg


手順 ( メモ2 )

c0335218_19044415.jpg

その後の福寿草です。
この日は寒かったせいか、花の数は増えたようですが小さくなったように感じますね。
もう 終わりに近づいているのでしょうか。

c0335218_19083152.jpg

とにかく フロッピーのドライブとディスクを直さないことには、この先遊びにくいですね。

# by telmic-gunma | 2018-03-08 21:35 | 昔のパソコン H68TR GAME言語他 | Trackback | Comments(0)

一発では動作しませんでした。
もっとも手こずったのは、3.5インチのデスクドライブ。
メカが固まってフロッピーが正常にセットされずデータが読み込めませんでした。
SMC777のROMはIPL用のものが少し載っているだけで、OSやBASICはフロッピーからRAMに読み込んで動作するようになっています。
当時の8bitパソコンは(PC8001,FM7など)フロッピードライブが高価であるため基本はROMにBASICが書いてありそれで動作していました。
そういう意味ではSMC777は時代の先端を行ってたのですが、逆にフロッピードライブが正常でないと全く動作しません。
今回 電気回路は正常であったため、電源をONするとモニター画面には、「フロッピーディスクを入れろ」と表示されてきました。
しかし、フロッピーをどう入れ替えても動作しません。
結局フロッピードライブを外していろいろ調べたら、フロッピーの磁気面を保護するシャッターが開いていません。
複雑なメカのあちこちに潤滑剤の「クレ556」を付けてガシャガシャいじってみました。
そうしたら、メカはやっとそれらしく動きシャッターも開くようになりました。
この「クレ556」すごいですね。
鍵や自転車など金属の動くところ、いつもお世話になりますが、期待通りに働いてくれます。
これで電源をONにしたら無事フロッピーを読み込んでくれるようになりました。
動作確認をしたところ、数値キーやアルファベットキーは正常に動作していました。
ただ 右のフロッピーの手前にある上下左右のキーパッドを受け付けてくれません。
これが動かないと、SONYファイラー(CP/MをSONY用に修正したもの)を操作できないので次回のブログまでに直してみます。

3.5インチ フロッピードライブを外したところ。


c0335218_18200104.jpg



c0335218_18195552.jpg

フロッピードライブが動作しないときのモニター画面

c0335218_18194988.jpg

フロッピーが動作して SONYファイラーが動作した時の画面

c0335218_18200879.jpg



雪の下になった花はその後どうなったのか見にいきました。
小さくしぼんでいたにも関わらず全部が前よりも大きく元気になったように見えます。
こんなように生きていきたいですね。
雪の下にあった期間がもっと長ければどうなるのでしょうか。
気になります。


c0335218_18201961.jpg


一番奥の雪を被ったのが武尊山です。「ほたかさん」と読みます。
頂上付近に「川場スキー場」があります。
怖くて一度も滑ったことがありません。


c0335218_18202527.jpg



# by telmic-gunma | 2018-02-21 22:27 | 昔のパソコン H68TR GAME言語他 | Trackback | Comments(4)

SONY SMC777 発掘してきた _2

SMC777 和文アイウエオ順のキー配列です。
ウインドーズ用のキーボードで、同じようなのないかな?

c0335218_08535013.jpg

上のカバーを外したところです。

c0335218_08535981.jpg
キーボードの基板を避けたところです。


c0335218_08540718.jpg
CPUボードのところを拡大しました。 まだTTL(LSタイプ)がほとんどです。
今では、これの何万倍の能力あるものが、手のひらに乗る時代なんですよね。
まだ35年しかたっていないのに。 このあと35年したらどうなるのでしょうか。
このパソコン結局 まだ通電はしてないのですよ。


c0335218_08542290.jpg

探してきた SMC777 関連のマニュアルや本、 松田聖子ちゃんが表紙に載った本があったはずなんだけど見つからず。

c0335218_08542941.jpg

SMC777 動作したらこのテーマは続きますが、動かなかったら今後ありません。 あしからず。


雪が積もっていて場所が分からなかった「福寿草」?を掘り出してみました。
花はつぼんでいますが元気そう。
また見にいってみます。 家から1kmほど離れているので歩いて見に行くのちょっとたいへん。

c0335218_08562398.jpg



# by telmic-gunma | 2018-02-20 09:22 | 昔のパソコン H68TR GAME言語他 | Trackback | Comments(0)

SONY SMC777 発掘してきた

物置の奥から SONYの8ビットパソコン SMC777を発掘してきました。
(ほこりの中に埋まっていましたから)
調べたら もう35年も昔のものなのですね。
ほこりをものすごく被っており掃除してやっとここまで綺麗にしました。
内部はまだ掃除してないので、怖くて電源は入れてません。
当時 子供の勉強に役立たせたいと思って算数のゲームなどを作ってました。

この頃は、多くのメーカーが8ビットパソコンを作っていましたね。
NEC、シャープ、富士通、エプソン、東芝に吸収されたソード、そしてSONY
それなりに各社個性が有りましたが、やはりSONYが飛びぬけて個性のかたまりでした。
この頃のSONYは、すべてにおいて輝いていたと思います。
このSMC777にも使われている3.5インチフロッピーを開発して世界標準にしたり、
ダントツに綺麗な画面を誇るトリニトロンカラーテレビを作ったりしていましたね。

SMC777の仕様
CPU Z80
OS CP/M (マイクロソフトのウインドーズに相当 ROMのBASICは無し)
主メモリ  64K byte 最初からフルサイズ入っているの他社には無かったと思います。
ビデオラム Z80のI/O空間を使って 32K byte (主メモリには影響を与えない)
画面解像度  320×200 ドット 16色
       640×200 ドット 4色
       カラーパレットを付けて4096色から選べる
デスクドライブ 1DD 3.5インチ 280K byte

キーボードの和文文字の配列が、左上から右に向かって「アイウエオ」順になっています。
私のように、和文キーボードが使えない人にとっては、優しい作りと思います。

標準でSONY独自のBASICが付いており、たしか演算はBCD14桁で精度が良いのをうたい文句にしていたと思います。
これ用のソフトもSONYから各種出されていました。
その中で「 FORTH言語 」を買っておいたのですが、結局一度も使っていません。
SMC777が動作したら、ぜひ FORTH をいじってみたいですね。
動作しなかったらもうブログに出てくることも無いでしょう。


c0335218_17480310.jpg


散歩している時、道端に咲いていたので撮りました。
毎日 強烈な寒い日が続いているのに、どうしてこんなにきれいな花が咲くの?

名前は「福寿草」だと思います?
今日 2月17日の夜 雪が降り始めたけど、大丈夫かな。 明日見に行ってみよう。

c0335218_19312888.jpg



c0335218_19315884.jpg




# by telmic-gunma | 2018-02-17 21:02 | 昔のパソコン H68TR GAME言語他 | Trackback | Comments(2)

ニュートンライト が出ました。
Newton別冊の内容を抜粋、加筆、再編集したものだそうです。
内容はNewton別冊とほぼ同じでビジュアルの見やすい形はそのままです。
大きさ比較のため HP29C が乗せてあります。
数学の勉強は全然進んでいないけれど、また少し楽しめるかな。

c0335218_21035882.jpg










# by telmic-gunma | 2018-02-12 21:39 | HP電卓 | Trackback | Comments(0)

「運」について時々考えています。

日本人に生まれるか、お金持ちの家に生まれるか、貧乏の家に生まれるか、自分では選べませんね。
みな病気にはかかりたくないと思っていてもかかってしまうことありますね。
私は大の親友を三十代に癌で亡くしました。この時は、涙があふれて止めることができませんでした。
この様なことは、我々がいくら努力しようが変えること不可能なことと思います。
ただただ、黙ってそれを受け入れて我慢しこらえるしか対応の仕方はないと思います。

それに引き換え自分の努力で改善できる運というのも沢山有りますね。
私自身の今までの人生を振り返ってみると、勉強や努力したというよりも運が良かったということが多かったと思います。
就職する時代は(オイルショック前)景気が良くて すんなり会社に入れ、入社後配属された部署は開発設計部門で学生時代の趣味の延長のような感じで仕事してました。(もしかしたら遊んでいたのかも)
また今思えばこの頃は、上司や仲間にも最高に恵まれてました。
それ以後50年近く、そして今でもこの会社にお世話になっているのですが、後半の時代は景気が悪くなったこともあり、
ノルマノルマでみんなギスギスして大変でした。
毎日夜中の12時過ぎまで残業して体を壊し亡くなった仲間や 上司からの叱責でうつ病になって辞めていった人など、
まあ こんな事言ってる私も同じ会社を二度首になってますけど。 今で言うリストラですね。
今は「法令順守」がうるさいのでこんなことはありませんが、人間としてのまともな考えを持っていれば、法律有ろうがなかろうが部下を人間として尊重したやり方があったと思います。

「運」に話を戻します。
自分の努力で改善できる「運」というのは、ほとんど他人が善意で届けてくれるものと思います。
私は6回お見合いをしてやっと最後のお見合いで結婚できました。
この時代は今のような、合コンや婚活パティーなど無く 会社の上司や仲間、おじさんおばさん、友達などの紹介でお見合いのチャンスを貰いましたね。
これなど仕事や人間関係を真面目に誠実にやっていたから、お世話してもらったのだと思います。
私がリストラされたあと自分で登記して会社を興したのですが、お客さんが別のお客さんを紹介してくれたりして、いつも仕事に追いかけられていたように思います。

上記の事などより私の考える「運」良くする方法をまとめてみると、当たり前のことを誠実にやり続けることだと思います。

1、感謝の生活をする。 お世話になった人には、感謝のあいさつを最低二回以上する。
2、おはようございます、さようなら、のあいさつを必ずする。 
(「オーッス」とかで済ますひと結構多いです。それも役職の人で)
3、笑顔が第一。(かなり難しいですね。)
4、技術書などの勉強の本は自腹で買う。 
   勉強会の成果は、教えられる側の意欲できまる。
(これ小学生には通じないでしょうね)
5、どうしてこうなった、ではなく これから、どうしたらいいのか と考える。 
すべては自分の責任。
6、収入以下で生活する。 借金で周りに迷惑かけまくりの人が結構います。
7、悪意を持って行動する人間が本当にいることに気づくべし。 
私は、だいぶ歳をとってから気付きました。
  (経験上、親戚などの身内に多かった。 
京大のIPS細胞 山中教授の所でのデータ捏造もそうですね。)


何だか全然まとまりませんが、とりあえずこんなところです。


一番好きな言葉 忘れてました。

一寸先は光

今まで、がむしゃらにやってきましたが、結構何とかなっています。





[追記」
2018年2月4日(日曜日) このブログを書いた1月31日の4日後に書いています。
今日 仕事のため高速道路で移動中すぐ近く交通事故がありました。
幸い巻き込まれなくて済んだのですが、これなども運が良いと言えるのでしょうか。
中央高速下り線 山梨県の一宮御坂あたり PM1:30ころ 電光掲示板で「事故渋滞」ありと表示されていたので慎重にすすみやがてズラーと渋滞の車列が見えてきました。
ハザードランプを点灯させてゆっくり通行車線の最後尾に停止しました。
バックミラーを見ると私の後ろの車もハザードを点灯させてゆっくりと停車しました。
これで平気だなと思って視線を前に移した時、「ドカーン」とすごい音がしました。
バックミラーを見ると4トン車くらいのトラックが乗用車にぶつかり斜めに停車してました。
わたしの車から5台位後ろの追い越し車線です。
両方の車から人が下りてきたので、ケガはなかったのかもしれません。
やがて私の前方の車が流れ出したので、流れに乗って進んだのですが、私の後の車は3台ほどしか付いてきません。2車線とも止まったままです。
結局両方の車線の車がダメージ受けたのでしょうね。
私も、あと5台ほど後ろを走っていたら間違いなく巻き込まれたでしょう。
へたをすれば、このブログも更新されなくなったかもしれません。

このようなきわどい事 時々ありますね。
以前 秋葉原で部品探しをして帰る途中、家族から携帯電話がきました。
「今テレビで秋葉原が大変なことになってるって言ってるけど大丈夫?」
私が秋葉原を後にしてから30分後のことです。
これが「秋葉原 通り魔事件」でした。

我々は 事件、事故とは紙一重のところにいつもいるのかもしれません。
そして自分がいくら注意しても防げないことが沢山あるようです。
こういう事と運ということ、いろいろ研究してみたら面白そうですね。




# by telmic-gunma | 2018-01-31 23:59 | ときどき思うこと | Trackback | Comments(4)

前回の続きで雑誌ニュートンの2018年2月号「美しき無限の数式」特集のπ(pai)に関するもの HP電卓を使って遊んでみます。
今度は HP42S を使いました。
理由はHP42Sは 2行表示なので何項目かの表示とそこまでの積算値が一度に表示できるからです。


c0335218_19244143.jpg

このページには4個の式が載っていますがまずは一番上のだけやってみます。
HP42Sのプログラムリストです。

------------------------------

01 LBL "AA" * イニシャライズスタート
02 0 *
03 STO "B" * 分母の値 1,2,3 - - 初期値をセット 1
04 STO "A" * 積算合計値 - - - - の初期値をセット 1

05 LBL "BB" *ループ計算の先頭ラベル
06 1 *
07 STO+”B” *分母に1を加算する
08 RCL ”B" *加算した分母を呼込む
09 X^2 *分母X^2乗の計算
10 ÷ *分子割る分母
11 STO+ "A" *累積値に1/(X^2)を加算する
12 RCL "B" *項のNoをYレジに表示
13 RCL "A" *ここまでの累積合計値をXレジに表示
14 R/S  *ストップしてここまでの累積値を表示
15 GTO "BB" *ループヘッドへ戻り計算を繰り返す


これを N88BASICで書いてみると、以下のようになります。

100 A=0:B=0
200 '
210 B = B + 1
220 A = A + 1/(B^2)
230 PRINT B,A
240 GOTO 200
ごく簡単なプログラムになりますね。

このページ一番上の式の左辺 
(π^2)/6を計算すると1.64493406685となります。
右辺をプログラムまわして計算するとどんどんこの値に近づいていきます。

しかし 不思議ですね こんなきれいな数列を計算していくと円とは全く関係なさそうなのに円周率が答えになってくるなんて。
そして 昔の人は、電卓や計算機など無い時代にどのようにしてこれを確かめたのでしょうか。



# by telmic-gunma | 2018-01-21 22:10 | HP電卓 | Trackback | Comments(0)

干し柿が出来た

この前撮った写真を届けに行ったら、ちょうど干し柿ができたところだったのでいただいてきました。

 
種の無い柿から作ったので、当然 種はありません。
ほの甘くて柔らかな干し柿です。
食べるには 最高においしいのですが、もうすこし見た目良く作れればいいのにね、と思いました。

c0335218_21174949.jpg




c0335218_21175700.jpg




これは 干し柿を作っているときの写真です。
c0335218_20323388.jpg


# by telmic-gunma | 2018-01-17 21:34 | 季節の風景 | Trackback | Comments(2)

雑誌ニュートンの2018年2月号に「美しき無限の数式」と言う特集がありました。

また HP電卓を使って遊んでみます。
HP32Sを使いました。

c0335218_19235105.jpg


いくつもの式が載っていますが、まずは最初のものに挑戦してみます。
テキスト文で分数がうまく表示できないので写真右の式を参照してください。

c0335218_19243179.jpg
HP32Sのプログラムリストです。

------------------------------

A01 LBL A * イニシャライズスタート
A02 1 *
A03 STO B * 2の指数の値 1,2,3 - - - の初期値をセット 1
A04 STO A * そこまでの合計値 - - - - の初期値をセット 1
A05 ENT *
A06 1 * 最初の分数の分子
A07 ENT *
A08 2 * 最初の分母
A09 ÷ * 分数を割り算して少数にする
A10 + * 過去の累積値と今回の計算を加算する
A11 STO A * ここまでの合計値

B01 LBL B * ループ計算の先頭ラベル
B02 1 * 分子の1をセット
B03 ENT *
B04 2 * 分母の2をセット
B05 ENT *
B06 1 * 分母の指数
B07 STO +B * 分母の指数に1を加算する
B08 R↓ * 分子の1のスタック位置合わせ
B09 RCL B * 加算した分母の指数を呼び込む
B10 Y^X * Y^X乗の計算
B11 ÷ * 分数の割り算
B12 STO +A * ここまでの累積合計値
B13 RCL B * (不要)hp42Sの時項のNoをYレジに表示する
B14 RCL A * ここまでの累積合計値をXレジに表示
B15 PSE * 累積値を1秒間表示する
B16 GTO B * ループヘッドへ戻り計算を続ける

これで終わりです。


やってみると、意外とはやく2に収束していきます。
まずは簡単な小手調べというところですか。
式は全部で10種くらいあるにかな、 順次やっていくつもりです。


***************

++++++++++++++ 
-------------------------



# by telmic-gunma | 2018-01-17 20:31 | HP電卓 | Trackback(2) | Comments(0)

正月病になりました

正月病になってしまいました。
正月に我が家に帰省していた孫たちが帰ったとたん熱が出て丸二日間寝込んでいます。
昨日は一食も食べられず「これでダイエットができる」と喜んでいたのですが何日もそういうわけにはいきません。
じつは数年前にある病気にかかり、お医者さんから風邪薬とアルコールは絶対ダメと言われています。
時々定期健診に行くのですが、毎回「アルコールは飲んでいませんね」とちぇっくされています。
なので今回は風邪薬は飲まないで、治る迄ひたすら寝ているというわけです。
サラリーマンの時代には、風邪くらいで会社を休むなんてことはなかったんですけれど。

これは ほんとの意味での正月病ではないですね。
今回 風邪で寝込んでいろいろ考えました。
「やる気」というのは体が健康であってこそ出てくるのですね。
寝込んでいると気分がどうしてもマイナス方向にしか行かず、当然気分がマイナスなら考え方もマイナスですね。
以前 プロの将棋の世界でA級在籍のまま亡くなった村山聖さんなんか病気の身でありながら将棋の最高位まで行ったなんてすごい人だったんですね。

今日は少し気分が良くなったので「死ぬまで好奇心、 川北義則」を読んでいました。
川北さんは現在83歳 私は68歳なので15歳も先輩です。
定年後の生き方などを書いてある中で以下のところに共感しました。

「人間は死ぬまで働くべきだ」
「自分で稼いだ金で遊ぶことが長生きにつながる」


じゃあ年金は要らないのね。 
と言われそうですが年金でいただけるお金は皆さんそうだと思うのですが生活だけで手いっぱいで遊ぶほうに回す余裕はありません。
また 70歳を超える高齢者には家族を支える収入などとても稼げません。
そこで この川北義則さんの考えが生きてくるとおもいます。
稼ぐのは現役時代ほどは必要ありません。
生活は年金の範囲内でつつましくやり、ほんのチョット お小遣い分だけかせげれば いいわけですね。
稼げば稼ぐだけ使えるなんて夢のようですね。
かりに 月5万円稼げたら年間60万円 好きなことにこれだけ使えるならば何だって出来ちゃいますね。

最近 誰かのブログで見たのですが、「老後とは仕事を辞めた時からだ」というのが有りましたね。
これにもものすごく共感しますね。 働いている限り「老後」は来ないなんていいですね。

年初めそうそう、なんじゃと思われるブログですが今年もよろしくお願いします。



(追記)
おかげさまで 去年の暮れに累積読者数が20000人を超えました。
ちょうど3年間ですので 20000 /(365*3)= 18.2
毎日18人もの人が見てくれたんですね.
ありがとうございます。



# by telmic-gunma | 2018-01-08 16:08 | ときどき思うこと | Trackback | Comments(4)

韓国は病気? 2

 いつも愛読しているメールマガジンで”疋田 智”(ヒキタ サトシ)さんが面白いこと言ってたのでここに載せます。
(疋田 智さんはTBSのプロデューサーで自転車関連の本を沢山出しています。)
以下 メルマガの転載
********************************************

疋田 智(ヒキタ サトシ)


週刊 自転車ツーキニスト "Weekly Bicycle Tourkinist"
 隣人の「幼児性」にほとほとあきれる760号 

■文在寅大統領の声明

 なんだかなぁ、昨日の韓国・文在寅大統領の声明には、ほとほとあきれたね。
「(慰安婦合意検討タスクフォースの「検証」結果を受けて、日韓合意に)重大な欠陥があったことが確認された。この合意では慰安婦問題が解決されない、という点を、改めてはっきり明らかにする」という。
 事実上の「合意破棄」への布石なんだろう。
 国と国とが決めた約束、それも満天下で発表した合意を、今も、そして今後も守らないんだそうだ。

「韓国民は納得していない」とか「前政権がやったこと」とか、何だかんだと理由をつけてるけれど、そんな論理が通じると思ってること自体がおめでたいが、ま、そんなのは、あなた方の勝手なお家の事情でね、どうぞ国内でやってくれ、というに尽きる。
 我々日本人としては「国と国との約束は守りましょうね」という至極当たり前のことを要求するだけだ。
 こちらは守ってるのである。そしてこれにて「不可逆的に最終決着」と両者で宣言したのである。それこそ、国際社会が見守る満天下のもと、握手して誓ったのだ。
 もはやゴールポストは動かない。
 河野外相は「もし万が一、韓国政府が既に実施に移されている合意を変更しようとするのであれば、日韓関係は管理不能となり、それは断じて受け入れることはできない」と言った。当たり前だ。

 じつのところ、あの日韓合意に関しては、こっちにだって、言いたいこと、不愉快な内容はあるのだ。だが、国家間の合意なんてのは100%の解決はないわけで(つまり常に「痛み分け」だ)、そのあたりはグッと飲み込んで「未来志向」のために合意した。
 隣人じゃないか、おたがい仲良くやろうぜ、とね。

■今回の話は「歴史問題」じゃないぞ

 ま、そのあたりの話は、各紙(あの朝日新聞も含めて)昨日の社説で縷々書いているし、別にここで改めて力説しちゃっても仕方ない。だけど、私として気になったのは、文大統領の同じ声明の中の次の部分だった。

「同時に、私は歴史問題の解決とは別に、韓日間の未来志向的な協力のために正常な外交関係を回復していきます」

 これ、もちろん「ツートラック外交」つまり「歴史問題と、経済などは分けよう」という話を示しているわけだが、いやはや、今回の場合、そりゃ無理ってもんですよ。
 だってね、今回のこの話は「歴史問題」じゃないもの。
 内容じゃなくて、その前提としての「決まりごと」「ルール」の話。
 国家間の合意が守れない、約束が守れない、と、本質はただそれだけでありまして、そういう国と「契約」なんて結べるもんなんすかね。

 経済の話ってのは、突き詰めて考えると、取引の契約をどう結び、金銭のやりとりをどう決めるか、という話に尽きるのであります。いちど交わした契約書ってのは(当たり前ながら)シビアなものでね。「社員感情(?)がどうの」「納得できていない人がいる」みたいな理由でひっくり返すことなどできない。
 ちょっと当たり前すぎて笑ってしまうんだが、そんな当然中の当然のことが分からない、ということを、大統領みずから表明してしまったわけで、これ、現代史に残る「異常国家ぶり」というのか、失礼ながら「幼稚国家ぶり」ではないんじゃろか。

■それにしても「ツートラック外交」

 それにしても、文大統領得意の「ツートラック」という言葉だ。いい加減、韓国の方々にも気づいて欲しいと思うんだけど、あなた方が、かくも嫌われ、孤立する理由は、じつはこの言葉に象徴される「外交態度の本質」にもあるぞ。
 英語にしたら何だかカッコよく紛れる(?)とでも思ってるのかもしれないが、これって要するに「二枚舌外交」ということと同義ではないの。
 都合のいいときは合意、悪くなったら破棄、あの約束は守るがこの約束は守らない、あのときはあのとき、今は今…。
 日本だけじゃなく、アメリカも、中国も「あっちではああ言ってたのに、こっちではこう言う」という二枚舌に辟易してるわけですよ。で、結局、約束を守らないんだから…。
 トランプ大統領が「激怒」し、習近平主席が「冷遇」するわけだわ。

■大統領も国民も……

 その根っこはどこにあるかというと、私が思うに、ある種の「自己中心性」、しかもちょっと信じがたいほど幼児的な「自分ファースト」なんだろうと思うのだ。
 常に自分の都合でのみ、ものを考え、他者について考えがいたらない。自分に都合の悪い約束は、その場で破ったってかまわない。理由なんて後でいくらでもつけられる…。
 そういった姿勢を、大統領みずから「国家としての姿勢であります」と満天下に示してしまったのが、今回の話でね。私など「もしかして(もしかせんでも)大統領以下、国家国民全員がもつ体質なのか」とすら疑ってしまうわけだ。だってね、次のような話が、それをみごとに証明してるんだもの。

 このところ増え続ける海外からの観光客なんだけど、それにともなって急増してる問題に「ノーショー問題」というのがある。店の予約をしていたはずなのに、予定時刻になっても、客が現れもしない(No Show)という問題だ。もちろん店側はきちんと用意している。「予約」という契約を守る。でも客は来ない。当然ながら、店にとっては大ダメージだ。
 韓国人旅行者に突出して多いんだという。
 店側が連絡すると「別の予定ができたから」「店の評判がいまいちだったから」「急に気が変わって他の店にした」なんて悪びれもせずに答えるんだそうな。そんなのはアンタの勝手な都合だろうが、約束は守りなさいよ!……という怒りを押さえつつ、店が「困ります」と抗議すると、決まって逆ギレされるらしい。
 何かに似てません?
 もちろん似てますよね(笑)。
 似てるどころか、上から下まで、大から小まで、みごと首尾一貫している。ちょっと感心するくらいにね(笑)。

 以前も書いたけど、我々のとなりには、こういうちょっと風変わりな隣人が住んでいる。
 こちらの論理など通じない。異様な言動としつこさで有名。自分勝手な論理を振り回し、町内の約束など守れない。こっちとしては辟易するけど、残念なことに隣人は「そういう人」なのだ。善も悪も好き嫌いもない。ただ単に「そういう人」。
 我々はそれを知った上で、今後もこの隣人とつきあわなくてはならない。
 ほんとにもう難儀なことだけど、残念なことに、どうやらそれは事実なのだ。

**********************************************************
疋田 智(ヒキタ サトシ)
週刊 自転車ツーキニスト "Weekly Bicycle Tourkinist"

以上 メルマガの転載でした。




# by telmic-gunma | 2017-12-29 12:25 | ときどき思うこと | Trackback | Comments(3)

お正月の準備

お正月の準備をしました。
c0335218_09140212.jpg

「模型飛行機がどうしてお正月の準備なんだ。」 と言われそうですが、正月に来る孫たちと遊ぶための準備です。
5機作ってあれば、壊れても何とかなるかな。
1機作るごとに、こうした方がいい、とかああした方が良いとか思いつくので、満足するまでには数十機作る必要がありそうです。
材料はたくさん揃えてあるので、孫と一緒に作るのも楽しみですね。
ただし ああだこうだと、つい口を出すのだけは、控えていかなくちゃ。出来るかな。難しそうだな。

c0335218_09141696.jpg


組み立て途中の状態です。
材料のバルサと接着剤はホームセンターで買ってきました。
ホームセンターすごいですね、バルサなんてマニアが買うだけと思うのですがよく揃えてありました。
ちなみに、近場の他のホームセンターやおもちゃ屋さん、模型屋さんなど5軒ほどまわってバルサがあったのは、このカインズホームだけでした。
バルサの厚みは三種類使っており、 
胴体 厚さ3mm
主翼 厚さ2mm
尾翼 厚さ1mm
です。
c0335218_09145329.jpg


# by telmic-gunma | 2017-12-18 11:20 | おもちゃ | Trackback | Comments(6)

リンゴを持って先日頂いた柿のお礼に行ったら、丁度干し柿を作っているところでした。
同じ渋柿でも甘くする方法はいろいろあるのですね。
先日頂いたのは、木になっている状態で渋抜きをしたので、実も生のままで歯ごたえが適度にあり美味しかったですが、
この干し柿は柿の皮をむいて白い粉がふくまで乾燥させるそうです。
この干し柿の一番おいしい時は白い粉のふく直前だそうです。
柔らかくてトローンとして最高だそうです。
「御馳走するからまたおいで」と言われたので、こうい時はごくごく素直に言う事を聞いちゃいます。

c0335218_20062993.jpg



c0335218_20323388.jpg


皮をむいてこれから吊るすところですね。
皮をむく専用の機械は300万円もして買えないから、電気ドリルを改造して作ったというものを使っていました。
何でも回転させるスピードに工夫があって回転が早すぎると実までむけちゃうし、遅いと仕事が進まないので苦労したそうです。
また消毒にも気を付けて作業をすすめているそうです。
凄いですね、80歳過ぎのおじいさんが創意工夫しながら良いものを作ろうと頑張っているなんて尊敬しちゃいますね。
こういう仕事にあこがれますね。 わたしも死ぬまで仕事をしていたいです。

c0335218_20074819.jpg


村の中を散歩している途中にあるリンゴ屋さん。
葉っぱがちょっと萎れてきたようなので、リンゴがより熟したところでしょうか。
品種はなにかな?   たぶん「ふじ」だと思いますが。こういうのまったく 疎いのですいません。

c0335218_21044243.jpg


c0335218_21020806.jpg


このブログの題名 「電子工作やってみたよ」 はどうなったのでしょうか。
いちおう気にはしているので、あたたかく見てやってください。




# by telmic-gunma | 2017-11-28 20:36 | 季節の風景 | Trackback | Comments(2)

日産ノートに自転車を積もうとするとどうしても後部座席を倒して積むしかありません。
これだと後部座席に荷物を積んだり人を乗せたりすることが出来ません。
出張に行く機会が結構多いのですがいつも荷物がかなりあり、自転車といっしょに積むことが出来ませんでした。
そこで何とか後部座席は人や荷物の為に温存しておいて、昔で言うところのトランクに自転車を乗せることが出来ないか、いろいろやって見ました。
なぜ 仕事に行くのに自転車が必要なんだ、と聞かれると返事に困るのですが、私の家の周りは冬の間、雪が積もったり道路が凍結したりで自転車にあまり乗れません。
ならば、途中の雪のないところで、自転車に乗れればいいな、と思って今回のチャレンジでした。


これ 最終的になんとか押し込みました。 バックミラー使って後ろ見ること出来そうもないな。大丈夫か。
自動車のスペアタイヤが無ければ、丁度いい高さまで下がると思うけれど。
c0335218_20281950.jpg



まずはフレームだけ載せてみた。車輪は前後とも外しましたが、フロントフォークは付けたままですみました。
チェーンにはカバーを付けて周りが汚れないようにしてあります。

c0335218_20285435.jpg



これはいままでの積み方、後部座席を倒して自転車を積みます。車輪は前後とも外してあります。
当然 後ろの席には人は乗れませんし荷物もほとんど積めません。

c0335218_20291139.jpg



自転車を乗せる前の状態です。 スペアタイヤが置いてありますが、本来は積まない設定だそうです。
これが無ければ楽々自転車が載せられるのですけれどね。
自転車ではしょっちゅうパンクしていますが、自動車でパンクしたこと記憶にないですね。
だからと言ってスペアタイヤを積まないなんて、臆病な私にはできないですね。
高速道路でも時たまパンクした車が路肩に停まっていますもの。 
いまスペアタイヤは車を買った時付いてこないのですね。
冬用タイヤに履き替えたところですので、このスペアは夏用タイヤを積んだものです。夏になったら逆にするだけ。
そう 今日2017年11月19日(日曜日)初雪が降りました。朝 畑が真っ白でしたが太陽が照ったら消えてしまいました。

いつも思うのですが、事前に準備や対策をしてあるとトラブルは起きなくて、油断して準備をしてないと取り返しのつかないトラブルが起きるようですね。
事前の準備や対策にはかなりのお金や時間がかかるのに、ほとんどが無駄になります。
しかしこれは無駄になることが良い事であって、本当の意味では無駄ではないのですね。
それでも仕事上でのトラブルは起きたとしても、お金と時間をかければ解決できることがほとんどと思います。
ただ個人の場合、準備や対策がしてないでトラブルが起きた場合は、人生そのものがかなりの確率でとんでもない方向に行ってしまうようです。
(わたし 準備しておいたつもりでもとんでもない方向に行きましたけれど。)
原因は二つ、 借金と健康(借金借りるほうも貸す方も) 親戚や仲間のトラブルはみなこの二つです。
なので、わたし 少しでもボケ防止になるようにこのブログ書いてます ???。

c0335218_20273247.jpg


庭に咲いた?、「南天」の木です。 これは白の実をつけています。
よく 重箱に詰めたお赤飯の上に載せてありましたね。

c0335218_20310124.jpg


こちらも「南天」の実 赤です。 白と赤は全く別の木ですね。 一つの木に赤と白の実がなることはないみたいです。

c0335218_20303848.jpg



# by telmic-gunma | 2017-11-19 21:46 | サイクリング | Trackback | Comments(2)

前回 π(パイ)円周率 を求めるのにモンテカルロ法を使って遊んでみましたが、調べる範囲が解っているのになぜ乱数使ってやるの? 
と疑問が湧いたのでモンテカルロ法をちょっと変えてやってみました。
図のNo1はモンテカルロ法で、ひとつの真四角の中に乱数でランダムに点を置いて半円(1/4円)の内側にあるかを調べて数の比率で円周率を求めます。
しかし 調べる範囲が決まっているのだから、なにも不安定な乱数でやることはないと思います。
No2は端から順番に均一に調べていく方法です。 これならばらつきもなく精度が上がるのでないかと思いやってみました。
とりあえず 演算時間もあるので真四角を立て横100等分して合計10000点で調べました。



c0335218_18194215.jpg



c0335218_10462042.jpg


全プログラムリスト 

HP32Sのプログラムです。
10000点のデータが出るまでに20分かかりました。

A01 LBL A
A02 0
A03 STO X
A04 STO Y
A05 STO T
A06 STO P

B01 LBL B
B02 RCL X

C01 LBL C
C02 XEQ H
C03 0.01
C04 STO +Y
C05 RCL Y
C06 1
C07 X>Y ?
C08 GTO C
C09 0
C10 STO Y
C11 0.01
C12 STO +X
C13 RCL X
C14 PSE
C15 1
C16 X>Y ?
C17 GTO B
C18 RCL T
C19 RCL P
C20 STOP

H01 LBL H
H02 1
H03 STO +T
H04 RCL X
H05 X^2 Xの2乗
H06 RCL Y
H07 X^2
H08 +
H09 1
H10 X<Y ?
H11 RTN
H12 1
H13 STO +P
H14 RTN


使用した変数
X
Y
P
T

結果
円の内側の点  7953
真四角の全点 10000

円周率  ( 7953 * 4 ) / 10000 = 3.1812

モンテカルロ法より悪いですね。 縦横100等分ではまだ粗いということでしょうか。
しかし HP電卓でやてみるとこれでも20分かかりました。



************************************************************************

同じ動作をするものを PC9801のN88Basicで組んでみました。(古いですね)
内部演算をバイナリでやっているため、計算の終わりに近づくと少しづつ誤差が累積してきます。
演算時間は30秒くらいでしょうか。

X=0: Y=0: T=0: P=0

WHILE X < 1
PRINT X
WHILE Y < 1
T = T + 1
L = ( X^2 + Y^2 )
IF L < 1 THEN P = P + 1
Y =Y + 0.01
WEND
Y = 0
X = X + 0.01
WEND
PRINT T
PRINT P




これで終わりです。





親戚の農家から柿を貰いました。
柿の品評会で金賞を何度もとったことがあるそうです。
この家の周りには、手入れをされた柿の木がなん十本もあります。
今は 80歳をとうに過ぎていますが、柿を作り始めた歳がなんと70歳だそうで、今の私より歳をとっていたんだ。 弟子入りして教わろうかな。
最初木になっている時は渋柿ですが、木になっている状態でビニール袋を被せ渋抜きをして甘くするそうです。
柿を切って見ると断面にはゴマというのですか黒いつぶつぶがたくさんあります。 当然種なしです。
実は固くて歯ごたえがあり、とても美味しいです。
さて 悩むのは、お返しをどうしよう、ということですね。
もう少したつとりんごがもらえる予定なのでそれ持ってお返しかねて遊びに行ってみようかな。
ついでに言ってしまうと、我が家のネギの苗もこの親戚からもらったものです。
プロというか年期が入っていて市販されている苗よりもとても元気の良いものを作ります。
写真の左下にあるのはHP29c電卓です。大きさ比較のために置きましたがじゃまでしたね。
電卓の上下の長さは13cmです。  この柿を貰う前日スーパーで一つ100円の柿買ってきて食べましたが、それよりもこの方が大きくて美味しいです。

c0335218_19432926.jpg




# by telmic-gunma | 2017-11-16 11:20 | HP電卓 | Trackback | Comments(0)

回路シミュレータで数学のe (ネイピア数)を導いているのをみつけました。
先日(2017年10月29日)のブログでHP電卓を使ってeを求めて見ましたが、同じ値がアナログ電子回路だけで出てくるなんてとても不思議ですね。
ただこれはあくまでシミュレータ上での動作です。
本物の回路で動作させるには疑問点がありますね。
ひとつは 無限大を使うために10kVをアンプに入れていますが、現実にはこの電圧を入力できるものは存在しないと思います。
もうひとつ べき乗器 XのY乗なんて動作するアンプは存在するのかしら。
掛け算器やlogアンプは在りますけれど、これをうまく組み合わせるとべき乗器が出来るのでしょうか。
このへん実物で動作するか、トライしてみたいですね。
数式が書いてありますが、まったく回路図と同じですね。 まあ これが本当のアナログコンピュータなのでしょう。

c0335218_21521085.jpg


c0335218_21194189.jpg

この回路の出典は、 サーキットビューア(回路シミュレータの商品名称)のサンプル回路に載っていました。




わが家の庭のイチョウの木です。 本物はほぼ黄色なのに写真で見るとかなり緑色なのですね。
手入れが大変なので高さを2m位(背の高さよりちょっと高いだけ)にしたのに今は3m位に伸びてますね。
また思い切り短くしようかな。

c0335218_09373956.jpg





# by telmic-gunma | 2017-11-12 22:23 | シュミレータ | Trackback | Comments(2)

HP電卓の入門解説書(モデル67,07)が本棚の奥から出てきました。
これは YHP(横河ヒューレット・パッカード株式会社)が作ったもので、逆ポーランドの動作や、HP電卓の操作がとても解りやすく書いてあります。
HP電卓においては機種が違っても逆ポーランド法の基本はすべて同じです。
上位機種になるほど命令の種類やメモリーがふえるだけです。
ですので ここに載せたモデル67/モデル97の基本のところはたの機種にもそのまま使えます。

この冊子をスキャナで読みjpgファイルにしてパソコンで読むにはくっきりと大きな文字で読みやすいのですが、ブログに転送すると途端に小さな文字となり読みにくくなってしまいます。
いろいろ試したのですが jpgファイルの大きさにより違いがあるようです。
あるサイズ以下ならば拡大され、あるサイズを超えるとそのままか縮小されてしまうようです。
もう少し試してみます。とりあえずは大小混在していますが、ガマンしてください。


c0335218_23353432.jpg

c0335218_08453438.jpg

c0335218_08460848.jpg

c0335218_08474937.jpg

c0335218_08490040.jpg

c0335218_08495602.jpg

c0335218_08503585.jpg

c0335218_08515099.jpg

c0335218_08530244.jpg

c0335218_08535581.jpg

c0335218_08545157.jpg

c0335218_08572368.jpg

c0335218_08594930.jpg

c0335218_09013315.jpg

c0335218_09033212.jpg

c0335218_09043306.jpg

c0335218_09052911.jpg

c0335218_09064069.jpg

c0335218_09081649.jpg

c0335218_09102264.jpg

c0335218_09112729.jpg

c0335218_09125588.jpg

c0335218_09281082.jpg

c0335218_09143865.jpg

c0335218_09302151.jpg

c0335218_09315866.jpg

c0335218_09370363.jpg

c0335218_09354987.jpg

c0335218_09380429.jpg

c0335218_09391805.jpg

c0335218_09403267.jpg

c0335218_09414487.jpg

c0335218_09423894.jpg

c0335218_09433998.jpg

c0335218_09484526.jpg


# by telmic-gunma | 2017-11-07 21:24 | HP電卓 | Trackback | Comments(2)

円周率(パイ π)はいろいろな事で人々を楽しませていますね。
もちろん楽しむ為に存在しているのではなく学問や土木、工業などあらゆる方面で役に立っているわけですけど。
円周率の楽しみ方のなかで一番人気があるのは、いかに多くの数字を記憶するかということでしょうか。
日本人で10万桁も覚えたひとがいるそうですね。
私も中学生のとき友達と何桁まで覚えられるか競争したことがあります。
勉強へのやる気はなかなか起きないのに、こういう事にはやたら一生懸命になれるんですね。
そしてこのように遊びながら本気でやったことはいつまでも覚えていられるようです。
いま紙に書きながらテストしたら26桁出来ました。(3. 14159 26535 89793 23846 26433)
なのに 昨日言われたことはすぐ忘れてしまうのですよ。 これはなんなのでしょうか。
今までの人生でこの円周率覚えていたことで役立ったことないですね。
だからと言って ゆとり世代の「円周率は3」というのはどうだかなーと思いますが。

もう一つ円周率の楽しみは、いかにして計算するかですね。
ネットで調べたら10種類くらいありそうです。
その中で 一番電卓向きと思われる モンテカルロ法をHP電卓を使ってやってみます。
HP32S を使いました。  最近はこればかりになっちゃいました。

c0335218_18194215.jpg


モンテカルロ法をやるには まず乱数の発生のばらつきが均一でなければ正しい測定はできないのでまず乱数を計ってみます。


全プログラムリスト 

A01 LBL A **************************
A02 123.4567  乱数発生器の初期値 何でもよい
A03 SEED    乱数初期値セット
A04 CR VARS  すべての変数をゼロにする

B01 LBL B **************************
B02 RANDOM  乱数の発生 0 ~ 1まで
B03 10     I 乱数を10倍して 0~10までとする
B04 X I
B05 1      乱数に1を足して 0,1,2, を 1,2,3,とする
B06 +
B07 STO i   乱数データが配列のポインターとしてセットされる(少数部分に何かあっても整数部分のみ自動的にポインターになる)
B08 1
B09 STO (i)  発生した乱数に対応する変数を一つ加算する 0~1の時はAが+1 1~2の時はBが+1 2~3の時はCが+1
B10 GTO B


出力されたデータ (30分間測定)
変数名  データー範囲   出力回数
 A     0~1     3920
 B     1~2     3913
 C     2~3     4075
 D     3~4     3937
 E     4~5     3937
 F     5~6     3965
 G     6~7     3925
 H     7~8     4007
 I     8~9      4017
 J     9~10     3983

最大値  4075
最小値  3913
差    162

生データの合計  39677 
データの平均値  39677 / 10 = 3967.7
差 / 平均値   162 / 3867.7 = 0.040829
乱数の発生頻度のバラツキ  4.08%

ばらつき 4% こんなものでしょうか。

最初測定1分間でデータの数150個でやりましたが ばらつきが16%にもなったので 30分間やり直しました。

これで終わりです。




乱数の発生のばらつきはほどほどに働いているので 次 モンテカルロ法でやってみます。
これは x,y 二つの値を乱数でだして座標としそれが円の内部にあるか外部なのかで円周率を求めるものです。 

全プログラムリスト 


C01 LBL C **************************
C02 123.4567  乱数発生器の初期値 何でもよい
C03 SEED    乱数初期値セット
C04 CR VARS  すべての変数をゼロにする

D01 LBL D **************************
D02 1
D03 STO +C  全体の回数 カウントアップ
D04 RANDOM  乱数作成 X
D05 X^2    2乗してaにしまう
D06 STO A
D07 RANDOM  乱数作成 Y
D08 X^2    2乗する
D09 RCL A
D10 +     乱数のXとYを足す
D11 1     乱数を2乗して足したものが1を超えたか
D12 X < Y ?
D13 GTO D   超えていたらデータ無視して次の乱数の計算に入る。
D14 1
D15 STO +D  1以内ならばDをカウントアップする
D16 GTO D   次の乱数の計算に戻る


測定は30分間やりました。
変数名  データー
 A    Xのランダム数
 B    未使用
 C    全体のポイントの回数    30分ごのデータ  23999
 D    1以下のポイントの回数   30分ごのデータ  18861

円周率  ( 18861 X 4 ) / 23999 = 3.14363098   すごい  これ 嘘じゃないの?

誤差の計算  (測定値 ー  真の円周率 )/ 真の円周率
誤差の計算  (3.14363098 - 3.14159265) / 3.14159265 = 0.00064882

これで終わりです。


計算した円周率 3.14363098   
誤差      0.064%

乱数のばらつきが4%あるのに最終誤差がどうしてこんなに減るのだろう。
モンテカルロ法 こんなので精度は出るはずないと思っていたのだけれど。
測定誤差か 計算ミスか  これが正しければ モンテカルロ法ってすごいんだ。 

HP32Sの乱数発生は品質いいみたい。 これソフトで同等の精度のものを作ろうとしたら、結構大変じゃないかな。
配列データの関節指定 ( i ) はうまく使うとコンパクトで解りやすいですね。これ IF文 でやったら、ぐちゃぐちゃになりそう。
HP電卓でプログラムを組むのは もうゲームですね。 役立つかどうかは二の次。

この次は 10種ほどあるという 円周率の計算 別のものでやって見ます。


追記
再現性があるか確認するために次の日(2017年11月1日)に乱数の種データを変えてモンテカルロ法(同じソフト)でやってみました。

乱数の種データ  2.718281828
電卓のRUN時間  30分 (HP32Sにて)
結果       C = 全体のポイントの回数 23734
  D =1以下のポイントの回数 18638

円周率  ( 18638 X 4 ) / 23734 = 3.141147721

誤差の計算  (測定値 ー  真の円周率 )/ 真の円周率
誤差の計算  ( 3.141147721 - 3.14159265) / 3.14159265 = 0.000141627

計算した円周率 3.141147721   
誤差      0.01416%

再現性はいいですね。 しかし気分はデータ良すぎて納得できないな。


これ 次回ブログ作るときの参考の枠です。 関係ないけどここに置きます。

全プログラムリスト 

これで終わりです。



# by telmic-gunma | 2017-10-31 22:06 | HP電卓 | Trackback | Comments(4)