Sie kennen den Mathematiker von Koch vielleicht an seiner berühmten Schneeflocke. Er hat jedoch interessantere Informatikprobleme im Ärmel. Schauen wir uns diese Vermutung an:
Gegeben ein Baum mit n
Knoten (also n-1
Kanten). Finden Sie einen Weg, um die Knoten von 1
bis n
und dementsprechend die Kanten von 1
bis n-1
so aufzulisten, dass für jede Kante k
die Differenz ihrer Knotennummern gleich ist k
. Die Vermutung ist, dass dies immer möglich ist.
Hier ist ein Beispiel, um es klar zu machen:
DEINE AUFGABE
Ihr Code verwendet als Eingabe einen Baum. Sie können das gewünschte Format verwenden. Für die Testfälle werde ich den Baum anhand der Bögen und der Liste der Knoten bereitstellen.
Dies ist beispielsweise die Eingabe für den Baum im Bild:
[a,b,c,d,e,f,g]
d -> a
a -> b
a -> g
b -> c
b -> e
e -> f
Ihr Code muss den Baum mit nummerierten Knoten und Kanten zurückgeben. Sie können eine grafischere Ausgabe zurückgeben, aber ich werde diese Art von Ausgabe für die Testfälle bereitstellen:
[a7,b3,c6,d1,e5,f4,g2]
d -> a 6
a -> b 4
a -> g 5
b -> c 3
b -> e 2
e -> f 1
TESTFÄLLE
[a,b,c,d,e,f,g] [a7,b3,c6,d1,e5,f4,g2]
d -> a d -> a 6
a -> b a -> b 4
a -> g => a -> g 5
b -> c b -> c 3
b -> e b -> e 2
e -> f e -> f 1
[a,b,c,d] [a4,b1,c3,d2]
a -> b a -> b 3
b -> c => b -> c 2
b -> d b -> d 1
[a,b,c,d,e] [a2,b3,c1,d4,e5]
a -> b a -> b 1
b -> c b -> c 2
c -> d => c -> d 3
c -> e c -> e 4
Dies ist Code-Golf, dies ist die kürzeste Antwort in Bytes Win!
Hinweis: Dies ist stärker als die Ringel-Kotzig-Vermutung , wonach jeder Baum eine anmutige Kennzeichnung hat. Da es in der Koch-Vermutung nicht möglich ist, Ganzzahlen für die Kennzeichnung zu überspringen, entgegen der anmutigen Kennzeichnung in der Ringel-Kotzig-Vermutung. Graceful Kennzeichnung wurde vor gefragt hier .
quelle
Antworten:
Gelee , 30 Bytes
Probieren Sie es online aus! (
GṄ³çG
Als Fußzeile verwenden, um die Ausgabe schöner zu gestalten.)Eingaben ähnlich wie Beispiel, zB
abcdef
und[d,a],[a,b],[a,g],[b,c],[b,e],[e,f]
Gibt die Liste zB
a,b,c,d,e,f
in der Reihenfolge aus.Hinweis: Mein Programm erzeugt andere Werte als die Testfälle, da es mehrere Möglichkeiten gibt, die alle gültig sind.
Erläuterung
Sparen Sie 1 Byte, indem Sie alle möglichen Lösungen anzeigen:
Probieren Sie es online aus! (
GṄ³çG⁷³G
Als Fußzeile verwenden, um die Ausgabe schöner zu gestalten)Verwenden Sie den Konverter , um den Testfall in eine Eingabeliste zu kopieren und einzufügen.
quelle
Ruby, 108 Bytes
Die Lamba-Funktion akzeptiert ein Array von 2-Element-Arrays, die die Kanten enthalten (wobei jede Kante als Zahlenpaar ausgedrückt wird, das den relevanten Noten entspricht.)
Ungolfed im Testprogramm
Ausgabe
Die Ausgabe ist ein Array mit 2 Elementen, das Folgendes enthält:
die neue Knotennummerierung
die Kantennummerierung.
Beispielsweise befindet sich die erste Kante des ersten Beispiels
[4,1]
zwischen den Knoten 6 und 1 unter der neuen Knotennummerierung und ist daher die Kante 6-1 = 5.Tatsächlich gibt es für jeden Testfall mehrere Lösungen. Das
return
stoppt die Funktion, sobald die erste gefunden wurde.quelle