前回は、COBOLでコラッツ予想をやってみました。しかし、その成果たるや非常に残念なものになりました💧
上を見上げて駄目なら、下も見る。ということで、COBOLに負けそうな言語を探してみました。コボラーの逆襲です。「なでしこ」という日本語で入力できる言語を発見しました🌰
これは、これは…どうも見た感じ、学習用の「トイ言語」感たっぷり。この言語は、事務女子がターゲットなのか、事務女子をターゲットにした「オタク男子」がターゲットなのか、そのあたりはよくわかりませんが、これならCOBOLでやっつけれそうです💪
🌸なでしこさん登場🌸
公正性を保つために、標準のアルゴリズムで書いてみます。事務女子だからって、ハンデもあげないし遠慮はしないぞ、うへへへ…😎
そして、これが「なでしこさん」のコードだ。(実装は、実は3種類ありますが、大人の事情でまだ秘密です)萌え萌え~😍
●(Nで)コラッツ関数とは
距離は、0。
!(N=1)の間、繰り返す
#Nを表示。
距離は、距離+1。
もし、(N%2)が0ならば
Nは、N÷2
違えば
Nは、N×3+1
ここまで。
ここまで。
距離を戻す。
ここまで。
●コラッツプログラム実行とは
条件数は、1。
(条件数=1)の間、繰り返す
「いくつのコラッツ関数?(0:まとめて)」と尋ねて、指定数へ代入。
もし、指定数=0ならば
「それじゃあいくつまでのコラッツ関数?」と尋ねて、マックスへ代入。
違えば
時間ミリ秒取得して開始時刻に代入。
結果は、コラッツ関数(指定数)。
時間ミリ秒取得して終了時刻に代入。
計算時間は、整数変換((終了時刻-開始時刻)×1000)。
「{指定数}の距離は{結果}です(かかった時間:{計算時間}マイクロ秒)」と言う。
条件数は、0。
ここまで。
もし、条件数=0ならば
「もう一度やる?(0:NO、1:YES)」と尋ねて、条件数へ代入。
違えば
合計は、0。
時間ミリ秒取得して開始時刻に代入。
Xを1からマックスまで繰り返す
結果は、コラッツ関数(X)。
#「{X}の距離は{結果}です」と言う。
合計は、(合計+結果)%1000000007。
ここまで。
時間ミリ秒取得して終了時刻に代入。
計算時間は、整数変換(終了時刻-開始時刻)。
「{マックス}までの総距離の暗号は{合計}です。(かかった時間:{計算時間}ミリ秒)」と言う。
条件数は、0。
ここまで。
ここまで。
「お疲れ様でした🌸」と言う。
ここまで。
コラッツボタン=「コラッツ開始」のボタン作成。
コラッツボタンをクリックした時には
コラッツプログラム実行。
ここまで。
な~にが「お疲れ様でした🌸」か。お前は、今からケチョンケチョンになるんだ。うひゃひゃひゃひゃ。ということで、実行してみちゃうぞぉ~。「コラッツ開始」をポチッとな❗
え~いっ!!むちゃくちゃな数字を突っ込んでやるぅ~❗
むっ!…むむむっ!!マイクロ秒単位とは何事か!
ま、まあ数字はひとつだし、なかなかやるようだが、たいしたことはないだろう…今度こそ終わりだ。無理かもしれないが、十万まで全部をつっこんでやるぞうぅ!!ひゃっ、ひゃっ、ひゃ!え~い!!
な、なんだとぉ~~!!これは、COBOLよりも速いが、よく見るとPython3(1120ms)よりも速いではないか。ど、どういうことだ。俺は…俺は、こんな事務女子に負けてしまったのかあぁ……😵
……ということで、超越コボラーは「なでしこさん」をケチョンケチョンにするどころか、逆にクールにケチョンケチョンにされてしまうのでした👩
それでは、大人の事情…種明かしをお話すると、これは実質のジャバスクリプトで、ノードJS上で実行したものです。実装が3つというのは(なでしこ1も含めるともう1つありますが)、ノードJS版と、あとの残りはウェブブラウザー版と、PHP版があります。そりゃ、速いや🚄
ノードJS版は、エレクトロンがうんにゃらかんにゃらというやつです。いわゆるWebアプリケーションを、デスクトップでマルチプラットフォームに扱うためのものです。マックが、ウインドウズが、リナックスが、という闘争は今後も続きそうですが、Webアプリケーションからは平等のようです🌞
こちらが、ウェブブラウザ版の実行状況です。
そして、こっちがPHP版の実行状況です。
簡易ブラウザー版なので、こちらから確かめることができます。ウェブプログラミングで重要な、変数の型チェックはしてないので、数値以外は入力しないでね。ブラウザがフリーズします(後でエラー表示されます)❌
😂仕方ないので…😿
仕方がないので、SCRATCHをコテンパンにして、なんとかCOBOLに活路を見いだしてみたいと思います。SCRATCHって、なんなんでしょう?JSぽいですがRubyとかなのかな??似たものにスモウルビィというものがあります。Rubyに変換されているものを見れるので、学習用としてはこちらの方がよいかもしれません(なでしこさんは動作環境がいくつもあるので、導入までが意外に面倒です…)😰
Smalrubyは、何でも小学生向けの環境で文科省公認っぽいですが、それにしても今時の小学生はすごすぎます…
SCRATCHの場合、0については、0なのか、「0」なのか、NaNなのか、なんなのか(なんだそりゃあ)、よくわからないという微妙なはまりポイントがあったので、そこだけ等号(:=0)にせず不等号にすることで解消しました。画面からは見えませんが、「=か?==か?===か?」みたいなのが影響しているのでしょうね❓
なんとか、COBOLの面目を保つことはできました。が、ビジュアル的に走らせながら計算させるのは楽しいですね。最近のコンパイラーやパッケージマネージャーなどの実行時間がかかるものは、プログレスバーもそうですが、コマンドラインに対していろいろなビジュアル表現があるので、こういうのは大事かもです🏃
なお、いつもはUbuntuからの記事が多いのですが、今回はWindowsです。Windows11では、PowerShellにかわりTerminalがデフォルトのコマンドライン環境(というよりはそれらをまとめた画面)になるようですが、ビジュアル面にもいろいろこだわっているようです👢
この記事のトップ画像がそれになるのですが、コマンドラインの背景に画像を設定、フォントをPlemolJPのNerdFontモデルに、飾りはOhMyPosh(何じゃそりゃですが、OhMyZshの変形らしいです)で、レトロスタイルを加えネオンちっくにしてみました✨
「まあ、こういうのは大事ですが、使い手がね…」なんて、言わないでね🎂
☕~ おしまい ~☕