第17話 恋中さんと朝プロ
「朝プロしましょう!」
「……朝風呂?」
「お風呂じゃないです。朝のプログラミング。略して朝プロです」
「なるほど」
「恋中さんお友達特典の座学付きですよ?」
彼女は皿と箸をゴミ箱に捨て、空いたスペースにノートを乗せてから言った。俺は片付けが楽で便利だな思いながら返事をする。
「俺まだKPS五を達成してないけど」
一秒間に五回タイピングできるようになるまではプログラミングを始める資格が無い。そう言ったのは他でもない恋中さんだ。
「大丈夫です。今回は紙とペンを使います」
彼女はさっと髪を耳にかけた後、ノートを開いた。その何気ない仕草に少しドキリとしながら、俺もノートに目を向ける。
「これからお見せするのは、とある有名な女性エンジニアの方が、塾講師をしていた頃に考案したと言われるプログラムです」
彼女は楽しそうな様子で、ササッとペンを走らせる。最初に書かれた文字は「手に触れるプログラム」だった。
「これから作るのは、サイコロを振って六の目が出たら手に触れるというプログラムです。具体的な内容は、み……君がっ、考えてください」
後半、彼女はやけくそ気味に言った。
み……なんだ? 何を言いかけたんだ?
「どうぞ、思うままに書いてください」
「言語は?」
「まずは母国語を使いましょう。日本語で良いですよ」
「……了解」
差し出されたペンを受け取り、考える。
サイコロを振って六が出たら手に触れるプログラム……え、どうすればいいんだ?
さっぱり手が動かない。
サイコロを振る……?
なんだそれ、どういうことだ?
「難しく考えないでください」
恋中さんの助言を受け、とりあえず、そのまま日本語で書いてみた。
〇サイコロを振る。
流石に舐め過ぎか?
不安に思いながら恋中さんの反応を伺う。
「素晴らしい。その調子で続けてください」
マジかよ。全く自信が無いけど、彼女が言うなら正しいのだろう。
俺は心の中で首を傾げながらも、もうひとつ日本語の文章を書いた。
〇サイコロを振る。
〇六が出たら手に触れる。
「大正解。ばっちりです。君はセンスがありますね」
「……そうなのか?」
「そうです。プログラムって難しい印象があるかもですけど、実はとってもシンプルなんです。だから、やりたいことを、そのまま文字にできるというのは、重要な素質のひとつなんですよ」
「へー、そういうものなんだ」
そっけない返事をしたが実はメチャクチャ嬉しい。恋中さん、褒めて伸ばすタイプだ。
「次は、これをプログラムに翻訳します。今回はPythonを使いましょう」
恋中さんは新しいペンを手に持って、何か書きながら説明してくれる。
「プログラミングに必要な知識は、たった四つです。ひとつは変数を扱うこと。条件分岐、ループ、そして関数です。これから作るプログラムには全ての要素が含まれています。分かりやすくするために少し内容を変更しますね」
〇ループを開始する。
〇変数Rを宣言し、サイコロの結果を代入する。
〇Rが六だった場合、手に触れてループを終了する。
俺は無言で文字を見ながら考える。
恋中さんが言った四つの知識のうち、三つが含まれているような気がする。
「関数って、この中にあるのか?」
「もちろんです。それを理解するために、もう少しだけ形を変えてみます」
ループ開始:
R = サイコロの結果()
もしもRが六の場合:
手に触れる()
ループを終了する
「おー、プログラムっぽい」
「えへへ。ぽいじゃなくて、これも立派なプログラムですよ」
「解説お願いします」
「任されました」
恋中さんは一行目の「ループ開始」にペン先を向けた。
「ループを開始します」
「……はい」
「大事なことですよ? 例えば君はドイツ語で足し算できますか?」
絶妙な例えだと思った。
いわゆる基礎。
今の俺は当たり前を学んでいるのだ。普通の勉強も基礎を疎かにしたら後で苦労する。
「ごめん、悪かった」
「よろしい。君は素直でえらいですね」
ちょっと子供扱いされてる気がするけれど、楽しそうな彼女が見られるから不満は無い。我ながら重症だ。
「さて、二行目の右辺が関数です」
「……ええっと?」
R = サイコロの結果()
「このカッコみたいのが関数ってこと?」
「大正解です。君はきっと凄腕になりますね」
「……いや、適当に言っただけだから」
おい大和、ニヤニヤするな。気持ち悪いぞ。
俺が自分に言い聞かせていると、恋中さんは楽しそうに解説を続けてくれた。
「この部分、もっと細かく考えると、まずはサイコロを定義して、ランダムな値をゲットするプログラムを用意して……と、色々な工程があります。でもそんなの大変じゃないですか。だから過去に誰かが作ったプログラムを流用します。簡単に言えば、関数は既存のプログラムから結果だけを貰う機能です」
「なるほど、分かりやすい」
俺は頭の中で考える。
正直、最初は「サイコロを振る」ことすら意味不明だった。
多分、考え方が間違っていたからだ。
学校生活では問題を出されたら答えを探すのが当たり前だ。考えるわけじゃない。過去の知識から検索するんだ。
しかしプログラミングにはテストのように明確な答えが存在していない。やりたいことから逆算して、俺が決めなきゃダメなんだ。逆に言えば、自由に決めることができる。
今回の場合、欲しいのはサイコロを振った結果だ。具体的には、一から六の乱数が手に入ればそれでいい。
俺は乱数の作り方なんて知らない。
だけど関数を使えばその機能が手に入る。
繋がる。広がる。
俺は学校の授業でブロックを組み合わせてプログラムを作ったことを思い出した。
あれが関数だったんだ。
なんだよ。教えてくれればいいのに。
「えへへ、君は本当に良い顔をしますね」
「……そうか?」
「そうです。とても教えがいがあります」
「……そっか」
……ダメだ、またドキドキしてる。
違うだろ。開き直るんだ。恋中さんが可愛いのは、もう分かったから。
「じゃあ、続けますね」
「うん、よろしく」
その後も恋中さんの授業は続いた。
最終的に、以下のようなプログラムが完成した。
while True:
R = サイコロの結果()
if R == 6:
手に触れる()
break
一部、日本語が残っている。
プログラムに翻訳できなかった部分だ。
この部分は自分で決める必要がある。方法はケースバイケースだが、それはまた次の機会に教わる約束をした。
「それでは、プログラムを実行しましょう」
今回は、このプログラムを実行する。
「じゃーん、たまたま手元にサイコロがあります」
物理的に、実行する。
──さて、ここで問題。
このプログラムは六の目が出るまで終わらない。具体的には「break」と記された命令が実行されるまで終わらない。
プログラムは上から順番に実行される。
すると「break」の上には、何が見える?
手に触れる。
俺は昨夜の感触を思い出して、咄嗟に唇を噛んだ。それとほぼ同時に、彼女が無邪気な様子でサイコロを投げた。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます