Problembeschreibung
Wir alle lieben einen Twix (weil er die beste Süßigkeit ist), aber dies ist das erste Halloween der Kinder - wir müssen mindestens eine Süßigkeit von jeder Art für sie kaufen. An jedem Halloween senden alle Bewohner der Numberline Avenue eine E-Mail, in der sie angeben, welche Arten von Süßigkeiten sie dieses Jahr verschenken werden.
Oh! Und wir leben in einer 1D-Welt.
Da wir in gewisser Hinsicht außergewöhnlich faul und in anderer Hinsicht nicht faul sind, haben wir eine Karte der Häuser erstellt, in der ihre Positionen entlang der Straße angegeben sind. Wir haben auch die Arten von Süßigkeiten notiert, die sie haben. Hier ist die Karte, die wir für dieses Jahr erstellt haben:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
Um den kleinen Beinen der Kinder willen müssen wir den kürzesten Weg finden, der bei jedem Haus in der Nachbarschaft beginnt, um mindestens eine von jeder Art von Süßigkeiten zu sammeln .
Beispiele
Auf Wunsch einiger Benutzer (einschließlich Shaggy) werde ich einige Beispiele einbringen. Hoffentlich klärt das die Dinge auf. :) Eingabe:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
Ausgabe:
[1, 2, 3]
Eine weitere Karte und Lösung ...
Eingang:
[(-3, {"KitKats", "Twix"}),
(-1, {"Hundred Grands"}),
(3, {"Kisses"}),
(12, {"Hundred Grands", "Twix", "KitKats"})]
Ausgabe :
[0, 1, 2]
Wir könnten an der Koordinate 9 beginnen, wo wir Süßigkeiten sammeln, bis zu den Häusern 6 und 1. Das füllt die Süßigkeitenquote, indem wir 8 Einheiten laufen, aber ist es die kürzeste Lösung?
Regeln
Die Einträge müssen ein ähnlich strukturiertes Einzelargument für das Beispiel enthalten und die Indizes der zu besuchenden Häuser in kürzester Zeit ausgeben.
Es gelten die typischen Code-Golfregeln: Die kürzeste korrekte Lösung in Bytes gewinnt!
PS Dies war eine Interviewfrage, die mir von einem der weltweit größten Technologieunternehmen gestellt wurde. Wenn Sie nicht gerne Golf spielen, versuchen Sie, eine O (k * n) -Zeitlösung zu finden, bei der k die Anzahl der Bonbontypen und n die Anzahl der Häuser ist.
Bearbeiten
Wie Jonathon Allan betonte, besteht eine gewisse Verwirrung darüber, was "Indizes" in diesem Fall bedeuten. Wir wollen die Hauspositionen in der Argumentliste ausgeben und nicht ihre Koordinaten auf der Spur.
Antworten:
Gelee , 16 Bytes
Ein monadischer Link, der die Eingabe akzeptiert, wie in einer Liste beschrieben, die vom niedrigsten zum höchsten Haus in der Numberline Avenue sortiert ist (wenn wir eine Bestellung annehmen müssen, können wir ein vorangestelltes
Ṣ
), das den kürzesten Weg ergibt, der beim Haus mit der niedrigsten Nummer beginnt und die Avenue hinauf fährt.Probieren Sie es online aus!
Wenn wir alle diese kürzesten Pfade finden wollen, ersetzen Sie die nachfolgenden Bytes
ÞḢ
durchÐṂ
; Dies ist auch 16 Bytes.Wie?
quelle
Python 2 ,
133130127 BytesProbieren Sie es online aus!
quelle
05AB1E , 22 Bytes
Angenommen, die Zahlen in der Eingabeliste sind vom niedrigsten zum höchsten sortiert.
Wenn mehr als eine Lösung gefunden wird, werden alle ausgegeben.
Probieren Sie es online aus.
Erläuterung:
quelle
Perl 6 , 70 Bytes
Probieren Sie es online aus!
quelle
Haskell ,
343372 BytesDank @ ASCII-only für Verbesserungen gibt es auch eine 271-Byte-Variante, die er in den Kommentaren vorgeschlagen hat :)
Probieren Sie es online aus!
Ungolfed
Erster Versuch
quelle
O (k * n) Zeitlösung mit O (k * n) Raum
Unser Algorithmus lautet also:
quelle