Eine Grafiksequenz ist eine Folge von positiven ganzen Zahlen, die jeweils die Anzahl der Kanten für einen Knoten in einem einfachen Diagramm angeben . Zum Beispiel bezeichnet die Sequenz 2 1 1
einen Graphen mit 3 Knoten, einer mit 2 Kanten und zwei mit einer Verbindung.
Nicht alle Sequenzen sind grafische Sequenzen. Beispielsweise 2 1
handelt es sich nicht um eine grafische Sequenz, da es keine Möglichkeit gibt, zwei Knoten so zu verbinden, dass einer von ihnen zwei Kanten hat.
Aufgabe
Sie werden eine Folge von ganzen Zahlen nach jeder vernünftigen Methode nehmen. Dies umfasst, ohne darauf beschränkt zu sein , ein Array von Ganzzahlen und deren Größe, eine verknüpfte Liste von Ganzzahlen ohne Vorzeichen und einen Vektor von Doppelwerten. Sie können davon ausgehen, dass die Eingabe keine Nullen enthält. Sie können auch davon ausgehen, dass die Eingabe vom kleinsten zum größten oder vom größten zum kleinsten sortiert ist.
Sie müssen ausgeben, ob die Sequenz eine grafische Sequenz ist oder nicht. Ein wahrer Wert, wenn es sich sonst um einen falschen Wert handelt.
Tor
Dies ist Code-Golf. Ziel ist es, die Anzahl der Bytes in Ihrem Programm zu minimieren
Testfälle
Vom größten zum kleinsten sortiert
-> True
3 3 3 2 2 2 1 1 1 -> True
3 3 2 2 1 1 -> True
3 3 2 -> False
8 1 1 1 1 1 1 1 1 -> True
1 1 1 1 -> True
1 1 1 -> False
9 5 4 -> False
quelle
0
s für die leere Sequenz nehmenAntworten:
Mathematica, 25 Bytes
Ja, noch ein eingebautes. (Nimmt die Eingabe als Liste positiver Ganzzahlen.) Erfordert das Laden des
Combinatorica
Pakets.quelle
Python 2 (Exit-Code), 53 Byte
Probieren Sie es online!
Ausgänge über Exit-Code.
Verwendet eine Version des Havel-Hakimi-Algorithmus. Verringert wiederholt sowohl das größte Element
k
als auch dask
'größte Element (zählt nichtk
selbst), was dem Zuweisen einer Kante zwischen den beiden Scheitelpunkten mit diesen Graden entspricht. Wird erfolgreich beendet, wenn die Liste alle Nullen enthält. Andernfalls schlägt ein Fehler fehl, wenn ein Index außerhalb der Grenzen liegt. Alle negativen Werte, die erstellt werden, führen schließlich auch zu einem Fehler außerhalb der Grenzen.quelle
CJam (20 Bytes)
Online-Testsuite mit einigen zusätzlichen Tests, die ich hinzugefügt habe, um Fehler bei einigen meiner Versuche zu erkennen.
Dies ist ein anonymer Block (eine Funktion), der ein Array von Ganzzahlen auf dem Stapel nimmt und
0
oder1
auf dem Stapel verlässt . Es wird davon ausgegangen, dass die Eingabe aufsteigend sortiert ist.Das Eingabearray darf nicht leer sein, sondern darf gemäß der Antwort von OP auf meine Anfrage zum Thema Leereingaben Nullen enthalten.
Präparation
Dies folgt der Antwort von OP bei der Implementierung des Havel-Hakimi-Algorithmus .
quelle
Python 2 , 108 Bytes
Hier ist meine Implementierung in Python. Ich bin sicher, es kann von einem erfahrenen Golfer oder Mathematiker geschlagen werden. Es implementiert den Havel-Hakimi-Algorithmus.
Probieren Sie es online!
quelle
[2,1,1]
kehrt zurück, kehrtTrue
aber[1,1,2]
zurück0
- BEARBEITEN: Ich habe gerade gesehen, dass Ihre Spezifikation besagt, dass Sie annehmen können, dass sie sortiert ist (ich hatte den Testfall gesehen9 4 5
).Haskell ,
102 98 9594 BytesProbieren Sie es online! Verwendung:,
f [3,3,2,2,1,1]
gibtTrue
oder zurückFalse
. Es wird davon ausgegangen, dass die Eingabekeine Nullen enthält undin absteigender Reihenfolge sortiert ist, wie dies in der Abfrage zulässig ist.Erläuterung:
Edit: Dies scheint dem in anderen Antworten erwähnten Havel-Hakimi zu folgen, obwohl ich diesen Algorithmus beim Schreiben der Antwort nicht kannte.
quelle
length r < x
ist nicht ganz richtig, da dies[1,0]
wahr sein wird, aber es gibt keinen einfachen Graphen mit 2 Knoten mit einer und einer Nullkante.Gelee , 12 Bytes
Ein monadischer Link, der eine Liste akzeptiert, die ergibt,
1
wenn die Antworten ansonsten konsistent sind0
.Probieren Sie es online! Oder sehen Sie sich die Testsuite an .
Wie?
quelle
05AB1E ,
2625 BytesProbieren Sie es online!
Erläuterung
quelle
JavaScript (ES6),
82 8076 BytesVielen Dank an ETHproductions für die Einsparung von vielen Bytes!
Verwendung
Ausgabe
quelle
map((a,b)=>b<$?a-1:a)
mitmap(a=>a-($-->0))
zu speichern 4 Bytes.R , 20 Bytes
Mathematica ist nicht die einzige Sprache mit integrierten Funktionen! ;-)
Das
igraph
Paket muss installiert sein. Nimmt die Eingabe als Vektor von ganzen Zahlen.quelle
Rubin , 90 Bytes
Portiert von dieser Frage, die sich als ein Duplikat davon herausstellte. Verwendet Havel-Hakimi, da dies in dieser Frage erwähnt wurde.
Probieren Sie es online!
quelle
05AB1E , 19 Bytes
Port of JonathanAllans Gelee-Antwort , also stelle sicher, dass du ihn positiv bewertest !!
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Stax ,
1412 BytesFühren Sie es aus und debuggen Sie es
Dieses Programm verarbeitet leere und unsortierte Eingaben.
quelle