Meine Tochter hatte die folgende Aufgabe für ihre Mathe-Hausaufgaben. Stellen Sie sich sechs Freunde vor, die in einer Linie mit den Namen E, F, G, H, J und K leben. Ihre Positionen in der Linie sind wie folgt angegeben (nicht maßstabsgetreu):
Somit lebt F fünf Einheiten von E und zwei Einheiten von G und so weiter.
Ihre Aufgabe: Erstellen Sie ein Programm, das einen Pfad identifiziert, der jeden Freund genau einmal mit einer Gesamtlänge von n Einheiten besucht, wobei die Standorte der Freunde und n als Eingaben verwendet werden. Es sollte den Pfad melden, wenn es ihn findet (zum Beispiel könnte es für Länge 17 "E, F, G, H, J, K" melden, und es sollte ordnungsgemäß beendet werden, wenn keine Lösung vorhanden ist. Für das, was es wert ist, habe ich abgeschlossen Eine ungolfed Lösung in Mathematica in 271 Bytes. Ich vermute, es ist viel präziser möglich.
quelle
[0, 5, 7, 13, 16, 17]
und62
) entgegennimmt, damit Sie sicherstellen können, dass es für diesen Fall nicht speziell fest codiert ist."[0, 5, 7, 13, 16, 17], 62"
und eine Ausgabe in"(7, 16, 0, 17, 5, 13)"
Ordnung?Antworten:
J, 54 Bytes
Gibt eine korrekte Route aus. Wenn keine Route vorhanden ist, wird nichts ausgegeben.
52-Byte-Code, der alle Routen ausgibt (eine pro Zeile):
38-Byte-Code, der Positionen anstelle von Buchstaben ausgibt:
quelle
Mathematica, 55 oder 90 Bytes
Mathematica hast du gesagt? ;)
Dies ist eine anonyme Funktion, die zuerst die Positionen der Freunde (in beliebiger Reihenfolge) und dann die Ziellänge einnimmt. Es wird zurückgegeben
Missing[NotFound]
, wenn kein solcher Pfad vorhanden ist.Ich kann vier Bytes speichern, wenn die Rückgabe aller gültigen Pfade zulässig ist (
FirstCase
->Cases
).Das Zurückgeben eines Arrays von Zeichenfolgen ist etwas umständlicher:
quelle
Z
werden die nächsten ASCII-Zeichen fortgesetzt (nicht, dass Sie meinen Code für n> 20 ausführen möchten: D).Python 2,
154148 Bytes(oder 118 Bytes für die allgemeine Lösung)
Dieses Programm akzeptiert eine Zeile mit einer Liste und einer Ganzzahl wie '[0, 5, 7, 13, 16, 17], n' auf stdin und druckt einen Pfad auf die Ausgabe der Länge n oder nichts, wenn dies unmöglich ist.
Es ist schwierig, kleine Programme in Python zu schreiben, die Permutationen erfordern. Dieser Import und diese Verwendung sind sehr kostspielig.
Die Quelle für die OP-Anforderung vor dem Minifier:
Die allgemeine Lösung (nicht minimiert):
Aufgrund des einfachen Algorithmus und der großen Anzahl von Kombinationen ist die Ausführung für mehr als 20 Anfangspositionen sehr langsam.
quelle
from itertools import*
. Außerdem ist Python 3 möglicherweise kürzerinput()
und*a,c=map(...)
funktioniert mit dem Rest Ihres Programms.chr(a.index(n)+69)
?J (48 oder 65)
Ich nehme an, dass dies verdammt viel mehr Golf gespielt werden kann. Fühlen Sie sich frei, dies als Ausgangspunkt zu nutzen, um weiter Golf zu spielen
Oder mit Buchstaben:
Was es macht:
(Ich hoffe, dieses E / A-Format ist in Ordnung ...)
Wie es geht:
Erzeugt alle Permutationen der Eingabe
Berechnet die Entfernung
Sieht, welche Ergebnisse mit der Eingabe identisch sind, und generiert diese Permutationen neu (ich vermute, dass einige Zeichen hier abgeschabt werden können).
Mit Buchstaben:
Erstellen Sie eine Liste der ersten n Buchstaben, wobei n die Länge der Eingabeliste ist
macht das gleiche wie oben
quelle
Oktave, 73
Es gibt wirklich kein Entgolf, also lassen Sie mich versuchen zu erklären ... von innen nach außen permutieren wir alle Entfernungen, dann nehmen wir für jede Permutation die Unterschiede zwischen Häusern, nehmen den absoluten Wert als Entfernung, addieren sie Suchen Sie nach oben den Index der ersten Permutation mit dem gewünschten Abstand, permutieren Sie die Buchstaben und suchen Sie die bestimmte Permutation der Buchstaben.
Das ist 13-0-16-5-17-7 => 13 + 16 + 11 + 12 + 10 = 62.
(leer für unmögliche Eingaben)
quelle
perms()
in Octave 3.6.2 auf ideone.com gibt es Probleme mit dem String-Vektor.Matlab (86)
Beispiel, in dem eine Lösung existiert:
Beispiel, in dem es keine Lösung gibt:
Matlab (62)
Wenn das Ausgabeformat gelockert werden kann, indem Positionen anstelle von Buchstaben erzeugt werden und eine leere Matrix erzeugt wird, wenn keine Lösung vorhanden ist:
Beispiel, in dem eine Lösung existiert:
Beispiel, in dem es keine Lösung gibt:
Matlab (54)
Wenn es für das Programm akzeptabel ist, alle gültigen Pfade anzugeben :
Beispiel, in dem eine Lösung existiert:
quelle
Haskell, 109 Bytes
Anwendungsbeispiel:
17 # [0, 5, 7, 13, 16, 17]
Gibt alle gültigen Pfade aus, d["EFGHIJ","JIHGFE"]
. H. Wenn kein gültiger Pfad vorhanden ist, wird die leere Liste[]
zurückgegeben.Die Liste der Briefe enthält
I
(hoffe, das ist in Ordnung).So funktioniert es: Erstellen Sie eine Liste von
(name, position)
Paaren, permutieren Sie und nehmen Sie diejenigen, bei denen die Pfadlänge gleich ist,n
und entfernen Sie den Positionsteil.quelle