ブログトップ

電子工作やってみたよ

いままで回路シュミレータで パイ や e、積分などの計算をやってみましたが、途中で挫折しました。
なのでゼロから回路シュミレータで数学の勉強をやってみようとアナログ計算機の本など入手して始めてみました。

簡単なところからと 中学でやる 連立方程式を解くのに挑戦してみました。

  X + 0.5Y = 1    ①
  0.3X - Y = 7    ③

式のNoが①と③となっているのは、あとの式の変形時のNoの都合で間違いではありません。
これのX と Y を求める問題です。
最初紙の上でやったのですが、計算の度に違った値が出てきて結局ギブアップ。
いつもコメントをいただく わたしよりはるかに若い、くさかさんにヘルプをだして教えていただきました。

答えは
     X = 3.913
     Y = -5.826

中学の問題と侮るとやばいです。
さて この値が、回路シュミレータからすんなり出てくれば嬉しいのですが。

まず 式を回路に変換しなければならないのですが、回路に組むために式を変形します。
①式を②式に変形します。

     X + 0.5Y = 1    ①式
     X = -0.5Y + 1   ②式    


②式の右辺 -0.5Y + 1 が回路の入力となり 左辺Xが出力となります。
この ②式は 回路図 右の上側となります。

次に問題2行目の③式を変形して④式を作ります。

  0.3X - Y = 7    ③式
  Y = 0.3X - 7    ④式

④式の右辺 0.3X - 7 が入力となり 左辺Yが出力となります。
この ④式は 回路図 右の下側となります。

結局 電圧やら極性など、数式から出した値になるように、無理やり回路を作り上げて答え?が合いました。

回路シュミレータ    X=3.911    Y= 5.824   ピッタリですよね。
紙で計算        X=3.913    Y=-5.826

普通の人が見たら えらく違うじゃないか と言われそうですが、私の感覚からいうとピッタリと言うことになります。
こんなのでは実用価値はありませんが、電気回路で連立方程式が解けるなんて不思議じゃありませんか?
次回 この数式から回路に変換するところ、詳しくやってみます。

c0335218_20041149.jpg








# by telmic-gunma | 2018-12-14 21:30 | 電子回路シュミレータ | Trackback | Comments(2)

今から30年ほど昔、 東京の空は、スモッグでいつもどんよりしていました。
特に環状7号線のあたりはジーゼルエンジンのトラックによる汚染がひどく喘息が問題になっていました。
また 光化学スモッグも毎日の様に発生してニュース出ていました。

そんな頃 このジーゼルエンジンが吐き出したカーボンの粒子を分析する装置を作ってくれとの話がまわってきました。
客先は東京都環境科学研究所 こういう所があるなんてその時初めて知りました。
お役所だから名前を出してもいいのでしょうね。
納期はお役所なので3月末、そしてこの話が来たのは2月に入ってから。
設計を担当するはずだったヤツが会社とのゴタゴタで辞めちゃったたので、というのが原因。
期間は2か月も在りません。いくら何でもそれは厳しいと思いましたが、もともと突貫工事は好きな方なのでやらせてもらいました。
まあ 断れる雰囲気でもなかったと思います。

どんなもの作るのかお客さんの所に聞きに行ったり、同じような研究を筑波研究学園都市の公害研究所でやっているからと教えてもらいにいきました。
お客さんも呆れたかもしれませんね。今頃こんなこと聞きに来て納期大丈夫か?と。
まずは 設計する前から発注出来る部品はどんどん発注してそれから機械設計や電気設計してました。
当時はまだCADなど無かったので、図面は手書きでどんどん書きまくってそのあとをトレーサーの女の子に清書してもらってましたね。

部品が入ってきたら自分で組み立て。 人に手伝ってもらうという考え全然なかったみたい。
なんだかんだ、いろいろ有りましたがハード的には、何とか形が出来て、動作もしました。
残っている作業は、装置のデータを計測して処理しXYプロッタに結果を出すまでのソフト。
当時 世の中の主流だったNECのPC9801の上でN88BASICを動かしました。
しかし ソフトに手を付けたところで、タイムアウト
もう3月末の納期近くになり、物は納めておかないとやばい、ということになり装置は客先に行ってしまいました。
あとは、しょうがなく毎日客先に通ってソフトの制作とデバッグ。
そんな事をやっていたある日、ついに来ました。
予算どおりの物が入っているかをチェックする東京都の監査の人が。
素直に現在の状況を話したら、べつに怒られもせず「最後まで面倒見てくださいね。」と言ってくれたのは、うれしかったですね。 ほんと 大人の対応ですね。
社内では、「納期に遅れれば取引停止になっちゃうぞ」とヒステリー起こすひとがいたのにね。
最終的には、無事お客さんの要望通りのものが出来て検収があがりました。


このお話はまだ続きがあります。
それからしばらくして(数年かな もう忘れちゃいました)当時の石原東京都知事がとっても厳しいジーゼルエンジンの排気ガス規制をはじめました。
まだ国のほうの規制はゆるいままでしたが、石原さんのこの法律に適合しない車は東京都に入ってはいけない、というものでした。
わたしジーゼルエンジンがすきでした。燃費が安いし、上り坂でも力が強いですから。
日産のバネット(ジーゼルエンジン、マツダで作ったOEM)に乗っていましたが、都内に入れないのではマズイと思って、新しい規制に対応したバネットを注文しました。
すぐにできるという話がいつになっても完成しません。 結局一年まってもバネットのジーゼルエンジンは完成しませんでした。
仕方なくガソリン車に変えてバネットを買いました。
この排ガス規制の技術はかなり難しかった様で、他社での話ですが排ガスデータを捏造したとニュースになっていました。

ここで私が言いたいことは、
石原さんの様な人こそ自治体や国の長にふさわしい人だと言う事です。
メーカーの都合など関係なく、住民の健康や、未来のことを考えて絶対必要と思えるなら断固進める強い意志と行動力。
いいですね。 いまの東京の空がきれいなのは、石原元東京都知事のおかげです。
それに引き換え石原さん以後の都知事、特に舛添要一なんてひどかったですね。

いまの東京都環境科学研究所 どうなっているのか気になったのでネットで調べてみました。
ありました。 ついでに私の作った装置出てるかな、探したら出ていましたね。
1989年 「ステップ昇温による炭素成分の熱分析」
忘れていた担当の研究者の方の名前も出ていてなつかしくなりました。
話の通じる優しい人でしたね。


これ シャコバサボテン 玄関の暖かいところで咲いています。
まだまだこれからですね。

c0335218_11435736.jpg

庭に咲いている菊 もう終わり

c0335218_11292977.jpg

これも 庭に咲いている菊 最後の最後ですね。
c0335218_11291422.jpg




# by telmic-gunma | 2018-11-29 12:13 | むかしの思い出 | Trackback | Comments(6)

PICの勉強 再開

PICマイコン しばらくいじってなかったので再開準備
いままで作った試験機のメンテを引き継いでもらうために回路やソフトの勉強会を若い人とやるつもり。
下の写真 回路チェックする治具 作ってみました。
勉強会で使うために作りましたが、ついでにPICで悪さをするためにも使います。
本当は、悪さするのがメインですが、これはないしょ。
最新のマイクロチップのソフト開発システムは、だいぶ変わったらしいですが、私は古いままで行きます。
パソコンもWinXPを使います。ネットにつながないので問題無いはず。

いま やりたいことは、dsPICを使ってデジタル制御をすること。
それと、GAME言語をこのdsPIC上で動かすこと、
気まぐれですから、やり始めるかはたまたやりだしても完成まで行けるか分かりません。

c0335218_07410960.jpg


c0335218_08593029.jpg

東京見物に行ってきました。(今時、この言葉あるのかな)
築地で新鮮で美味しいお寿司を食べてから、スカイツリーに上ってきました。
小学生の時、出来たばかりの東京タワーに初めて上った感激の方がはるかに大きかったですね。

c0335218_09012464.jpg



c0335218_09011691.jpg

朝の散歩をしていたら 狐に出会いました。
しばらく見ていたのですが、あちらからもこっちを観察していたようです。

c0335218_09080191.jpg



# by telmic-gunma | 2018-11-03 09:34 | 電子工作 | Trackback | Comments(6)

若い仲間から「アイデア下さい」と言われて考えたのが下記の回路。
条件は 「入力変化に一定傾斜で追いつく回路」
まだ100点満点じゃないけれど一応それなりの動作はします。
そうこうしているうちに、
「とりあえず製品には入れなくてよくなったので、今回は頭の体操だけということで」
となりました。
c0335218_05163704.jpg
c0335218_05164201.jpg

了解をもらったので、ブログに載せてみます。

この回路 丸三日考えました。
昼間 本気で考えていると、ふとんの中に入っても頭から離れず、ずーっと考え続けていました。
最初は、積分器、コンパレータ、アナログスイッチなどの組み合わせで模索していましたが、
ふとんの中で考えているとき、おもいつきました。

昔 一緒に仕事していた同僚で、どんな回路でも、すぐAGC(オートゲインコントロール)を使いたがるのがいました。
それを組み込むと今まで不安定だった回路が不思議とピターと安定するのです。
今回 アイデアが煮詰まっていたところに、なぜかそのことが思い出されたので、ちょっとトライしてみました。
出力をいろいろ細工してから一番入力の所まで戻してみます。
思った通りの動作をしてくれました。

サーキットビューア(電子回路シュミレータ)いいですね。
回路でも定数でも、手を汚さずにすぐ変更して実験出来るのですから。
一番の効果は実験のための部品集めをしなくて済むことかな。
昔なら考えてから部品集めて実験するまで、えらい時間がかかったのに、
「思いついたら実験できる」なんて夢のようですね。
これも「電子工作」と言うことですよね。

わたし もうすぐ70歳になりますが、「わたしの頭 まだ結構使えるじゃん。」
と本人だけ勝手に思い込んでいます。


# by telmic-gunma | 2018-11-03 06:33 | 電子回路シュミレータ | Trackback | Comments(2)

なかなか頭の中がすっきりとしていないのですが、
ヒントをいただいたので、いろんな方向からアタックしてみます。
この式から数値計算で円周率をだしてみます。

c0335218_20463019.jpg
HP電卓(HP32S)でやってみました。
0から1の間を100分割して高さを出してから幅(0.01)をかけて一つの面積を出しそれを100回繰り返します。
答えは3.1316 多少の誤差はゆるしてください。

c0335218_21022816.jpg
念のため BASIC で計算しました。 3.1715 やはりこちらの方が精度は落ちるのかな。

c0335218_21021426.jpg


式の展開にミスはないのかチェック

c0335218_21024501.jpg

「t=TanΘ とおいて置換積分で解けるよ」とヒントいただき調べたらそっくりなのが見つかりました。
しかし、なぜ三角関数が出てきて X=TanΘ とすると最後π(パイ)にたどりつくのでしょうね。


c0335218_21012400.jpg

そこで 最も基本的なところまでもどり、式とシュミレータ回路の対応調べてみます。
            
               図 1

c0335218_21015123.jpg

図 1 の左上 Y=1 一定のもの 電圧1V時間1秒のパルスで1秒後の電圧は1Vです。
積分器 1個です。 これは 理屈でも直観でも同じで問題在りません。

c0335218_21044179.jpg
図 1 の右上 Y=X 数学的な積分で Y = (1/2)X^2 入力 1Vで出力は0.5Vですからピッタリです。

c0335218_21044768.jpg


問題はこれ
図 1 の下の左  Y=X^2 です。 
積分すると出力は 数学の上では Y=(1/3)X^3 となります。入力が1V1秒のパルスですから出力は1秒後には0.333Vになるべきです。
しかし出力電圧は167mV 想定値の半分です。

c0335218_21045382.jpg

c0335218_21045879.jpg

数値的に解いてはみると 0.338V   入力1Vに対して出力1/3で正しいです。
c0335218_21024034.jpg

c0335218_21020749.jpg

結局 問題あるのは、シュミレータの出力がおかしいと言うことになるのでしょうか。
使い方、考え方 どこかおかしいのでしょうね。
直ぐ答えが出てしまうより、いろいろ試行錯誤しながら答えに近づくのが、楽しいと思います。
と負け惜しみかな。



毎朝の散歩で通る歩行者専用のつり橋です。

c0335218_21034632.jpg

道ばたになっている柿 けっこう大きいです。 おじさんの所でたくさん作っているのですが、まだ連絡来ないなー。
c0335218_21040838.jpg


# by telmic-gunma | 2018-10-25 22:31 | 電子回路シュミレータ | Trackback | Comments(4)

最初の式に戻り 掛け算器を使って二乗を計算してみます。
そのため積分器は2個ですみます。

c0335218_20463019.jpg


左から2個目のOPアンプは極性を合わせるために入れています。
c0335218_14115344.jpg
c0335218_14114095.jpg
わずかな改造ですが、本物の回路のようにつなぎ忘れや、オシロのトリガレベルのずれで起動しないなどいろいろトラブルが起きるものですね。
まあ どんなミスをしても、爆発したり火を噴かないのがいいです。
それと壊れないことも。

結果は 円周率 3.143  前回とちょっとずれました。




# by telmic-gunma | 2018-10-23 14:29 | 電子回路シュミレータ | Trackback | Comments(2)

新しく手に入れた電子回路シュミレータ(インターシムV5)でさっそく、なにかやろうと考えてみました。
以前ネットで, π(パイ 円周率 3.14)をOPアンプを使って実物のアナログ回路で計算しているひとがいたので、それを参考にさせてもらい電子回路シュミレータで置き換えてみました。
この実物アナログ回路でやられたた人のブログ(ホームページかも)の名称は「円周率の計算 アナログ編」です。Googleで出ます。
2005年以降は記事の更新がされていませんので、もう亡くなられたのかもしれません。
こういうの 大好きですね。 何かに役立つわけでなく、お金になるわけでもなく(本人見ていたらごめんなさい)ただ好きだからやる、やりたいからやる、 なかなかこのような事できなくなりました。


回路図は以下の物です。
積分器を3台使っており、この積分回路のコンデンサーのデスチャージ(放電)のためにどうしてもアナログスイッチが必要だったわけです。Ver4以前のサーキットビューアには在りませんでした。

最終的な答えは、オシロ画面の右下にありますが 3.142 でした。 結構いいですね。
この電子回路シュミレータ 何も電子回路の予備実験に使用するだけでなく、物理や数学、制御などの計算にも使えますね。
世の中の通常の技術計算は、有効桁数 2~3桁あれば十分だと思います。
なぜなら世界最初の原子炉は、計算尺だけで設計されたそうですから。
もっとも 第二次大戦まえには計算尺しか計算手段がなかったのだから。
(タイガー計算機があったかな)
ゼロ戦も堀越二郎が計算尺を使って設計していましたしね。
私が学生の頃はまだ電卓が世の中には無くて、みんな計算尺を使っていましたね。
ヘンミ計算尺 電気設計用で値段は4000円位だったとおもいます。
一応買いましたが、私は紙の上で鉛筆使って手計算専門でした。

c0335218_20091021.jpg

このシュミレータ上のオシロスコープは、本物同等以上にいろいろ面白い動作をさせることが出来ます。
右下の隅に円周率計算の最終結果が出ています。
積分を3回やって出た結果 3.142 となっています。( 正解は 3.141592 すごく良いです。)
不思議ですね。この回路の定数のどこにも 3.14 なんて入ってないのに、どこからこの数値が出てくるのでしょうか。
円周率なんて 数学の図形の問題でしょう。電子回路とは全く関係ないはずなのに不思議ですね。


c0335218_20092128.jpg

以下は ネットの「円周率の計算 アナログ編」で説明されていたことです。
計算の出発点はこの式。
円周率を積分使って導く定理だそうです。


c0335218_20463019.jpg

上記の回路だと二乗するために掛け算器が必要になるので、それを無くすため
上記の式を変形して、二乗をなくして積分で済ませるようにしています。
答えは出ましたが、この定理の式や回路が納得できません。
(腑に落ちない、 いや 理解できないのですね)
あとで じっくり考えてみます。
c0335218_20462875.jpg


朝の散歩道 リンゴが実っていました。 真っ赤でもう食べれそうです。
品種は何かな、フジはまだ早いようなきがするけれど。
リンゴに限らず くだものは昔に比べると甘くて美味しくなりましたね。
小さい頃の思い出では、リンゴはすっぱいものという記憶しかありません。

c0335218_20463085.jpg


c0335218_20463067.jpg



c0335218_20462965.jpg


# by telmic-gunma | 2018-10-21 20:54 | 電子回路シュミレータ | Trackback | Comments(3)

何気なくネットを覗いていたら「サーキットビューア」回路シュミレータがバージョンアップしたと誰かが書いていました。
すぐに発売元のマイクロネットのホームページを調べたら、回路シュミレータとともに、デジタルシュミレータもバージョンアップされておりその合成されたものが「インターシム」という名で販売されていました。
私がサーキットビューアVer4を購入したのは2010年7月でしたから今度Ver5になったのはえらくスパンが長かったですね。
マイクロソフトのウインドーズはバージョンアップばかり繰り返しているけど、少しはマイクロネットさんを見習ってほしいものですね。(私にとってはWinXPのままが一番うれしいですけれど。)
聞いてみたら古いバージョンを持っている人には、バージョンアップと言うことで割安になるそうです。
いままでのVerで不便な点としてアナログスイッチが無かったのですが、今度それが使えるようになり、その他モロモロたくさん改良されているとのことなので、我慢できなくなり即購入手続きしちゃいました。
一応、嫁さんの許可はとりましたけれどね。
これから先、これが役立つことがどれほどあるか判りませんが、わくわくして楽しめればそれで充分と思っています。
私の周りには、100万円のオシロスコープを自分のオモチャとして買っちゃうような人も居ましたから。


c0335218_17212296.jpg


c0335218_17213447.jpg


以前 dsPICのDSP機能を使って電源のデジタル制御に挑戦したのですが、勉強不足で挫折、その時はアナログのPID制御と同じものをC言語で置き換えて「デジタル制御だ」と言い張っていました。
今回、これで勉強してぜひ 本当のDSP デジタル制御をやりたいですね。
dsPICで作ってあるので、ハードそのままで、ソフトを書きかえればデジタル制御になるはずです。
まあ 今までのC言語で作ったものでも,仕様は満足して正常に動作はしているのですけれど。

c0335218_17214235.jpg


今朝、散歩道に咲いていた百日草(ヒャクニチソウ)です。
たくさんの種類があるのですね。
こういうのも 誰かが植えるのでしょうね。 自然には生えないでしょう。

c0335218_17225545.jpg

c0335218_17222547.jpg


ピンボケです。撮り方勉強しよう。


c0335218_17224226.jpg


c0335218_17221626.jpg













# by telmic-gunma | 2018-10-14 18:26 | シュミレータ | Trackback | Comments(2)

先日のブログに書いた、イチゴの粒を大きくする話の続きです。

イチゴについては、毎年 雑草で悩むので何とか出来ないかと思っていました。
雑草を防ぐ方法としてマルチと呼ばれる黒のビニールシートで地面を覆うという方法があります。
太陽の光を地面に当てなければ雑草は生えることが出来ないと言うことです。

今回 すでにイチゴの苗は植えてしまったので穴を開けたマルチは使うことが出来ません。

そこで単純に稲のワラをイチゴの周りに並べてみました。
これなら雑草を防ぐとともに、できたイチゴを地面に付けないで綺麗なままにしておけるはずです。
うまく行くかどうかは、来年の春にならないと判りませんけれどね。

c0335218_19570981.jpg

ちょっと 隙間が大きいような気がする

c0335218_19582139.jpg


もうちょっと ワラを増やしておこう
c0335218_19575030.jpg



c0335218_19575647.jpg


白菜の苗を植えました。 全部で12個 うまく育つかな。
近所の家で作っている白菜はもう食べられるほどになっているのですが。

c0335218_19591292.jpg

網を被っているのが、やっと食べられそうになった、チンゲン菜とホウレン草 
なぜかチンゲン菜は、虫に食べられたものが多い。どこから虫が入ったの?。

c0335218_19592258.jpg

いつも綺麗です。
アルストロメリアでしたよね
今年もまだたくさん咲いています。


c0335218_20013366.jpg


c0335218_20012616.jpg


# by telmic-gunma | 2018-10-08 20:33 | 農作業 | Trackback | Comments(2)

物置を片付けていたらまたまた面白いものがでてきました。
SONYのデジカメ、型式はMVC-FD7
名前は「Mavica」➡「マビカ」 (まったくビックリするカメラの略だそうです)
たぶん日本でのデジカメはこれが最初じゃなかったかしら。
記録媒体は3.5インチのフロッピー 1.44Mbyte
1枚のフロッピーで十数枚記録できたと思います。

画像サイズ 640 X 480 (VGA)
総ドット数 61380

現在のデジカメと比較すればオモチャかもしれませんが、当時はこれを使って
説明書などに役立てていました。
媒体がフロッピーなので撮影したらフロッピーを外して、すぐパソコンに入れてみることが出来たので、たいへん便利だった記憶があります。
他社の物は通信ケーブルをつないだり面倒でした。
バッテリーの充電器が見つからないので動かせません。
まあ電池が有っても動くかどうかわかりませんけれど。
いつも思うのですが、単三電池でも使ってくれれば何十年たっても動かせるのに、なぜ機種ごとに専用のバッテリーを作るのでしょうか。
そして数年で生産中止


発売は1997年 今から20年前ですね。
値段は6万円ぐらいでしたでしょうか。
大きさは、フロッピーと比べても、かなりの迫力がありますね。

c0335218_21055144.jpg




c0335218_21061367.jpg




c0335218_21055898.jpg








# by telmic-gunma | 2018-10-01 21:58 | カメラなど | Trackback | Comments(2)

電子工作 最近全然やってないと言われちゃいましたが、性懲りもなくまたまた自転車です。
この自転車は マウンテンバイク(MTB)と言って 野はらや山あるいは河原などを走るためのものです。
タイヤは太く凸凹になっており、荒れ地でもスリップし難いようになっています。
物置の奥にしまってあった物を出してきて掃除をしました。
タイヤはぺちゃんこでしたが、空気を入れるとしっかりと固くなりました。
購入したのは10年ほど前のまだ私が若い頃です。(どこが若いのという突っ込みはなしで)

「センチョリオン」と言う名前で、たしか台湾製だったと思います。
前後輪にエアーサスペンションが付いています。
ブレーキは油圧のデスクブレーキになっておりこれが最高ですね。

ブレーキを軽く握るだけでジワーっと利いて、長い下り坂でも手が痛くなることはありません。


c0335218_18454963.jpg

このマウンテンバイクのデザインを見るとどうしても虫の「カマキリ」を連想してしまうのですが、皆さんはいかがですか。

c0335218_18454138.jpg

リアサスペンションです。
空気入れで内部の圧力を調節することによりクッションの強度を変えられます。
ショックアブソーバーは左側に一つ付いているだけです。
現在 この形のものは販売されていないと思います。

c0335218_18462422.jpg


ハンドルからフロントサスペンションの動作を入れたり止めたりすることが出来ます。
フロントおよびリアのギアシフトは1回押すと1段確実に動きます。
50年前のアルプスローバーでシフトレバーを操作してチェンジするのと比べたら「なんて楽なの」という感じ。

c0335218_18460844.jpg

リアスプロケットは9枚 歯数は忘れましたが、大きい方は30を超えているでしょう。
フロントチェーンホイールは3枚 歯数は猛烈にワイドです。 

c0335218_18470366.jpg

あとから作った27インチで細いタイヤのホイール。
サイクリングロードなど良い道を走るときは、こちらに取り換えれば軽くはしれます。
取り換えもワンタッチでできるから楽。
しかし今思えばこれ無駄だったという感じ。 タイヤのみ細いものに入れ替えればお金かけずに済みましたね。
c0335218_20205188.jpg

この自転車で行ったところの思い出としては、
丹羽隆志さんのやっている「やまみちアドベンチャー」に何度も参加しました。
東京 奥多摩の五日市駅前に集合して八王子の山々を走りまわります。
毎回10人前後の人が集まりました。
初めて参加した時は、途中でどうしてもみんなについていけなくなってリタイアしたのですが、サポートの人が最後まで送ってくれました。
山の中を自分の力で走り回る面白さを教えてもらいました。


次は、「自転車の教科書」を書いた堂城賢(タカギ マサル)さんの「ヤマメの学校」へ行ってマウンテンバイクの乗り方を習いました。
今までの常識と真逆の乗り方で、理屈を教えてもらっても体は全く言う事を聞いてくれません。

先生は元プロの人で、私のように「前後にサスペンションの付いたものはダメ」
先生の乗っていた自転車は当然サスペンションは無くタイヤサイズは29インチでした。





# by telmic-gunma | 2018-09-28 21:27 | サイクリング | Trackback | Comments(0)

3年ほど前イチゴの苗を貰ってきて植えたのですが、最初は大きな実がなったのに、毎年ほったらかしにしていたら小さな実ばかりになってしまいました。
調べたら、連作障害があり3~4年はあけること ということでした。
植え付け時期は9月~10月ということで、今がちょうどよい時期なので移植にトライしてみました。
親株から伸びたランナーと呼ばれる枝の先の子株を小さな植木鉢で3週間ほど育ててからランナーを切って移植するそうです。
いつもの事で、今回も横着して畑にある子株を掘り出しすぐ植えてみました。
全部で186本 順調に育てば毎日大きなイチゴが食べられるはずです。
場所は元あったところから10m位離れたところにしたので、連作障害は防げるかな。
念のため、古い親株もそのままにしてあります。大きさにどのくらいの差が出来るか見れますね。


c0335218_20183359.jpg



c0335218_06545136.jpg




c0335218_06545182.jpg



c0335218_06545048.jpg





# by telmic-gunma | 2018-09-24 20:55 | 農作業 | Trackback | Comments(2)

チンドン屋さんが来た

今でも在ったのですね。(居たというのかな)
畑仕事をしていたらチャンチャカにぎやかな音が聞こえてきたので道路をみたらなんと、チンドン屋さん
まだ存在していたなんてビックリ。
私がチンドン屋さんをよく見ていたのは、今から60年ほど前、小学生のころ、まだ我が家にはテレビがない時代ですね。
昔は5~6人ぐらいで太鼓やクラリネットなどを鳴らしながら、宣伝ビラを配っていきました。


なんの宣伝をしているのかと思ったら、この辺に多いブドウ農家の宣伝でした。

c0335218_19274450.jpg


c0335218_19275037.jpg


c0335218_19273518.jpg


c0335218_19272778.jpg


# by telmic-gunma | 2018-09-24 20:16 | 季節の風景 | Trackback | Comments(2)

いままで利根川サイクリングロードを何度か走りましたが、今回一番上流の端っこの出発点に初めて行ってみました。
前回と同じく車で 道の駅よしおか温泉まで行きそこから地図を頼りに利根川サイクリングロードを上流にすすみました。
このあたり国道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(7)

スプリング付き皮サドル組み付けてから、初めてのサイクリングに行ってみました。
安全なところということで、車に自転車積んで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)