30代後半からの、IT業界挑戦記 ⑦ 日常の言語化
前回の記録で取り上げた、金属と紙のセッション事件の続き。
昼休み。私はどうしてもこの話を共有したかった。
意気揚々と休憩室へ向かい、同期の姿を探す。
いつも通り、端っこの隅で一緒に食事をとる。
さあ、どのタイミングで話そうか…と同期の食事が終わるのを待つ。
さて、同期は何を食べるのか…と目を落とすと、まず目に入ってきたのは「カレーパン」だった。うん、どう考えても話題が適していない。
さすがに食べてる途中にあの話題を出すのは忍びなかった為、しっかり食事を終えてから共有を始めた。
同期の考察では、ロールが汚れていてその汚れが無くなるまで巻いていたか、汚れを取ろうとしていたか、のどちらかだったのではないか、と。
しかし、そう仮定すると腑に落ちない事がある。
2回に1回水を流し、それを9回繰り返していたのだが、その間に、ランダムにウォシュレットが起動していたのだ。すると先ほどの仮説は成り立たない。
となれば、あと考えられる事は…
「何かが付いていた」
「切れてしまった」
のどちらかだったのではないか、という結論にたどり着いた。
と、そこまで話をした所で、私は気が付いてしまった。
これって、繰り返し処理と条件分岐じゃね…?
①何かが付いているか、血が付いている状態を1とする。(status)
②1である間は以下の処理を繰り返す。
・紙を2回巻き取り使用する(paper)
・2回使用した紙を水に流す(water)
・不規則にウォシュレットを使用する(wash)
③statusが「0」(何もついていない)の時、個室から出る。(処理が終了)
丁度VBAを学んでいた為、とてつもなくスムーズに解が出る。
Do Whileと、If分岐を組み合わせれば、この事象が再現できるのでは…?
気が付いてからは早かった。昼食が終わり、自席に戻ったら即Excelを起動。
忘れないうちにプロシージャの作成を進める。
まずは変数の宣言。
Sub Toiret ()
Dim status As Long
Dim water As Long
Dim wash As Long
Dim paper As Long
続いて、statusに1を代入。(何かが付いている事象を1とする)
何かが付いているかの判定に、Rnd関数を使用するため、乱数の初期化。
status = 1
Randomize
更に、何かが付いている間、紙で拭き、水に流す処理を記述。
途中、不規則にウォシュレットを使用する処理としてRnd関数使用。
処理を行う事で10分の1の確率で何もついていない状態になるように、条件分岐。
Do While status = 1
paper = paper + 2
water = water + 1
wash = wash + Rnd
If Rnd < 0.1 Then
status = status - 1
End If
Loop
最終的なリザルトとして、紙を何回使用したかが分かるように表示。
最後に、個室が開いた事を示す。
MsgBox "paper = " & paper & vbCrLf & _
"water = " & water & vbCrLf & _
"wash = " & wash
MsgBox "個室が空いた。"
End Sub
これらを全てまとめる。
Sub Toiret ()
Dim status As Long
Dim water As Long
Dim wash As Long
Dim paper As Long
status = 1
Randomize
Do While status = 1
paper = paper + 2
water = water + 1
wash = wash + Rnd
If Rnd < 0.1 Then
status = status - 1
End If
Loop
MsgBox "paper = " & paper & vbCrLf & _
"water = " & water & vbCrLf & _
"wash = " & wash
MsgBox "個室が空いた。"
End Sub
私は、人間の必要な営みの一つをコード化する事に成功した。
達成感がすごい。
これから、私は誰かがトイレに入る度にこのコードを思い出す事だろう。
トイレに入る度「あぁ、繰り返し処理が始まった」と考えるだろう。
紙を使用する度「あぁ、条件分岐が始まった」と考えるだろう。
そして、全てが終わった時、
「繰り返し処理を抜け出したんだ…」と心の中で呟くだろう。
興味があれば上記コードをExcelで実行してみてほしい。
何やってんだ俺は。
この記事が気に入ったらサポートをしてみませんか?