ケーキ同好会でも、プログラミングは必須スキルです! 作:蒼(DPD)
哀先輩が部室に入ってきた。
哀先輩はむすっとした表情をしてひまり先輩の前に座った。
「ひまちゃん、私がなんで怒ってるか分かる?」
「あ、哀ちゃんの分のカップケーキ食べちゃった、」
はあ、とため息を吐く音が聞こえた。
なんというか、哀先輩かなり怒ってそうだけどひまり先輩大丈夫?
と思っていたら、哀先輩が突然にやりとして、ひまり先輩の後ろから両肩を掴んだ。
「ひまちゃん、人の分を食べたときはどうすべきか、分かってるよね?」
「ゆいちゃん、たすけて」
ひまり先輩がギギギ、と首をこちらに向けた。
「それは先輩が悪いです」
「うっ、正論パンチ......」
「せっかくだしみんなの分もう一個作りますか!」
ひまり先輩がもう一セットのカップケーキを作りに行った。
でも、出来上がるのをを待たずに哀先輩は話し出した。
「ひまちゃん、この部活がどんな状況か知ってる?」
「え、なんかあったの?」
「先生に、「実績を出さなければ来年には廃部です」ってさっき言われた」
「なんで?」
ひまり先輩の頭の上にクエスチョンマークが浮かんだ。
「ケーキ同好会って名前の部活が、活動初日に部室で爆発を起こしたらしいですよ」
「うっ......」
ひまり先輩が胸を押さえてうずくまった。
「実績って、他の部活動みたいに大会に出場する感じ?あんまり自信ないなー」
「え、ひまちゃん、パティシエコンテストみたいなものに出るつもりじゃなかったの?」
と哀先輩が尋ねる。
「私も、部活動だから大会に出るんだと思ってました」
「私は、放課後にみんなでスイーツ食べながら話せたらいいなーって思ってたんだよね」
パティシエコンテストねぇ、とひまり先輩がオーブンに向かいながら言う。
あ、これは何も考えてなかったっぽいね。
「言っとくけど、私はたまにお菓子作るくらいの腕だからね」
哀先輩が先んじて言う。
「うっ、ゆいちゃんは?」
「私は全然ですね」
「そっかあ......」
「さすがに今から練習しても、コンテストで賞をもらうのは厳しそう......」
せっかくみんなで楽しめると思ったのにな。と、ひまり先輩が悲しげにつぶやく。
「考えたんだけど、別にスイーツ系のコンテストじゃなくてもいいんじゃないかな」
哀先輩がひまり先輩のカップケーキをほおばりながら言う。
ひまり先輩はオーブンをのぞき込んでカップケーキが膨らむのを見てるから気づいてないみたい。
「別に先生もスイーツ限定だとは言ってなかったし。
実績になるならどんな大会でも問題ないでしょ」
「それは、ケーキ同好会としてどうなの?」
「ひまちゃんには反論する権利はないです」
「うぅ~」
なるほど。
でもパティシエのコンテスト以外に広げたとして、私たちが入賞を狙えるほどの競技はあるんだろうか。
「でも、何のコンテストに出るんですか?そんな急にできること無さそうですけど」
「競プロ」
「はい!何着かを当てて生計を立てる人ですか?」
「それは競馬のプロ」
競技プログラミングね、と哀先輩が言う。
「競技プログラミングなら入賞どころか、優勝を狙えるから」
プログラミング。高校に入るまで無縁だったのに、日常生活の常識にいつの間にかなってた言葉。
「前から気になっていたんですけど、先輩方ってプログラミング得意なんですか?」
「ひまちゃんは、競プロにおいては最終兵器といっても過言じゃない」
「兵器ってかわいくない!せめてうさぎさんにして欲しいです!」
人型の最終兵器が頬を膨らませて抗議してる。
「ゆいちゃんは、情報オリンピックって知ってる?」
「知らないです、でもすごそうな感じは分かります」
「ひまちゃんは、去年の日本代表」
「え?!」
「ふっふっふー、すごいでしょ!」
ひまり先輩が得意げに胸を張っている。
えっと、ひとまずそれが本当だとしよう。
競技プログラミングでひまり先輩が強いから、
簡単に入賞を狙うことができるだろうという考えかな。
......それって私が足を引っ張っちゃうよね。
プログラミングで試合をする方法とか、全然想像つかないくらいのプログラミング初心者だもん。
「私プログラミング昨日始めたばかりですけど......」
「ゆいちゃんには私が教えてあげるよー」
ひまり先輩が教えてくれるなら、大丈夫......なのかな?
「じゃあ、6月にオンサイトのコンテストがあるから、そこで優勝しよっか」
はや、私まだ競技プログラミングやったことないですよ?
「大丈夫。今の時期にあるコンテストは新入生向けで簡単めだから」
「......私、今口に出てました?」
「ゆいちゃんは考えてることが口から出る人なんだねー。かわいい」
恥ずかし。今まで生きてきて誰も教えてくれなかったんだけど!
もしかしたら今までもやってたかも。
これからは気を付けないと。
変なこと考えてるときに口から出てたら困っちゃうもんね。
●
部室に入ると、ひまり先輩と哀先輩が「あと60日」と書いてある何かを作っているところだった。
「こんにちは、先輩。大会までのカレンダーですか?」
「そう。ひまちゃんがどうしてもって言うから」
「やっぱりこういうのがあると気合が入るよね!」
競技プログラミングかあ。
どんなことをするのかも全く知らないから、先輩方にいろいろ聞いといた方がいいかも。
「競技プログラミングって、どんなことをするんですか?」
「あれ、言ってなかったっけ?」
哀先輩とひまり先輩が顔を見合わせる。
二人とも、私に競技プログラミングについて説明していなかったことに気づいていなかったみたい。
「いろいろルールはあるけど、一番メジャーなのは定期テストみたいな感じ?」
「時間内により多くの問題を解いて、点数が高い順に順位をつける」
「定期テストですか......それ好きな人いるんですか?」
「あ、でも競技プログラミングだけのこともあるよ!
正解かどうかは、提出したらすぐにわかるし、正解するまで提出し直してもいいよ」
リアルタイムで順位が変わっていくのが面白いんだよねー、とひまり先輩が言う。
「え、採点者は大変そうですね」
時間内に出されたプログラムをすべて採点しないといけないなんて、なかなか大変そうなルールにしたんだね。
「プログラムを提出するから、正解かどうかは実際にプログラムを実行してみたら分かる」
「あ、確かに。作った人は頭良いですね」
なるほど、と感心していると、
カレンダーが完成したようで、ひまり先輩が部室の前側にあるホワイトボードに立てかけていた。
「出題される問題はどんな感じなんですか?」
「んー、例えばこんな問題かな」
問題文
1から$N$までの「数」を一度ずつ書きます。
このとき、「数字」の 1 を書いた回数は何回でしょう?
$N$を入力したら、答えを出力するプログラムを書いてね。
例えば、1から10までだったら、
\[1, 2, 3, 4, 5, 6, 7, 8, 9, 10\]
のうち「数字」の 1 は、 1 と 10 に一つずつ含まれてるから、答えは2回だね。
「すぐに問題の例が出てくるんですの怖いんですけど」
「まあねー」
さすが情報オリンピック日本代表、競プロの最終兵器、と心の中でほめておいた。
「せっかくだから考えてみて!」
「えー......」
文句を言いつつ、一応問題を読んでみる。
見た感じは、数学の問題っぽいね。
問題文に出てくる$N$までっていうのは、問題を出す側が自由に数を決められるのかな。
そのすべての$N$に正解を出すプログラムを書けばいいってことだね。
え、そんなことできるの?
うーん、1から1までしかなかったら簡単なんだけど......
それは簡単すぎるか。
「例えば、プログラムなしで、明日までに1から100までで答えを求めてって言われたら
、ゆいちゃんならどうする?」
「えー......?」
全然分からなくて干からびました。
分からないけど、どうしても答えが必要なら1から100まで全部書いてみて数えるしかないかなあ。
\[1,2,\dots,9,10,11,\dots,19,20,21,\dots, 99,100\]
でも、これは正解じゃないと思う。
なぞなぞに正論で答えているみたい。
うーん、でもほかの解き方は思いつかないな。
「違うかもしれませんけどいいですか?」
「うん、いいよ」
哀先輩から許可が出たので言います。全然自信ないんだけど。
「1から100まで実際に全部書いてみて、数えます」
「お、正解!」
え、それでいいの?
「競技プログラミングで、全部試してみることができるのが最初は意外に感じたなー」
「でも、「全部試す」というのは大事な考え方」
紙に書いて調べるなら時間がかかるけど、パソコンが全部調べてくれるから問題ないんだね。
学校の数学と違うところがちょっと面白いかも。
その気になったので、試しにプログラム書いてみようかな?
よし。まずは$N$を受け取るところから......
いや、よく考えたらプログラムの文法を全く知りませんでした。
私は print() で黒い画面に文字を表示することしかできなかったんだった。
「入力の受け取り方が分かりません......」
「ふふ、そうじゃん、昨日 print() 教えたばっかりだったね」
「よし、じゃああの問題はゆいちゃんの課題ね!プログラムが書けるようになったら、私たちに見せてほしいな」
「頑張ります」
「まあ、プログラムの文法は教えるから心配いらない」
哀先輩が私の横の席に座ってノートパソコンをカバンから出した。
「せっかくだから今から教えようか。入力を「数として」受け取るには、こうやって書く」
哀先輩がキーボードで入力しながら、私に教えてくれる。
x = int(input())
「あれ、急に難しくなりました」
知らないものがいっぱいだ......
「最初から全部理解しようとしなくても大丈夫」
「そうそう、理解するのと新しい書き方を覚えるのを同時にするのは大変だからね。
書けるようになってから意味を考えるのでいいよ」
うーん、そういうものなのかな?
課題の答えを先に写しているような罪悪感が......
「例えば、入力したものをすぐに表示するなら、こう書く」
x = int(input())
print(x)
あ、昨日やった print() だ。
「実行してみるね」
>python main.py
「なんか縦棒がピコピコしてます」
「そのときは、プログラムがキーボードで入力してくれるのを待ってるんだよ」
「へえ~」
「じゃあゆいちゃん、数字を入力してみて」
試しに100と入力してみた。しかし、何も起こらなかった!
「エンターキーを押さないと、パソコンが入力が終わったことを検知できないからね」
「あ、そうですね」
エンターキーっと。自分が入力した行のすぐ下にまた100と表示された。
「100って出ました」
「そんな感じで、入力を数として受け取ることができる」
おおーっ。
まだ完全には理解していないけど、実際に動いているところを見ると自分でも使えそうな気がしてきた。
でも、「数として」とはどういう意味なんだろうか。もしかして、数字しか入力できなかったりする?
「数字以外を入力したらどうなるんですか?」
「いい質問。実際にやってみるといい」
なんとなく「クッキー」と入力する。決して、おなかが空いたからじゃないです!
>python main.py
>クッキー
Traceback (most recent call last):
File "c:\Users\user\Documents\code_python\main.py",
line 1, in <module>
x = int(input())
ValueError: invalid literal for int() with base 10: 'クッキー'
うわ、黒い画面に何やらたくさん表示された。
何か良くないことが起きているのは素人の私にも分かった。
「まあ、こんな感じで数字以外を入力すると怒られる」
「プログラムは、数字以外は入力できないんですか?プログラミングってなんでもできるんだと思ってました」
「プログラミングでできないことはないよ!文字で受け取りたい場合は代わりにこうやって書くよ」
ひまり先輩のタイピング、速くてかっこいい。
x = input()
print(x)
「数字を受け取るプログラムと、違うところは?」
哀先輩が私に問う。
「 input() の前の int がなくなりました」
「正解!あれはね、入力を数字に変換するって意味なんだよー」
「整数って意味のintegerから来てる」
あれ。全然知らない英単語が出てきた。
「もしかして、プログラミングって英語もできないといけないですか?」
「そんなことないよー。日本で競プロをプロデュースしてる社長さんは、プログラミングは世界レベルだけど、
実は英語が全然できないんだよ」
「ひまちゃん、そんなこと広めたら怒られるよ」
そうなんだ......やっぱり英語って難しいもんね。
試しに実行してみたら、ちゃんと次の行にクッキーと表示された。
「この、 x = っていうのは何ですか?」
「「入力されたものにxさんと名前をつける」って意味だよ」
「名前をつける......?」
「入力されたものは、そのままだとプログラムのほかのところで使えないから、
「名前を付けて、あとで使う」」
へえ。例えば、入力されたものを後で表示したいときとかに使えるのかな。
「名前は自分で決められるんですか?」
「そうだよ!だから別にアルファベットじゃなくて、ひらがなでもいいんだよ」
ゆい = input()
print(ゆい)
「確かにできました」
でもなんで私の名前?
「実際に日本語を使ってるのを見たことないけどね......」
「結局は、つけたい名前の後にイコールを書いて、後で使いたいものを保存できる」
「プログラミングでは変数って言うね」
変数。覚えた!多分。
「ちょっと疲れました」
「今日のおやつは、イチゴのショートケーキだよ」
「ほんとに作ったの?」
哀先輩がひまり先輩に疑いの目を向ける。
「うっ、競合調査です、近くのケーキ屋さんで買いました......」
「まあ、これ食べて休憩しようか」
いただきます。
一口食べると疲れた脳に糖分が行き渡る。ちょっとクリームの甘さに飽きてきたところに、
イチゴの自然な甘さで口直し。やっぱりケーキの中では、イチゴのショートケーキが一番好きかも。
ところで調査ということは、ひまり先輩はいずれショートケーキを作るつもりなのかな?
そのときは、ぜひ私も一緒に作りたい。
プログラミングの話ばっかりしてるけど、本当はケーキ同好会だもんね。
「まだ最初の方だけど、もうプログラムの文法を忘れてしまいそうです」
「私も最初の方はまとめノートを書いてて、それを見ながらコードを書いてたなー。結構おすすめだよ」
まとめメモ
・ print("") で文字を出力する
・ x = で文字や数を記憶しておける
・ x = input() で文字を入力する
・ x = int(input()) で数を入力する
いつの間にか忘れてたけど、できることが一つずつ増えていくのっていいね。