問題の説明
私たちは皆、Twixが大好きです(最高のキャンディだからです)が、これは子供の最初のハロウィーンです---それぞれのタイプのキャンディを少なくとも1つは手に入れなければなりません。ハロウィーンごとに、ナンバーラインアベニューのすべての居住者は、彼らが今年提供するキャンディーの種類を示すメールを送信します。
ああ!そして、私たちは1Dの世界に住んでいます。
一部の方法では例外的に怠惰であるため、他の方法ではなく、家の地図を作成し、通り沿いの位置を示しています。また、お菓子の種類についても触れました。今年作成した地図は次のとおりです。
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
子供たちの小さな足のために、近所の家から始めて、各種類のキャンディーを少なくとも1つ集めるために、最短の散歩を見つける必要があります。
例
カップルのユーザー(Shaggyを含む)のリクエストに応じて、実際に動作する例をいくつか紹介します。うまくいけば、これで問題が解決します。:) 入力:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
出力:
[1, 2, 3]
別の地図と解決策...
入力:
[(-3, {"KitKats", "Twix"}),
(-1, {"Hundred Grands"}),
(3, {"Kisses"}),
(12, {"Hundred Grands", "Twix", "KitKats"})]
出力:
[0, 1, 2]
座標9の家から6と1の家にキャンディーを集めることから始めることができます。これは、8ユニットを歩くことでキャンディーの割り当てを満たしますが、これが最も短い解決策ですか?
ルール
エントリは、例と同様に構造化された単一の引数を取り、訪問する家のインデックスを最短のソリューションで出力する必要があります。
典型的なコードゴルフルールが適用されます。
PSこれは、世界最大のテクノロジー企業の1つから私に与えられたインタビューの質問でした。ゴルフが気に入らない場合は、O(k * n)時間解を見つけてみてください。kはキャンディーの種類の数で、nは家の数です。
編集する
Jonathon Allanが指摘したように、この場合の「インデックス」が何を意味するかについて、いくつかの混乱が存在します。レーン上の座標ではなく、引数リストの家の位置を出力したいと思います。