父、迷路をつくる 執筆者→小笹諒介@代表(2022.05.02更新)

プロローグ→今回の経緯

息子のために…

4歳の息子(左)が迷路にはまっている。

きっかけはコロナだった。園で陽性者が出たということで、長期休園が確定。そこで、ひまつぶしにと、迷路を買ってあげたのだ。息子はとても喜んだ。それはよかったのだが、ひとつ誤算が。なんと息子は、一夜にして全面クリアしてしまったのである。

まさかここまではまるとは…明日からどうすんねん。

いや…待てよ。迷路くらい、作れそうだな、プログラムで。

というわけで、今回の企画は「父、迷路をつくる」です。

捕捉情報

3歳の次男(右)にも迷路を買ったものの、1ページも完成させず、飽きてました。粘土の方が好きみたいですね。兄弟でここまで違うとは!

情報収集→完成!まで

「迷路 プログラム」で検索!

「なんとなくプログラミングで作れそうじゃね?」くらいのノリで始めてますので、具体的にどういうプログラムを組んだらつくれるのか、現時点ではノーアイディアです。そこで、まずはググります。

実際の業務でも似たようなことはよくあります。なんとなくできそうだな→ググる→できそうorできなさそう

結果的に、できなさそう、で終わることも十分にあるわけです。まあ、たいていのことは、すでに世界の誰かが先にやってるので、調べればヒットします。

今回は、このサイト↓
https://news.mynavi.jp/techplus/article/nadeshiko-61/
にそれっぽいことが書いてあったので、「できそう」判定で、参考にします。

作り方まとめ

かんたんにまとめると…

1)ボンバーマンっぽく周りをブロックで囲む
2)ボンバーマンっぽく適度にブロックを置く
3)ボンバーマンっぽくランダムにブロックを置く

なるほど!どうやらボンバーマンのノリでいけそうです(めちゃてきとう)!

ステップ1:フツウガステキ状態

はい!まずはいわゆる、フツウガステキ状態をつくります!

フツウガステキ状態を知らない人のために説明すると、ボンバーマンのバトルフィールド名です!ここまで言ってもピンとこない人はググってください(不親切)。一番オーソドックスで、なんだかんだ、一番盛り上がるステージですよね!

一応、コードも載せておきます。まあ、興味ない人が大半でしょうから、コードの説明は割愛します。なんとなくやりたいことを汲んでください。

ステップ2:ランダムにブロックを置く

各ブロックの上下左右に対し、ランダムに1ブロックずつ置いていくと、迷路っぽい感じになるようです。

はい!実際、迷路っぽくなりました!

ステップ3:スタートとゴールを設定

どんどん迷路っぽくしていきましょう!

スタートとゴールをつくります!
ぐっと迷路っぽくなりましたね!いったんここまでで完成とします!

捕捉情報

完成までに要した時間は、40分です。これがはやいか遅いか…なんとも言えませんが、迷路を本屋やおもちゃ屋に買いに行くくらいなら、作ってしまった方がはやい!ということだと思います。

改良編

試しに解かせてみる

完成した迷路を、息子たちに解かせてみます。

なかなか楽しそうに解いてくれて、父としては満足!

と言いたいところですが、ここで何かがおかしいことにきづきました。この迷路、どこからどう辿ってもゴールに辿り着けます(笑)

本来、あるべきはず「行き止まり」がないんです。これでは迷路としては欠陥です(次男はそれでも楽しそうでしたが…)。

課題:どうすれば迷路は面白くなる?

これがプログラミングの醍醐味と言いますか。課題があり、その課題を解決するためには、どうしたら良いか、考えるわけです。

今回の僕のひらめきは、ランダムなブロックを1個ではなく、2個に増やすという単純なものでした。

ブロックを増やしたら行き止まりができるだろうから、良い感じになるだろう、と。ロジックはいったん考慮しない、試しにやってみる系のノリです。

トライその1:ランダムなブロックを2個に増やす

さて、結果はというと、行き止まりすぎてダメでした。

なるほど。ではブロック数を少し減らしてみましょう。

※ちなみに今回から枠数を41×41に増やしています。

トライその2:ランダムなブロックを50%の確率で2個に増やす

その結果…若干良くなりましたが、まだまだ行き止まりすぎです。

もうちょい減らしてみましょう。

トライその3:ランダムなブロックを25%の確率で2個に増やす

お!これは!!と一瞬、思いましたが、惜しい!スタートとゴールがつながっていません

あなたの次の一手は、どうしますか?

もっとブロックを減らす?

トライその4:リロード

このくらいなら、何度かリロードすれば良い迷路ができそうだと思ったので、リロードしまくることにしました。

昔、駄菓子屋に売ってた10円ガムで、迷路にゴールできたら当たりってのがあったんですね。あれを思い出しました。

ゴールできれば当たり。当たる確率は、10〜20%くらいなのかなぁ?当たりの迷路を貼っておきます!

ちなみに、かなりどうでも良い話ですが、くだんの10円ガムの当選確率を調べた人がいましたので、こちら読んでみてください。僕の記憶だと迷路にゴールできたら当たりのイメージだったんだけど、実は関係ないということがわかりまして、個人的にはめっちゃ良記事でした!

捕捉情報

ボンバーマンといい、10円ガムといい、今回はやたら昭和臭が漂う記事でした。いやーでも、めちゃくちゃしっくりくる例えなんですよね…どうしても言いたくて!世代じゃない人、ごめんなさい!!

まとめ!

解決策はまだまだある

今回、僕はパワープレー的に解決策を見出しましたが、当然、ほかにも解決策はあります。

仮に要件が「100%ゴールまで辿り着くこと」だった場合、そして仮にこれが仕事だとしたら、どうにかして、この課題を解決せねばなりません。あなたならどうやって課題を解決しますか?

1分程度考えてみました。

【案1】
スタートからゴールまで辿り着けるかをプログラミングでテストしてみて、辿り着けない場合、再度、新しい迷路を作る。辿り着けるものができるまでそれを繰り返す

【案2】
スタートからゴールまで辿り着けない場合、ブロックをひとつずつ壊してみて、辿り着けるかテストする。壊すブロックの数はなるべく少ない方が良いだろうから、総当たりで全部のパターンを試す

【案3】
そもそも迷路の作り方を変えてみる。たとえばスタートからゴールまでの道筋を先に決めてしまって、ブロックをあとから追加する(その道筋には絶対にブロックを置くことができない)

パッと思いついたところでこんなもんでしょうか。

自分で言うのもアレですが、わりと良い発想だと思います。こんな感じで解決策をパッと思いつける人は、エンジニアの素質があると言えるでしょう!

ちなみに写真は次男がつくった迷路だそうです。スタートとゴールがどこだかわからん!まあとにかく、発想を柔軟にしていこうぜ!ってことですね!!

課題を解決していこうじゃないか!

僕らが解決すべき課題はたくさんあります。小さなものから、大きなものまで。ひとつひとつ、一緒に解決していきましょう!

タンクルでは、課題解決力のある方、これから伸ばしていきたい方を、求めています。興味を持った方、リクルートページよりお問い合わせください!

※ちなみに、今回の迷路は、こちらに残していますので、興味ある方は、やってみてください。