Einführung
Fast jeder kennt das Travelling Salesman Problem (TSP). Die Aufgabe besteht darin, anhand einer Liste von N
Städten den minimalen Hamilton-Zyklus zu finden, dh den kürzesten Weg, der jede Stadt besucht und den Kreis schließt, um zum Start zurückzukehren. Darum geht es bei dieser Herausforderung nicht. Diese Herausforderung besteht darin, Chuck Norris ' Lösung für den TSP zu implementieren :
Chuck Norris löste das Problem des Handlungsreisenden
O(1)
rechtzeitig: Zerlege den Handlungsreisenden in N Teile; Kick jedes Stück in eine andere Stadt.
Herausforderung
Um den TSP auf diese Weise zu lösen, brauchen wir einen ausreichend langlebigen Verkäufer, der Frivolitäten wie Zergliederung nicht scheut. eine Reihe von Städten zu besuchen; eine Reihe von Produkten zu verkaufen; eine konkrete Methode zur Zerlegung; und eine Berechnung für die Wertung.
Spezifikation
- Städte
N
ist die Anzahl der von unserem Verkäufer besuchten Stellen
- Verkäufer
- Das Hauptprogramm oder die Hauptfunktion
- In Sprache geschrieben
X
- Mit Länge mod
N
gleich0
- Produkte
- Zerstückelung
- Den Verkäufer in
N
gleichlange durchgehende Stücke schneiden - Jedes Stück sollte eine gültige Funktion oder ein gültiges Programm in der Sprache sein
X
- Den Verkäufer in
- Ausgabe
- Bei der Ausführung sollte der Verkäufer
Chuck Norris
ein bestimmtes Produkt ausgeben und die geschnittenen Stücke sollten jeweils ein bestimmtes Produkt ausgeben - Nur zusätzliche Leerzeichen am Ende sind zulässig
- Bei der Ausführung sollte der Verkäufer
- Wertung
- Die Länge
L
des Verkäufers in Bytes geteilt durch die Anzahl der StädteN
im Quadrat. Score = L/(N*N)
- Kleinste Punktzahl gewinnt
- Bitte geben Sie 3 signifikante Ziffern an, wenn Sie Ihre Dezimalpunktzahl veröffentlichen
- Die Länge
Beispiele
- Dieser Verkäufer besucht so 3 Städte
N=3
und hat so eine Länge von 9L=9
. Somit wäre die Punktzahl für diese AntwortS = 9 / (3 * 3) = 9/9 = 1
.- Beachten Sie, dass der Verkäufer und jedes in Scheiben geschnittene Stück (von denen es 3 gibt) gültige Programme oder Funktionen in derselben Sprache sein sollten.
Program -> Output
------- ------
aaaBBBccc -> Chuck Norris
aaa -> Helium
BBB -> Iridium
ccc -> Tennessine
N=4
undL=20
soS=20/16=1.25
Program -> Output
------- ------
aaaaaBBBBBcccccDDDDD -> Chuck Norris
aaaaa -> Hydrogen
BBBBB -> Cadmium
ccccc -> Mercury
DDDDD -> Iron
quelle
ElementData
erlaubt? (Ich bezweifle, dass es viel spart, aber ich weiß es nicht.)Antworten:
C Jam, L = 1482, N = 114, Score 0,114
Probieren Sie es online!
Jedes Programm ist 13 Byte lang. Hier sind sie in einzelne Zeilen aufgeteilt:
Die fehlenden Elemente sind Darmstadtium, Praseodymium, Protactinium und Rutherfordium, die 12 oder 13 Zeichen lang sind, was bedeutet, dass ich sie nicht in jeweils 13 Zeichen drucken kann.
Die Idee ist, dass die ersten wenigen Programme, die die Elemente mit kurzen Namen drucken, ihre fremden Zeichen verwenden, um die Zeichenfolge
Chuck Norri
in der Variablen zu erstellenL
, was sich nicht auf die Ausgabe auswirkt, wenn sie alleine verwendet werden. Das endgültige Programm prüft dann, ob sich bereits etwas auf dem Stapel befindet, und verwendet es, um zwischenL
(pluss
) und zu wählenXenon
.Einige zusätzliche Bytes werden mit dem Zeichen gespeichert, das wir gerade
L
als Teil des Elementnamens hinzugefügt haben , insbesondere fürC
Arbon,N
Ickel, Copper
und Silver
.quelle
Python, L = 2596, N = 118, Score = 0,186
Die Länge jedes Schnitts beträgt 22 , was das Ganze ziemlich lang macht.
Hier ist der Verkäufer nach dem Schneiden und Würfeln:
Aktualisieren
quelle
lambda:"Actinium";print""
Ausgabe von Actinium? Gilt das möglicherweise speziell für Python 3?Actinium
. Dasprint ""
macht nichts Sinn, nachdem der Verkäufer auseinandergenommen wurde.