プログラミングゼミ・パズル 4-1&4

動画はそのまま再生できますが、ツイート内の画像をクリックするとTwitterにジャンプします。
ジャンプしないで済むようにツイート直下に画像を置いておきます
。

4-1




4-4




一部「4-1」となっていますが間違い



【NFT】素人によるハッシュ関数解説 for プログラミングゼミ

NFTの改ざん不可能の肝(きも)はハッシュ関数にあると思います。

しかし、きちんと学んで正確に語るにはハードルかなり高いです。

あくまで素人が表面的に調べたにすぎませんのでその辺ご了承ください。

なおプログラミングゼミ(だけではないですが)で動画を作成しているのでプログラムの話もあります。



ハッシュ関数について初歩的なことを雑に説明した動画です。
動画の最後にでてくるまとめ⬇️
入力データのサイズに関係なく 出力されるハッシュ値のサイズは一定
出力されるハッシュ値は一見乱数的だが、 入力されるデータが同じならば 入力の度同じハッシュ値が得られる
なお ハッシュ値から元データを復元するのは極めて困難(一方向関数)

ハッシュ関数はいくつかある様ですが、これらの性質は共通しているはず(タブン)。



⬇️プログラムの解説⬇️


キャラ(オブジェクト)の操作(移動・拡大縮小・色の濃淡 etc.)するにはキャラ単位でプログラムを記述しなくてはならない(記述エリアがキャラごとに異なる)。

しかしキャラの呼び出しはどのエリアからでも記述できる。
今回のプログラムは表示と音声が大半で、キャラ自体の動きはさほどない(拡大縮小くらい)。

そのため、プログラム記述の大部分を固定キャラである「はいけい」に集中させた。
プログラムを集中させると全体の把握がしやすいので楽である。

ただ…個人的には単調なプログラムをズラーと並べるのはやや美学(笑)に反する。

追記(7/1)
テキスト(文章)に合わせて「ゆっくり棒読みトーク」というアプリで音声を当てました。

当然ながら「文章の長さ=音声の長さ」なわけですが、音声の時間(秒数)を適当に見積もったため、テキスト表示と音声がズレまくる始末…。

秒数は、音声の保存先を見れば分かるのでそれに合わせて「○びょう まつ」の秒数を変更(プログラムがほぼ1ヶ所だったので変更楽だった)…1回づつアテレコ(アフレコ?)し、計6回やって確認…タイミングはあまあまでした。
5回目と6回目(ラストの長文20秒)がちょっと余裕なくて(計算では1秒間の余裕あり)、なかなか計算どおりにはいかない。

この動画作成には他にも背景透明化やテキストの画像化アプリ使ってます。



プログラミングゼミ・パズル3-1 3-3

3-1


キャラ(オブジェクト)がキャラを呼び出しています。
今回のパズルでは位置(座標)指定ができません。そのため呼び出した側のキャラと同じ座標に呼び出(表示)されます。


3-3

「星」を発射してドラゴンを倒します。
・星の射程距離は2マスで右方向に飛ぶ
・命中するとドラゴンは昇天する(倒せる)が、消えるまでは当たり判定がある。
・「よびだす」コマンドを連続(「まつ」コマンドを挟まない)で実行すると星が同時に発射され事実上1発と見なされる
・ドラゴンに接触すると自分(そらもん)が昇天する
解答動画⬇️


プログラム




プログラミングゼミ・パズル 2-2~2-4

2-2

5

4

3

2

1

解答例

「解答例」と書きましたが、2-2の解答はこの一つしかありません。

2-3

5

4

3

2

1

解答例

2-3は「4て(手)」つまり4回のアクション(命令)で4つの🍰を取らなければなりません。無駄なアクションは許されないため、最初の1手は必ず①か②になります。その後は時計回り・反時計回りのコースがあります。

ここで⬇️の画像をみてください。

上段と下段はそれぞれ別々のプログラムですが、実はこの二つのプログラム、どちらも同じ動きをします(①➡️②➡️③➡️④)。

一見するとこの二つはまったく違います。
方向指定(↑↓←→)、数字の正負(+ か - か)、数値の大小(これについてはプログラミングゼミ・パズル2-1 一見は真ならず の以下よりマイナスジャンプについて訂正からをお読みください)…。

プログラム内容が違っても結果は同じ、これは同じ結果でも異なるプログラムが作れることを意味します。
あえて縛り(制限)を設けてプログラミングするのも勉強になりますよ。

2-4

5

4

3

2

1

解答例

「2-3」と考え方は同じです(🍰が一つ増えただけ)。




プログラミングゼミ バナナシュート:ループとパラメーター


ループ終了の条件を満たすまで①~④の処理を繰り返します。

①ループ1回当たりの移動量
②ループ1回当たり時計回りボールが3ºづつ回転
③ループ1回当たりボールのコースが時計回りに0.3ºづつ変化
④ループ1回当たり0.016~0.017秒間処理を止める

①の数値(移動量)増減
・ボール速度増減
・ボールの曲がり(変化量)は反比例に変化(移動量増=変化量減 移動量減=変化量増)
②の数値(ボール回転量)増減
この数値の増減はボール速度・コース変化に影響なし
③の数値(ボールコース変化量)増減
・曲がりの増減

【ループの回数】
今回のプログラムにおいてループは回数指定ではなく「がめんのはしに ついた」という条件指定です。
最初にボールが置かれた場所から「がめんのはし」までは約240(長さの単位なし)。
240は固定ですが、①の数値次第でループ回数は増減します。

ループ1回当たりの移動量が増えればループ回数は減少し、移動量が減ればループ回数は増加します。

ボールの変化の総量(合計)はループ回数によるので
移動量増(ループ回数減)で変化量(曲がり)減
移動量減(ループ回数増)で変化量(曲がり)増

となるわけです。


あるパラメーターの増減が別のパラメーターのトータル値に影響する…ただそれは、プログラム実行しても気づかない場合があります(移動量の増減がループ回数の増減につながるのは、初心者ではすぐには理解できない…かも)。
パラメーターの変更前・変更後のプログラムの動きは(見えない部分も含め)要チェックですね。



プログラミングゼミ・パズル2-1 一見は真ならず


2て(手)でとこう(解こう)
下記の命令を2回使いおやつ(🍰)をゲットしよう。
ゲットするにはキャラを🍰と同じマスに入れればOK。


命令(コマンド)一覧
今回使用可能なコマンドは一つだけ(赤線点滅)。
「→に□ジャンプ」「□」には自由(任意)な数値を入れられます。

「→(右)にしかジャンプできない&命令できるのは2回だけ…答え(ルート)は一つだけだな❗️」
と思ったアナタ
一見は真ならず ですよ⁉️

解答動画⬇️
5

4

3

2

1


解答動画は視聴していただけましたか?
前半はまっとうなルート
後半は2回目の命令の数値を「-4」にしています。
「→(右方向)に-4ジャンプ」これは
以下よりマイナスジャンプについて訂正
「←(左方向)に2ジャンプ」と同じです。

※移動量の数値をマイナスにした場合、「ジャンプ」の意味合いが変わります。
数値が正(プラス)の数の場合「1ジャンプ」は1マス飛ばし=2マス移動 だったのですが、「-1ジャンプ」はその場でジャンプ=0マス移動「-2ジャンプ」は逆方向の隣接マスにジャンプ=1マス移動 でした。
数値の絶対値が同じでも、プラスかマイナスかで実際の移動量には2マスの違いがあるのです。

プログラミングはいろいろ試してみるべきですね。

命令の方向は「→」で固定であり、「左にはジャンプできない」考えてしまいます。
それにリアル世界では「右に-4ジャンプしろ」なんて普通言いません。

人間世界では通用しない言い方でも、プログラム的には通用する表現はたくさんあります。

プログラミングは一種の対話ですが、相手(コンピューター)の思考法は人間とは違うと覚えておきましょう。





プログラミングゼミ・パズル1-4 直感も直感の否定も大事


・『~にあるく』『~にジャンプ』命令を合計7回使いおやつ(🍰)をゲットします
・キャラを同じマスに入れるとゲット判定
・命令の組み合わせは自由
・『岩』に当たると弾かれ(元のマスに戻る)、『ドラゴン』に当たると昇天

~にあるく:指定した方向(⬆️⬇️⬅️➡️)に一マス移動
~にジャンプ:指定した方向(⬆️⬇️⬅️➡️)に一マス飛ばして二マス移動(飛ばしたマスには当たり判定なし)

解答動画⬇️
10
9
8
7
6
5
4
3
2
1

この動画⬆️わ視聴していただければ解るようにルートは二つです。
パッと見て、左上の🍰が最後(7手目)のゲットになりそうなのは想像つくでしょうか?
左上🍰の下方は開放されており、ルートになりやすい感じです。実際正解ルートの一つは下方からになります。

しかしキャラには『~にジャンプ』することもできるため障害物(岩)の飛び越えが可能…つまり「障害物が障害にならない」のです。

直感だけでなく直感に反する論理性もプログラミングでは大事。