西口です。paiza(ギノ)に入社して2ヶ月目の新人エンジニアです
先日、11月2日~4日の3連休で、アルゴリズムを使ってナポリタン専門店のパンチョさんのスタンプラリーに挑戦し、ナポリタン1年分無料券をゲットしました。やったー!!
今回は、その経緯と攻略法をお伝えします。
スタンプラリー攻略におけるアルゴリズムに興味がある方、パンチョとナポリタンを愛する方々の参考になればと思います。
パンチョのスタンプラリーと挑戦した経緯
paiza(ギノ)に入社するために引っ越してきた(もとは関西にいました)私が、慣れない東京で迷い込んだのがパンチョ渋谷店でした。
そのインパクト、キャラクター性、何より味のおいしさにとりつかれてしまった私は、即LINE会員登録をして通いつめていました。
そして、11月1日の午前10時。仕事を始めようとしたそのとき、パンチョさんからLINEで衝撃のお知らせが届きました。
パンチョのスタンプラリーやと!!??!?!??!?? これは万障お繰り合わせの上で参加するしかない!!!!!!!!!!!
気づけば私は、入社して間もない会社のSlackで全社員に向けて同志を募集していました。すると、ふだんpaizaラーニングを作っている若い2人が食いついてきました。
(西口)「これ3連休で絶対制覇したいんですけど一緒に行きませんか」
(青木)「巡回セールスマンのアルゴリズムを組むのにちょうどいいから行きます」
(喜多)「そんなこともあろうかと全店舗の最寄り駅リストを作っておきました」
(西口)「(ありがとうございます!明日からみんなで楽しくがんばりましょう!)変な人たちだなぁ!」
というわけでこの3人が中心となって挑戦することになりました。
パンチョスタンプラリー攻略法
まずは、効率よくスタンプラリーが回れるようなアルゴリズムを組みましょう。
こういったスタンプラリーの経路を考える場合、「巡回セールスマン問題」という有名な問題のアルゴリズムがそのまま使えます。
paizaラーニングのアルゴリズム入門編にも「アルゴリズム入門編: 「巡回セールスマン問題」を学ぶ」というレッスンを無料で公開しています!興味のある方はぜひ見てくださいね!(これはパンチョさんではなくpaizaラーニングの宣伝です)
開発手順
1. 店舗のリストを集めて最寄り駅を調べる
naporitanpancho.com
渋谷駅と秋葉原駅は最寄りとなる店舗が2店舗ずつあったので (渋谷店と渋谷南店、秋葉原店と秋葉原昭和通り口店) 、最寄り駅は合計16駅となりました。
2. 各最寄り駅間の移動にかかる時間を全通り求める。
この16駅の全組み合わせ、120通りを調べます。
たとえば、渋谷駅からほかの15駅までの時間はどれくらいかかるか、新宿から渋谷を除いた14駅までの時間はどれくらいかかるか…といった感じですね。
これは3人で分担して、2時間ほどで全部調べました。(ちゃんと仕事が終わってからやりました)
3. 巡回セールスマン問題を解くプログラムを作成してデータを読み込ませる。
コードはこんな感じです。(paiza.IOだと計算に時間がかかってタイムアウトしてしまうので、あえて店舗数を減らしたコードを掲載しています。お手元のマシンに開発環境があれば全店舗分でもすぐに実行できるかと思います)
【Ruby】
【Python】
で、こんな感じのルー トが完成します。(このルートはグーグルマップの徒歩ルートを表示しているので、実際にたどるルートとは異なります)
出てきた結果を出力するとこんな感じです。
11月1日(金)のうちにこの作業を終わらせておいたので、あとはこの順番でひたすらパンチョに行ってナポリタンを食べてスタンプを押してもらうだけです。(ちなみに、あとでたくさん写真が出てくるけどパンチョさんはナポリタン以外もおいしいよ!)
初日・11月2日(土)
1.新宿店 (12:22着)
記念すべき一店舗目は新宿店です!
感動のファーストナポリタンおいしかったです。
2.吉祥寺店 (13:19着)
新宿で食べてから移動する時間を考えると、時間おかしない?って感じですが、次の吉祥寺店には13:19に到着しました。
ミートソースです。
3.渋谷店 (14:14着)
ここで、新宿店から遊びでついてきていた営業の人が早々に離脱してしまいました。スタンプラリーをなめているのか? 我々は遊びでやっているのではありません。
裏メニューの白ナポです。
4.渋谷南店(15:23着)
ボンゴレバジリコです。
5.新橋店(17:09着)
新橋店は地下の一角にある、なかなか雰囲気のある店舗です。
この時点で店員さんに「こんなスタンプたまってるの初めて見ました」と言われました。まだ都内の一部しか行ってないのに!!
6.千葉栄町店 (18:56着)
千葉まで移動し、県内の店舗をめぐります。あたりはもう真っ暗でございます。光り輝くネオンで我々を迎え入れてくれるのが、そうパンチョ千葉栄町店です。
7.プレナ幕張店(19:53着)
モノレールを乗り継いで海浜幕張まで来ました。明るく楽しいショッピングモールプレナ幕張で我々を迎え入れてくれるのが、そうパンチョプレナ幕張店です。
8.柏店(21:20着)
柏まで来ました。こちらが初日のラストパンチョとなりますので、感慨深いものがあります。
ごちそうさまでした、明日からまたよろしくお願いします。
二日目・11月3日(日)
9.御徒町店(11:00着)
2日目は御徒町店からスタートです。
ナポリタン厚切りベーコンです。2日目もよろしくお願いします。
なお本日はこちらのJR休日おでかけパスを使い、なるべくJRで移動してお得にまわりたいと思います。
www.jreast.co.jp
10.秋葉原昭和通り店(11:34着)
JRで移動して秋葉原です。秋葉原は店舗が2つあるすばらしい地域です。
ナポリタン目玉焼きです。
11.秋葉原店(12:02着)
ナポリタンハンバーグです。秋葉原店はサービスでお味噌汁がついてきます!やったー!
12.蒲田店(12:59着)
JRで移動して蒲田店です。
ミートソース目玉焼きです。
13.相模原店(14:38着)
蒲田からJRで町田まで移動して、町田からタクシーで相模原店まで来ました! 相模原店は東京環状線沿いの郊外型店舗です。
タッチパネルで注文できるハイテクパンチョです!
14.平塚店(17:39着)
町田に戻ってJRで平塚に行き、こんなこともあろうかと登録しておいたカーシェアリングを使って車でパンチョ平塚店に行きます。平塚店めっちゃでかい!
平塚店のオムカレーで2日目のラストパンチョです。平塚店はファミレス的なメニューがたくさんありました。そして、ここでも店員さんに「こんなにスタンプたまってるの初めて見ました」と言われました。
最終日・11月4日(月)
15. 246裾野店(11:00着)
最終日は静岡の店舗をめぐります。平塚から東海道線終着駅の国府津まで行き、沼津でさらに乗り換えて長泉なめり駅を目指します。
長泉なめり駅から246裾野店までは徒歩23分と出ていたので歩きます!
国道246号線沿いの246裾野店は過去最大の看板の大きさ! はりきって開店前に到着してしまったので、並んで待ちました。
三島コロッケつきのご当地パンチョです。三島コロッケは味がしっかりついててソースなしでもおいしいです!
店員さんに「スタンプすごいですね! そういう旅なんですか?」と言われました。そういう旅です。
16.富士店(13:25着)
歩いて長泉なめり駅に戻り、御殿場線と東海道線を乗り継いで吉原から岳南電車でジヤトコ前駅に向かいます!(ジヤトコ前は「じゃとこまえ」と読むそうです)
ジヤトコ前から住宅街を進んでいくとパンチョ富士店が現れます!
スタンプカードを見た店員さんに「うわっすごいですね…」と引かれました。
ジヤトコ前から三島に行って、新幹線で東京に戻り、大宮に向かいます。まさかナポリタンのために新幹線に乗る日が来るとは思いませんでした。
17.大宮店(17:51着)
関東に戻ってきて大宮店です。
店員さんに「あと一店舗がんばってください!」と応援してもらいました。
18.池袋店(18:18着)
記念すべき18店舗目は池袋店です!
感動のチーズナポリタンです。
これで18店舗すべてのスタンプを集めることができました!!!!
池袋の店員さんいわく、社内で「すべて回った人が出た」という連絡はまだ来ていないそうで、おそらく一番乗りでしょうとのことでした!!!! やったー!!!!!!
これは巡回セールスマン問題なので、仕上げに一店舗目の新宿店に戻って完成です。これで2周目もスムーズにいけますね。
まとめ
この三連休、アルゴリズムと時間をめいっぱい使ってのギリギリの18店制覇でした!
営業時間のことも考えると、アルゴリズムの心得がなければ3日で18店もまわるのは無理だったと思うので、プログラミングを学んでおいて本当によかったなと思います。
パンチョさん、本当にありがとうございました! 一年間ナポリタン無料の権利もいただいたので、これからもたくさん食べに行きたいと思います!!
今回使った巡回セールスマン問題やフィボナッチ数、ハノイの塔などのアルゴリズムが学べるpaizaラーニングのアルゴリズム入門編はこちら
「paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。
詳しくはこちら
そしてpaizaでは、Webサービス開発企業などで求められるコーディング力や、テストケースを想定する力などが問われるプログラミングスキルチェック問題も提供しています。
スキルチェックに挑戦した人は、その結果によってS・A・B・C・D・Eの6段階のランクを取得できます。必要なスキルランクを取得すれば、書類選考なしで企業の求人に応募することも可能です。「自分のプログラミングスキルを客観的に知りたい」「スキルを使って転職したい」という方は、ぜひチャレンジしてみてください。
詳しくはこちら