Die Inspiration für diesen Code Golf Puzzle ist die Brücke und Torch Problem , bei dem d Menschen am Anfang einer Brücke alle es in der geringsten Menge an Zeit überqueren müssen.
Der Haken ist, dass höchstens zwei Personen gleichzeitig überqueren können, da sonst die Brücke unter ihrem Gewicht zusammenbricht und die Gruppe nur Zugang zu einer Fackel hat, die getragen werden muss, um die Brücke zu überqueren.
Jede Person im gesamten Puzzle hat eine bestimmte Zeit, die sie benötigt, um über die Brücke zu gehen. Wenn sich zwei Personen kreuzen, ist das Paar genauso langsam wie die langsamste Person.
Es gibt keine festgelegte Anzahl von Personen, die die Brücke überqueren müssen. Ihre Lösung muss für jeden Wert von d funktionieren .
Sie müssen für dieses Problem keine Standardeingabe verwenden, aber um das Problem zu erläutern, verwende ich das folgende Eingabe- und Ausgabeformat für die Erläuterung. Die erste Zahl, d , ist die Anzahl der Personen am Beginn der Brücke. Anschließend sucht der Code nach d- Nummern, die jeweils die Geschwindigkeit einer Person darstellen.
Die Code-Ausgabe ist die LEISTE Zeit, die erforderlich ist, um alle Benutzer vom Beginn der Brücke bis zum Ende der Brücke zu überqueren, wobei die zuvor erläuterten Kriterien erfüllt werden.
Hier sind einige Eingabe- und Ausgabefälle sowie die Erklärung für den ersten Eingabefall. Es liegt an Ihnen, einen Algorithmus aus diesen Informationen abzuleiten, um das Problem in möglichst wenigen Byte Code zu lösen.
Eingang
4
1 2 5 8
Ausgabe
15
Um diesen Ausgang zu erreichen, müssen die Menschen auf folgende Weise kreuzen.
A and B cross forward (2 minutes)
A returns (1 minute)
C and D cross forward (8 minutes)
B returns (2 minutes)
A and B cross forward (2 minutes)
Hier ist ein weiterer Testfall, der Sie auf Ihrem Weg führt.
Eingang
5
3 1 6 8 12
Ausgabe
29
Regeln:
- Angenommen, die Eingabe wird nicht sortiert, und Sie müssen dies selbst tun (falls erforderlich).
- Die Anzahl der Personen im Puzzle ist nicht auf 4 festgelegt (N> = 1)
- Jede Gruppen- und Einzelkreuzung muss eine Fackel haben. Es gibt nur eine Fackel.
- Jede Gruppe darf maximal aus 2 Personen bestehen!
- Nein, Sie dürfen nicht von der Brücke springen und auf die andere Seite schwimmen. Keine anderen Tricks wie diese;).
1 3 4 5
14" und "15"1 4 5 6 7
hat ein ähnliches problem. 25 vs. 26N >= 2
Menschen umgehen (was seltsamerweise bedeutet, dass es zusätzliche Arbeit ist, den trivialen Fall "1 Person muss sich kreuzen" zu behandeln). Daher wäre eine Klarstellung in diesem Punkt sehr hilfreich. Danke im Voraus.Antworten:
Python 3,
10099 Byteseine rekursive Lösung
Vielen Dank an @xnor für diesen Artikel
Dank @lirtosiast 2 Bytes sparen, @movatica 1 Bytes sparen und @gladed darauf hinweisen, dass meine vorherige Lösung nicht funktioniert
Verwenden Sie den folgenden Trick, um etwas in der Lambda-Funktion auszuwerten.
s.sort() or s
Hier berechnen wir die Sortierung und geben das Ergebnis des Tests zurücks.sort()or len(s)>3
Ungolfed
Ergebnisse
quelle
len(s)==2
len(s)<3
s[0]*(len(s)==2)
nicht(s[0]*len(s)==2)
mit dem Fehlerf([1]) -> 0
, warum wir nicht durch<3
Dank ersetzen könnenA5:22
Python 2,
11911411211911010095 BytesMir wurde geraten, meine Antworten zu trennen.
Eine Lösung unter Verwendung
Theorem 1, A2:09
dieses Papiers ist nicht verlinkt . So zitieren Sie das Papier (indem Sie es auf Null-Indexierung ändern):The difference between C_{k-1} and C_k is 2*t_1 - t_0 - t_{N-2k}.
Ungolfing:
quelle
Ruby,
9413397961019699 BytesMir wurde geraten, meine Antworten zu trennen.
Dies ist eine Lösung auf dem Algorithmus in beschrieben anhand
A6:06-10
von dieser Arbeit auf der Brücke und Fackel Problem .Bearbeiten: Behebung eines Fehlers, bei dem
a=s[0]
noch nicht definiert ist, wanna
am Ende if aufgerufen wirds.size <= 3
.Ungolfing:
quelle
Scala,
113135 (darnit)Etwas ungolfed:
Prüfer:
Im Allgemeinen nicht besonders gut, aber für eine stark typisierte Sprache vielleicht nicht schlecht. Und danke an xnor, dass er einen Fall entdeckt hat, den ich nicht verstanden habe.
quelle
Ruby,
1049593 BytesMir wurde geraten, meine Antworten zu trennen.
Dies ist eine Lösung, die auf meiner Python 2-Lösung basiert und
Theorem 1, A2:09
von dieser Arbeit auf der Brücke und Fackel Problem .Ungolfing:
quelle