johmonjin のすべての投稿

AIでナンプレ難問を解く

 

勃勃たる威風へ

はじめにこのような記事をまとめるに思い至った経緯について記します。

日本の経済力は長い間、横ばい傾向にありました。かなり前から後発国の追い上げが急迫しており相対的な地盤沈下に陥っています。

先発国の良いところを見習ってさらなる改良を加えて一時は頂上を極めましたが、『追いつき追い越せ』策はもう限界です。

太平洋戦争の敗戦を受け、そのころ世界一など望むべくもなくアジアで一番を目指していました。プロボクシングで「東洋フライ級チャンピオン」が生まれて日本国中おおさわぎになったことをかすかに覚えています。

そして時代が下ってアジアで一番など話題にする人がいなくなるほどたくさんの世界一が誕生しました。1949年には湯川秀樹さんが日本人として初めてノーベル賞を受賞しましたが、ここにきて『元の木阿弥』現象が起きつつあります。

威風堂々

国内で開かれる世界的なスポーツ大会で日本人が優勝することが少なくなり「日本人トップ」という言葉が使われることが多くなりました。残念なことです。

明治以来、連綿と続けてきた国策は行き詰っています。ここらで他人・他国を後追いすることはやめて自ら新しいことに挑戦してみませんか。

当ブログは完成品をすぐ提示するというより完成品を作り上げるための手法について語ってきました。ウサギ年はもっと閲覧者が増えるよう頑張りたいと考えていますので応援いただけたらありがたいです。

活気ある日本へ

日本は一時はトップに立ってもそれを維持するところは苦手の様です。さらなる改革を継続できず現状に安住しているかのようです。ぜひ予算を新しい分野に投じて欲しいものです。

また、新しいことをする人々を評価し元気づけてください。当方も物価が高騰する折り、ブログ維持もままならなくなりつつあります。

論理的なものの考えを養うのにプログラミング教育が重要視されています。長い間、ソフトウェア開発に携わってきました。プログラミングがそれに役立てばと思い、数年前からブログで取り上げてきました。今回は、『ナンバープレース』を取り上げます。

AIでナンプレ難問を解く

前項でブログの目的を述べました。新聞や雑誌で取り上げている『ナンプレ懸賞問題』をAIにより解いて景品をせしめることに加担するつもりはありません。

それらのサイトは数多くあり、この記事をまとめるに当たり参照させていただきました。それらのサイトからプログラミングに重きをおいたサイトが当ブログと言えます。

これから述べること(実装、未実装など)は当サイトの話であり、全体に通用することではありません。

誌面サイズの制限からナンプレの基本的なルールやプログラミングの初歩の初歩については別誌を紐解いてください。

本記事の目的

改めて明言すれば本記事は単にナンプレの正答を得るために用意されたものではありません。ナンバープレースの課題を解いて、解法を研究することによって脳を活性化させ、脳トレーニングの一環としてプログラミング学習をしながら論理的な考えを育むために記述されています。

社会生活をする上で他人にわかりやすく物事を説明することが要求されます。それには日頃から脳を刺激し鍛錬することが大切です。

脳の内部細胞を磨くことによって頭の切れが良くなります。楽しみながらナンプレに挑戦してみましょう。

自動解法を説いた記事には難解な課題を難なく解いているものが山ほどありますが、解けない課題も存在します。このようなときに当記事からエッセンスを抜き出し発展させ、自分なりのシステムを構築して難問に挑戦することができます。

操作方法

ここにはナンバープレースをよりよく楽しむための情報を詰め込みました。論より証拠、へ理屈よりも実益を尊重してナンプレの解を得ることを第一義にし課題画面からこの画面に到達しました。

冒頭の記述内容のタイトルには内部リンクが貼られています。注目する項目にいきなりジャンプする際に利用してください。

本文から細部に飛んで内容を確認し元に戻れる仕組みは電子媒体の独壇場です。

ナンバープレース解法アルゴリズム

多くの研究者によって発表された「ナンバープレースを解くアルゴリズム」を以下に掲げます。

新聞・雑誌等に掲載されている課題の多くは背景がアジュール(明るく鮮やかな青)色に彩られた組み込み済み解法で正解が得られますが、難解な問題を解くには未実装の解法を織り込まなければなりません。

ナンプレをこれから極めたい、フェルマーの定理解明に力を注いだ先人のような気骨のある方のために、多くは未実装のまま残しています。当サイトは実のところ体力不足やら何やらで手が回らなくなっています。

名称略称概要
➊シングル      Singles    シングルとは、「候補が1つしかないマスには、その数字を確定する」
❷隠れたシングル   HiddenSingles 隠れたシングルとは、「特定の行、列、Boxで候補が1つしかない数字は、その数字を確定できる」
❸二国同盟      NakedPairs  二国同盟とは、「2つのマスに限定された2つの候補があるとき、その同一グループの他のマスにあるその候補は削除できる」
❹隠れ二国同盟    HiddenPairs  隠れ二国同盟とは、「2つのマスに限定された2つの候補が他の候補と同居する時、そのマスの他の候補を削除できる」
❺ポインティングペア1PointingPairs1ポインティングペア1とは、「ブロック(3×3の9マス)で限定された候補によって、行または列の候補が消去できる」
❻ポインティングペア2PointingPairs2ポインティングペア2とは、「行または列で限定された候補によって、ブロック(3×3の9マス)の候補が消去できる」
❼三国同盟未実装ここを含めて以下の解法は未実装、次項の参考資料により適宜、組み込み可
❽隠れ三国同盟
❾四国同盟
➓隠れ四国同盟
⓫Xウィング
⓬スカイスクレイパー
⓭2ストリングカイト
⓮Yウィング
⓯ソードフィッシュ
⓰XYZウィング
⓱リモート ペア
⓲シンプル チェーン
⓳BUG
⓴XYチェーン
㉑ジェリーフィッシュ
㉒WXYZウィング
㉓フィンド/サシミ Xウィング  
フィンド/サシミ ソードフィッシュ
㉕—続くもっと存在しているが今回は終了

プログラミング言語について

問題解決への手順をコンピュータへ命令として記述したものをプログラムと言い、その形式をコンピュータプログラミング言語と呼びます。

たくさんの民族言語があるように数多くのプログラミング言語があります。以前はCやPHPなどで記述していましたが、最近ではインターネットの普及でHTML(プラスCss, JavaScript)を採用することが多くなっています。

多くの中からよく利用されている言語10個を以下に挙げます。モダーンブラウザが動作すればパソコン、スマホ、タブレットなどデバイスに依存することなく動作するHTMLは魅力的で有望な言語です。

言語おもな利用分野
➊C言語 業務システム/組み込みシステム
❷C++ 業務システム/組み込みシステム/ゲーム
❸Java Webアプリ/業務システム/組み込みシステム/スマホアプリ
❹C# パソコンアプリ/ゲーム
❺HTML(JavaScript, CSS)Webアプリ/ゲーム
❻PHP Webアプリ
❼Ruby Webアプリ
❽TypeScriptWebアプリ
❾Python Webアプリ/人工知能
➓R言語 人工知能

新しい解法の実装法

それなりに複雑で重厚な新しいソフトウェアを作る時、ビルディングブロック構造に配慮すると後々の品質向上やメンテナウンスに貢献します。

ナンプレの解法数がいくつになるか前もって確定することは困難です。不確定要素が含まれる場合は制御関数名や制御情報をテーブルに登録し、制御処理でそのテーブルを参照するように計らいます。

一方、解法が追加されてもテーブルを改訂して制御処理には変更を加えないようにします。

制御の流れを右図のようにすることによって機能の追加・削除が発生しても制御本体への変更がなくなります。

幸い、JavaScriptにはテーブルの項目数を『methodTable.length』のようにlengthで取得できます。lengthプロパティをプログラムコードに採用することによって可変性に富むプログラミングが可能です。

解法の大きな流れ

ナンプレを背理法(仮置き)を除き正解に導く方法は個々のものでもかなりの数になり、それを集合した解き方は数えきれません。

個々については解法アルゴリズムで述べました。今回採用の全解法を絡ませた流れを左の流れ図にまとめました。

黄色の背景色で示した処理ではマスごとに複数の候補から1つに絞るべく用意した全解法を試みます。

この一括りをパス(pass)と呼びます。個々の解法で求め得る最大確定数が決定しましたが、複数の解法で状態が変われば再挑戦してぞくぞく全確定に近づくことが知られています。

そこで全マスが確定するまであるいは課題の出題ミスや未実装を配慮して確定数が0になるまで繰り返します。

 

プログラミングの基礎となる関連図

図をクリックすると拡大します
ナンプレは9X9の2次元情報から成り立っています。

81コマを9X9, 3X9, 9個からなるグループとして扱うと考えやすくなります。

JavaScriptではグループを要素に見立て階層構造にして制御します。

行、列、ブロックごとに規則正しいネーミングをするとプログラミング効率が向上します。

右のような図を参考にしてプログラミングするとピッタリでしょう。

小さな数字の1~9および①~⑨は行と列の番号名です。ピンク色の大きな①~⑨はブロック名、緑色で示した0~80は候補数を表示するマスの要素番号です。

番号は説明用に1~9を用いていますが内部のプログラミングでは0~8で制御します。

 

 

準備するもの

AIでナンプレ難問を解くに当たり、これを具現化するにはスマホ、タブレット、パソコンなどの電子デバイスの他、開発環境が必要になります。スマホは場所を選ばないので有用です。パソコンは技術を蓄積したり再利用するのに好都合です。実情に合った選択をすればよいでしょう。

開発環境は改めて用意する必要はありません。ウェブデザインに利用するHTMLを採用すれば問題ありません。HTMLを利用する環境は検索ツールである『ブラウザ』に備わっています。

かつてソフトウェアシステムを構築する言語といえばC言語が代表例でしたが、今ではHTML言語を使用することが通例です。何よりも経費が掛からず世界中の多くの人々が開発環境の整備に関わっています。

必要とする関数

ナンバープレースは1から9までの数を扱います。未確定状態を0として扱ったとしても10種類で1桁の値に限られるので扱いやすといえます。

数字は81個のマスに納められグループとして管理されます。グループに内包、範外かを確認するとき文字列検索関数を使います。

処理系が有する機能を拡張して効果的な関数に仕立て上げます。

文字列検索関数は全体の性能を決めるといっても過言でないほどの重要関数です。

 

サンプルコードの概要

プログラミング実行例

HTMLで記述した自動解法システムの実行例を以下に3例挙げます。録画するに当たりHTMLによる実行速度を通常の1/10倍速にしています。

再生するとき、全画面サイズにしたり画面を停止して右側に表示されたマス目情報・解析に用いた解き方に注目して候補数字がひとつひとつ減らされて決定するあり様をご確認ください。

①numberPlace0:askew-10.js

『斜め連番配置』に1⑨,3⑥,9①の3マスを追加して難易度を下げた課題

《シングル、隠れたシングルの2解法により未決マス51を解析》

 

②numberPlace1:exam-0228.js

隠れたシングルと二国同盟にて解ける課題

《57未決マスを隠れシングルと二国同盟の2法にて解決》

 

③numberPlace2:mysteriousLayout-5.js

ミステリアス配置2, 配置1の課題と回答を逆にした

《42未決マスをシングルのみで解く、123456789斜めに並ぶ》

 

 

行き詰ったときの突破法

図をクリックすると拡大します
自動解法ソフトを動作させて難問に挑戦した時、『解法が組み込まれていません、あるいは不完全な課題』が出力されて終了することがあります。

当ソフトウェアは発展途上にあり6解法を実装しているに過ぎません。この現象は予期したことです。この場合の対処方法を示します。

ネット上には多くの先人の遺産があります。

例えば⑦ナンプレ京⑬数独自動解法プログラムは数々の難問を解くほど充実していてその上、多くの候補数をどの解法を用いて最終数に絞ったかを明示してくれる優れモノです。その解法が当ソフトで未サポートでならば先人が作ったツールを用いてどの解法で正答に至ったかを調べるのは当然の帰結と理解できるでしょう。

あとは闘志を燃やして未サポート解法のアルゴリズムをじっくり理解してプログラミングし実装という運びに至ります。

三国同盟を組み込む

前項の方法により行き詰ったときの脱し方がお分かりいただけたことでしょう。難易度が高くなると6つの解法だけでは正答を導くことはできません。

プログラミングに精通すると、宮本武蔵が剣の達人から教えを乞うために武者修行に出て全国を行脚したように、高度な技術に接したくなるのが世の常です。

『三国同盟』という解法は、「3つのマスに限定された3つの候補がある時、同一の行(または列,Box)の他のマスにあるその候補は削除できる」というものです。いずれの解法にも言えることですが、一つの解法ですべて解決に導くことはできません。候補数を少なくして確定していきます。

さっそく、三国同盟の組み込み方に取り掛かります。

隠れ三国同盟を組み込む

『隠れ三国同盟』という解法は、「3つのマスに限定された3つの候補が他の候補と同居する(隠れ3国同盟)時、そのマスの他の候補を削除できる」というものです。

三国同盟も含めて下図にしました。ある行の背景色が黄色に彩られたマスにおいて三国同盟、隠れ三国同盟が成立しています。9マスをひとくくりにした列・ブロックでも同様のことが言えます。

三国同盟、隠れ三国同盟とも3つのマスにおける同盟成立を見極め3つのマスからあるいは他のマスから候補を削除する解法です。実装するには同盟成立条件を見定め成立した場合、該当マスから適切に候補を削除する処理を織り込みます。

具体的に、三国同盟では同一グループ(行・列・ブロック)の他のマスから成立した数字を削除することであり、隠れ三国同盟では成立したマスの中に同居している他の数字を削除する処理です。

参考資料

ナンバープレースを解析するにあたって参照したサイトを以下に挙げます。概要の枠内をクリックして目当てのサイトに進むことができますが「接続が拒否されました」が出力された場合、直リンクが禁止されており概要検索でサイトにジャンプします。

概要とURL-ADDRESS適用
一般に使われている解法を解説
複数解についての所見
ブロックと行の情報から、候補を一つに絞るナンプレ(数独)のコツ
代表的な解法の解説とサンプル
数独を解くための14種類のテクニックを解説
候補数の消し方と成立条件
ナンプレを楽しむ上で強力な解析ツールになる
ルールの確認と様々な解法の解説
数独の解き方【初級編】に続く第2弾
ルールの再確認と解き方の概略
レベル別数独の解き方のコツ
数独を解くテクニックから数独リベンジへ
数独自動解法プログラム、場面ごとに解法を示しているところは秀逸
コンピューターによる数独自動解法
再び「京」、未実装解法のアルゴリズム作成に役立ち、プログラミングへの第一歩
「世界一難しい問題(2012)も解けます」と語っている
ナンプレ解法プログラム
XY-WINGを解説

 

あとがき

雑誌・新聞にはナンプレ問題が毎日のように掲載されています。加えてネット上にはナンプレに関する解説記事が山積されています。

当サイトでは後追いを避け、それらとの棲み分けを目指し自らHTMLを駆使してプログラミングを主題にしてきました。

情報の公開、共有化が進み世界の至る所で斬新な取り組みが始まっています。日本の若者がその先陣に立って活躍することを期待しています。

今回のナンプレ記事は研究の始まりに過ぎません。老骨を奮い立たせてサポートする解法は少なくも2桁を実装したいと考え頑張ります。

謝辞

これまで単行本、新聞、週刊誌や多くのサイトで先達のナンプレへの熱い思いを参考にさせていただきました。深く感謝申し上げます。感想、ご意見などはブログのコメントをお使いください。記事に関すること以外公開されることはありません。

2023年1月、著者 滝口 政光

 

 

松の内2023が明ける

うさぎ年によせて

元日に初詣に行きました。車を持っていた時には高速道路を使って門前町にある著名な神社に40年ほど出かけましたが、今年は電車を使って近くの神社にお詣りしました。

かつては1kmもあるような表参道を歩き靴を脱いで登壇したビルディングのような拝殿で家内安全を祈願しましたが、今年は駅から歩いて5分ほどの家族的な雰囲気の神社でした。

社務所で受け付ける係員もすべてアルバイトのようでした。ベテランとはほど遠い初心者が多く、拝殿への案内で読み上げる氏名もしどろもどろです。

ひとつの例ですが、和泉(いずみ)さんはわいずみ、美南(みなみ)さんはびなんさんなどと呼んでいました。

申込書にはかな振りをしているのだから、ふりがなを読んでもらいたかったです。地名や名前を気ままに呼ぶのはいかがなものでしょうか。純なお嬢さんたちもいろいろな体験を踏んでたくましく成長していくことでしょう。

出かけた電車の中で和服姿はゼロでいつもの風景と変わりありませんでした。かつては盆と正月は特別な雰囲気でしたが今ではコンビニも営業しているし、普段と変わりありません。2023年もすでに小寒も過ぎて3連休が始まりました。

平和で穏やかな年でありますように。

躍動するメッセージ

変幻自在なキャッチコピー

かつ弁と言えば、とんかつ弁当が浮かんできますが映画好きには『活弁(活動弁士)』が浮かんできます。「活弁付き映画」は幻灯・紙芝居などとともに歴史的なメディアになりました。映画は無声映画-シネマスコープ-立体映画へと進化しました。

広告媒体としてネオンサインはいまだに捨てがたいものがありますが、巷にはパブリックビューイングが見られる時代です。このたび《躍動するメッセージ》をHTMLを用いて表現してみました。

 

HTMLの特技

ネオンサインはネオン管を用意しなければなりません。ひらがな、アルファベット文字、色など多彩な表現をするには周到な準備を要します。経費や納期の面で高いハードルです。

一方、大型スクリーンは簡単に用意できるものではありませんが、テレビやパソコンで使うモニターはどんどん低価格になっています。

この状況下において、《動く表現》は成長性ある取り組みといえます。

 

三葉曲線の描画算出式

変幻自在なキャッチコピーには三葉曲線にて幾何学模様を描いてインパクトを付けています。次に示した算出式を用います。

x=(a-b)cosθ+c・cos((a-b)/bθ)
y=(a-b)sinθ-c・sin((a-b)/bθ)  (θ: 0~2π)
三葉曲線のパラメーター:a=1/1, b=1/3, c=1/2

 

三葉曲線のプログラミング

<!DOCTYPE html>							<!-- PV00, LM97を参照, 2023-01-04 -->
<html>
<body onLoad="setTimeout('hypo()', 500);">
<DIV id="move10" style="justify-content:center; align-items:center; margin:0 auto; width:600px; height:600px;">
<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600">
    <polyline id="curve" style="fill:none; stroke-width:1; stroke:mediumblue;"/>
    <line     id="xaxis" x1="298" y1="300" x2="302" y2="300" stroke-width="1" stroke="black"/>
    <line     id="yaxis" x1="300" y1="298" x2="300" y2="302" stroke-width="1" stroke="black"/>
</svg>
</DIV>
</body>
<script type="text/javascript" charset="utf-8">
const ZX=ZY=300;								//主要画像の位置x, 主要画像の位置y
const T3 = 30;									//interval 75 45 30 40 35 25 10
const ST = 0.02;                	            //step
const b=0.33333333333333;						//b para-2, 1/3 1/5
const c=0.5;									//c para-3, 1/2 1/7
const a=(1.0 - b);								//a para-1, 1/1 1/1
var points12 = "";									//不揮発性のためグローバル変数であること
var SIZE=ct=th=0;								//th:回転角
function hypo(){								//《サイクロイド曲線を描画する》
  calculate();									//thを参照
  if((th+=ST) < 2.005)setTimeout('hypo()', T3);	//thを更新, 曲線の描画を継続, 高速描画
  else{											//θ:360度1周
	if(++ct<6)setTimeout("th=0.0;hypo()",T3*20);//曲線の描画を継続, 高速描画
	else	  console.log("finished");
  }
}
function calculate(){							//サイクロイド曲線を計算
	SIZE = 160 + ct*16;							//大円半径  240~160  240 224 208 192 176 160
	var t = (th+0.195) * Math.PI;				//theta, 0.195は重ね書きするとき、移動線の違和感をなくすため
	var d = a / b * t;							//サイクロイド曲線を算出
	var wx = ZX - SIZE * (a * Math.sin(t) - c * Math.sin(d));
	var wy = ZY - SIZE * (a * Math.cos(t) + c * Math.cos(d));
	points12 += wx+","+wy+" ";					//"0,100 40,200" points12は不揮発性であること
	curve.setAttribute("points", points12);		//サイクロイド曲線を描画する
}
</script>
</html>

 

三葉曲線の描画例

ブラウザのリロードボタンをクリックすると再び描画されます。

変幻自在な広告

さいごに

HTMLプログラミングをマスターすれば、複雑な曲線を描くのに大掛かりな装置は一切、不要です。また、それを動画に変換することが可能です。

当方、HTMLへの取り組みは長い経験があります。『創業100年への躍動するメッセージ』『新商品の販売促進』キャッチコピーなどを動画に変換するお手伝いを致します。ご連絡は下の「ブログへのコメント」で届きます。コメントは記事に関すること以外公開されることはありません。                          2023,新春

蛇足

三葉曲線のプログラミングで31行の0.195に注目してください。この値は0が一般的ですが、0で実行すると次の三葉曲線への移動線が現れます。0.195にすると目立たなくなります。開始角度が0で表示タイミングも完璧を望むには処理を追加する必要があります。

幻想的な万華鏡2023

電子万華鏡

HTML(CSS, JavaScriptを含む)を用いると幻想的、幾何学的な描画が可能です。先人は有用なライブラリーを用意してくれました。P5.jsです。今回はローカル環境でHTMLを動作してMP4の動画に変換しYouTubeに投稿しiframeにて埋め込みました。F11キーを押下し全画面にてお楽しみください。

再利用のすすめ

時間に余裕が生まれている

日本も高度成長の前までは衣服に継ぎ(つぎ)を当て繕いして着ていたものです。

ものを大切に使い再利用は当たり前でした。そして新年を迎えるときに新しいものに切り替えました。

社会は工業産業化が進み、繕う手間と働いて労金を得ることを天秤にかけ始めました。日本国中で働く場所と賃金を得る手段が提供され、継ぎを当て繕う習慣は廃れていきました。

消費者は王様


「消費は美徳」はもう古い?|「NHK放送史」から

消費は美徳ともてはやされ、ゴミに埋め尽くされる生活が始まりました。

やがて行き過ぎに気づき「限りある資源」「地球環境の限界」が叫ばれ始めました。

先進国では人口減で人手不足が問題視されていますが、地球的には人口増加であり食料を巡って争いが懸念されています。

本来食べられるのに捨てられてしまう食品ロスも取りざたされています。

食料不足を救うには昆虫を食料にする案が検討されているほどです。贅沢を控えることは必須であり、過去の生活に学ぶことが必要になるでしょう。

贅沢は心で決まる

贅沢は心が決めるものです。寝る間も惜しんで高給を得ても病気になっては本末転倒です。

限りある資源を再利用しませんか。ひと頃、国連で『もったいない運動』が展開されたことがありました。

布の端切れを集めてパッチワークに仕立て上げることができます。

躍動的な世代ですがジーンズにわざわざ破れを入れています。再利用を高らかに謳って衣服に継ぎを当てて新しいファッションを開拓してみませんか。

さいごに

先月、ある保養所を訪ねました。高度成長期直前に建てられた建物のようで壁などに亀裂が見られましたが懐かしくホッとする雰囲気がありました。年が明けると閉鎖が予定されているようです。

日本も豊かになる前は福利厚生と言えば保養所、観劇会、運動会などを催し会社が家族のように振る舞う機運がありましたが時代の移ろいで保養所も閉鎖の憂き目になるのでしょうか。

 

室内は丁寧に補修がなされていて、障子の破れは昔ながらの花形に切り取られた紙で繕われていました。若者が障子に触れることは少なくなりましたので写真に納めました。日本の文化の一端を記録に残します。

日常のあれこれ

日常雑感2212

本日は新聞休刊日です。このところ、短い間隔での休刊です。以前、新聞少年の休養の名目で実施されていましたが、今では新聞配達をする少年は少なく、最近は高齢者によって配達されているようです。伝統的サブスク(subscription)料金の形を変えた値上げです。

私の世代では「新聞少年」といえば山田太郎を思い浮かべます。歌手「山田太郎」は芸能プロダクションの御曹司で紅白歌合戦にも出場した著名歌手でしたが、中山馬主協会会長として知られた存在です。

何度も恐縮ですが人手不足

あらゆる業種で人手不足です。我が国特有の手厚いサービスは罰当たりという時代が到来しつつあります。ある外国人から日本人はserviceただと意訳している人が多いですが来日して驚いた一つと聞かされました。

商取引をするとき、業務内容を甲乙にてきっちり確認し合うことが必要になってきました。

過去を振り返る

「歴史に学ぶ」ことについて、あまり気に掛けたことはありませんでした。人生や人間の営みは間断なく続いているのだから、過去を例証することはとても大切なはずです。気を付けていれば、他人、他地域、他国、異なる世代に意識的にあるいは無意識に圧力を加えていることを何百年、何十年も前のことと思いきや今でも大手を振って行われていることが分かります。

いい話を待望

今年、日本人がノーベル賞に絡むことは皆無でした。その代わり、一時は危ぶまれたサッカーのワールドカップで決勝トーナメントに進むことができました。サッカー後進国としてサッカーの指導者はほとんどが外国人でしたが、最近は日本人監督が増えています。


これも有能なサッカー選手がお山の大将に満足せずに、海を越えてヨーロッパで活躍のみならずクラブチームのキャプテンを任されるまでになっているからでしょう。世界の最高峰を目指す若者に敬意を表します。

個の力について

日本は古来から「組織」で動く特長・特徴を持っていると言われてきました。日本はヨーロッパのように陸続きでなくアメリカは州が異なると法律も異なることがあり州は国並みです。島国では他との軋轢が生じると逃げ場がなくやむを得ず大同につかざるを得なかったのでしょう。

個の力と自主性

 

このことは「個の力」を育むにはマイナスに働きます。一人の天才より千人の平均的凡人を育てることに集約されてきました。人々は今までこの方が生き易く高い評価を勝ち得ました。これから世界のトップに立つにはどうすればなれるかを今回、早朝にテレビ観戦した人々は悟ったと思われます。

グレーゾーン2

曖昧模糊

グレーゾーンについては過去にも触れましたがまた、取り上げます。このところ、大企業のトップ、公務員、保育園保育士など立て続けに贈収賄疑惑などで逮捕、告発、訴追などを受けています。

これは高度成長時期の残滓を完全に除去できないからかもしれません。あいまいだった境界線が一夜にして大きくずれた結果とも考えられます。

人材豊富な組織

人手不足の分野はいざ知らず、人材豊富な社内の厳しい競争を勝ち抜いて名門企業のトップ・統率者になった人々や幼児を養育する立場の担当者が無体な仕打ちをしていたとのニュースに接しても好んで行ったとは思えません。

かなり前から日常的に行われていたと考えられます。グレーゾーンにあったあいまいな行動を時代の変わり目の気まぐれで罪に問われることになったとしたら気の毒です。

変える力

組織の中にいると事なかれ主義が蔓延し、自ら改革する気力が薄れがちになります。

伝統的な組織、長く根付いた組織ほど厄介です。本来、法に基づいて実行されなければならない行動を、ないがしろにして長年の悪弊を改革できなかったことへの同情は感じつつも擁護までは至りません。

ただ、気づいていながら黙認・放置・傍観していた人々が、明らかになったとたん、石を投げ鞭打つだけでよいのだろうかと疑問を抱きます。

グレーゾーンを考える

社会が成熟するに至り、今まで許されていたことが急に「ダメ」と判断されることが増えてきました。

この基準は明確でないので日々、周辺に気を配っていないと親を泣かす羽目になりかねないです。

テレビ、新聞がいつも正義の味方月光仮面を演じてくれるとは限りません。組織的な問題が解決されないまま個人の「自己責任」とかたずけられないように気をつけましょう。

名づけの妙味

ネーミング

「名は体を表す」と言われています。新生児の名前や新しい事を始めるとき、関係者はワクワクしながらネーミングします。それらの悲喜こもごもを綴ってみます。

安直から謹厳まで

赤ちゃんの名前を考えるとき、夏に生まれたから夏子、冬に生まれたから冬彦と名付けても安直とは言い難いです。は今でこそ少ない名前になりましたが皇族が伝統的に使う漢字ですし、は古来から男児の美称であり親の愛情が感じられます。名付けてからのフォローが大事です。

外国人技能実習制度とは名ばかりで、日本に不足している労働力の補充に利用されているとしたら、立派な言葉が泣くといったところです。他にも都市部の電車は、院電、省線、国電などと呼び名を変えましたが、時代にふさわしい名前をと募集しE電と呼ぼうという大々的な動きがありましたが定着しませんでした。

実態隠しに利用

太平洋戦争の敗戦を受け、戦後復興を成し遂げ高度成長を体験して長寿化・高齢化社会になり「ぼけ老人」が増加し、ボケという言葉が世に出回り「老人いじめ」のような雰囲気が蔓延しました。為政者はもっと軟らかな言葉を考え「認知症老人」と呼ぼうと考えたようです。

実子さえ誰だか認識できないことから「認知症」に落ち着いたのでしょうがそれならば「非認知症」とすべきと思われます。

認知症に代わって適切かどうかはわかりませんが、熟柿症、到達症、思冬症、爛熟症、茫茫症、超塾症、備忘症、崇高症などが考えられます。

前述しましたが、名前よりは行動です。真摯な行動は名前を超えて光り輝くことでしょう。

画線法でカウント

物を数える

物を数えるとき、漢字圏では正(しょう)の字を用いて5つを一つの塊として数える風習がありますが、英語圏では縦と横棒を使います。

この方式を画線法と呼んでいますが、英語圏ではTally marksの呼称を用います。

画数を追加する方式では消しゴムなどで直前状態をリセットする必要はありません。よって、和式では上寄せ、洋式では左寄せで書き始めます。

Tally marks

次の動画を再生してTally Marksによる数え方をお楽しみください。

 

正の字を使う方法は見慣れていると思います。ここではTally marksを掘り下げます。カウントを始めるときは黒板や大きな紙に手書きすることが多く、HTMLによる動く表現で実際の動作に似せています。

下部、左端にデジタル値が表示されるので厳密な数が判るのに対して、右側のTally Marksはアナログ値のように全体の多寡を知ることができます。

おわりに

規模の小さい投票数を確認するときなど、多くの国では似たような方法を採用しています。それは手足や指の本数はどの民族も同じであり、生活様式においても大差がないからであろうか。

アニメーション初期化

アニメーションの再使用

HTMLとCSSのanimationを用いるとかなり高度なアニメーションをすることができます。背景色を定期的に変えたり、画像を回転して多彩な表現が実現します。

当初、設定した動きが終了して再度、実行しようとするにはそう簡単ではありませんでした。そこで再使用の成功例を記録に残します。

再使用のつぼ

アニメーションは繰り返し表示されることが多く、そのため開始前に初期化が行われます。初期化は通常の使い方ならば開始前に一度、行われますが2度目以降の初期化はあいまいです。

正しく初期化されるには英文の言語解説書を詳読することになりますが、からくりをひとつ手に入れましたので成功例を以下にまとめました。

ある要素でanimationが定義され新しいクラス名に出会うとそのanimationが初期化されるようです。

よって、初回はおおむね大過なく正常動作になりますが、2回目以降も正しい動作にするにはアニメーション終了イベントを取り付けて、その中でクラスを削除することでanimationを再初期化可能にすることができます。

具体的には、開始する前にクラスを追加し、終了イベントでクラスを削除します。一方、Cssでは追加したクラスが定義された時に有効になるようにanimationを条件設定します。

処理を繰り返すにはそこで次のアニメーションを呼び出します。

例題においてはカウンタを用意して3回繰り返しています。

例題では、1.8秒でアニメーションが完了し、終了イベントでクラスを削除して2秒後に再起動されるようにプログラミングされています。

タイミングのあり様と処理の関連を下図にしましたので参考にしてください。

最後にソースコードを掲載しましたので参考になれば幸いです。丁寧なコメントはあなたのコード理解に役立つことでしょう。

CSSクラスの追加や削除する方法

要素にクラスを追加したり削除するにはclassListメソッドを使います。詳しくはHTML解説書をご覧ください。

RESULT
パンダ画像の回転が止まっているときはリロードボタンを押してください。

プログラミングコード

<!DOCTYPE html>							<!--- &copy;2022 TacM, Ver0.30 -->
<html>
<head>
<meta charset="utf-8" />
<style>
.charimg {								/* 基本の要素を定義 */
  width:280px;
  height:280px;
}
.charimg.charmove {						/* charimgとcharmove両方が指定されているタグにのみ有効になりanimation開始 */
  animation: moveframe 900ms linear 2;	/* 0.9秒/周 2回転, 1.8秒で終了 */
  width:280px; height:280px;
  transform-origin: 140px 140px;
}
@keyframes moveframe {					/* 回転keyframe */
  0%   { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}
</style>
</head>
<body onload="finishEventInstall();startAnimation();">
<Div style="position:relative; width:640px; height:480px; border:0px solid red;">
  <div style="position:absolute; top:50%; left:50%; margin-right:-50%; transform:translate(-50%, -50%); width:280px; height:280px; border:0px solid green;">
    <img id="img01" class="charimg" src="https://aidesign.lolipop.jp/wp-content/uploads/2022/11/panda.png" />
  </div>
</Div>
<script type="text/javascript">
const elem=document.getElementById('img01');
var ct=0;
function finishEventInstall(){					//アニメーション終了イベントを取り付ける
  console.log("window.addEventListener");
  elem.addEventListener('animationend', () => {	//終了イベント処理
    elem.classList.remove('charmove');			//クラスを削除することでanimationを再初期化可能にする
    if(++ct<3) setTimeout('startAnimation()', 2000);	//再起動を指令、条件が整っていればanimationが開始する
  });
}
function startAnimation() {						//animation処理
  console.log("startAnimation", ct);
  elem.classList.add('charmove');				//クラスを追加することでanimationを初期化する
}
</script>
</body>
</html>