In dieser Aufgabe betrachten wir Arrays positiver Ganzzahlen wie diese:
3 18 321 17 4 4 51 1 293 17
Die Eingabe umfasst ein Paar solcher Arrays mit beliebiger, möglicherweise unterschiedlicher positiver Länge. Bestimmen Sie, ob eine Gesamtordnung ≤ X ⊂ N × N , wobei N die Menge positiver Ganzzahlen ist, so existiert, dass beide Eingabearrays in Bezug auf ≤ X in Ordnung sind . Beachten Sie, dass (A ≤ X B ∧ B ≤ X A) ↔ A = B gelten muss, dh zwei Zahlen werden unter ≤ X genau dann als gleich angesehen, wenn sie dieselbe Zahl sind.
Zum Beispiel, wenn die Eingabe das Array-Paar war
7 2 1 1 4 12 3
9 8 7 2 5 1
dann solltest du herausfinden, ob eine Gesamtordnung ≤ X existiert, so dass
7 ≤ X 2 ≤ X 1 ≤ X 1 ≤ X 4 ≤ X 12 ≤ X 3
und
9 ≤ X 8 ≤ X 7 ≤ X 2 ≤ X 5 ≤ X 1.
Ihre Übermittlung kann eine Unterroutine oder ein Programm sein, das / das zwei Arrays (wie oben angegeben) von Eingaben auf implementierungsdefinierte Weise empfängt, berechnet, ob eine Gesamtreihenfolge ≤ X vorhanden ist , die die oben genannten Anforderungen erfüllt, und einen Wert zurückgibt, der "Ja" oder einen anderen darstellt Wert für "Nr." Die Auswahl dieser Werte ist beliebig, bitte dokumentieren Sie sie.
Sie können davon ausgehen, dass die Eingabearrays jeweils nicht mehr als 2 15 - 1 Elemente enthalten und dass jedes ihrer Elemente im Bereich von 1 bis einschließlich 2 15 - 1 liegt. Möglicherweise müssen alle Arrays durch einen konstanten Sentinel außerhalb des oben genannten Bereichs wie 0 abgeschlossen werden. Bitte geben Sie an, welcher Sentinel benötigt wird. Sie können die Längen der Arrays als zusätzliche Eingabe benötigen, wenn die Länge nicht aus den Arrays selbst abgeleitet werden kann (z. B. in Sprachen wie C). Zusätzlich zum Verbot von Standardschlupflöchern dürfen Sie keine topologischen Sortierroutinen verwenden.
Diese Herausforderung ist Code Golf. Die Einreichung mit der geringsten Anzahl von Zeichen gewinnt.
quelle
Antworten:
Pyth,
2822Erstellt eine Funktion
y
, die Sie mit einem Tupel aufrufen können, das die beiden Arrays enthält. Gibt "True" zurück, wenn eine Gesamtbestellung vorhanden ist, andernfalls "False".Ein Hilfsprogramm, das die obige Funktion mit stdin definiert und aufruft:
Probieren Sie es hier aus.
Wir lesen zuerst beide Arrays. Dann werden wir alle Kombinationen beider Arrays erstellen. Dann nehmen wir für jede Kombination an, dass das erste Array maßgeblich ist, und prüfen, ob es mit dem zweiten Array übereinstimmt.
quelle
Receives two arrays ... in an implementation-defined way.
Sie können mindestens 7 Zeichen speichern.GolfScript, 25 Bytes
Versuchen Sie diesen Code online.
Nimmt ein Array von zwei (oder mehr!) Arrays auf dem Stapel auf; Gibt 1 (true) zurück, wenn jedes Paar von Eingabearrays eine kompatible Gesamtreihenfolge hat, oder 0 (false).
Es funktioniert, indem jedes mögliche Paar von Eingabearrays (einschließlich jedes mit sich selbst gepaarten Arrays) durchlaufen wird, die Elemente im ersten Array nach der Position sortiert werden, an der sie im zweiten Array zum ersten Mal auftreten (wobei nicht gefundene ignoriert werden) und überprüft werden dass die resultierende Reihenfolge mit dem Original übereinstimmt.
Während dieser Code eine beliebige Anzahl von Eingabearrays aufnehmen kann, ist zu beachten, dass nur die paarweise Konsistenz überprüft wird . Beispielsweise wird für die Eingabe true zurückgegeben
[[1 2] [2 3] [3 1]]
, da zwei der drei Arrays eine konsistente Gesamtreihenfolge haben. Das reicht jedoch für den Fall mit zwei Eingängen, was alles ist, was die Herausforderung erfordert.Hier ist eine de-golfed Version mit Kommentaren:
Ps. Es wäre möglich, ein oder zwei Bytes trivial zu speichern, indem die Eingabe direkt in der benannten Variablen angegeben werden
A
muss und / oder indem das Ausgabeformat in ein leeres Array für "Ja" und ein nicht leeres Array für "Nein" geändert wird. . Das scheint mir jedoch ziemlich kitschig.quelle
J,
363026 BytesNennen wir die beiden Eingabelisten
a
undb
. Die Funktion prüft (mit(e.~(-:/:~)@#i.)
) oba
's Elemente sortiert (in Bezug aufa
) inb
a
's Elemente sortiert (in Bezug aufa
) ina
b
's Elemente sortiert (in Bezug aufb
) ina
b
's Elemente sortiert (in Bezug aufb
) inb
Die Eingabe ist eine Liste von zwei ganzzahligen Vektoren.
Ergebnis ist,
1
wenn eine0
andere Bestellung vorliegt . (Laufzeit ist O (n * n).)Verwendungszweck:
Probieren Sie es hier online aus.
quelle
b
nicht in Bezug auf sortiert werdenb
?b=1 2 1
oder in meinem zweiten Beispielb=7 2 1 1 4 12 3 1
Ruby, 79
Erwartet, dass die Eingabe eine zweizeilige Datei mit durch Leerzeichen getrennten Zahlen ist. Gibt
true
wenn eine Bestellung vorhanden ist ,nil
wenn es nicht der Fall ist.quelle
nil
oder sichfalse
einfach zu falsch anfühlen.nil
oderfalse
ist absolut in Ordnung.Haskell, 98 Bytes
Rückgabe
True
oderFalse
. Anwendungsbeispiel:[7,2,1,1,4,12,3] # [9,8,7,2,5,1]
->True
.So funktioniert es: Entfernen Sie aufeinanderfolgende Duplikate aus den Eingabelisten (z
[1,2,2,3,2] -> [1,2,3,2]
. B.: Eine Reihenfolge liegt vor, wenn beide resultierenden Listen keine Duplikate enthalten und der Schnittpunkt von Liste1 und Liste2 gleich dem Schnittpunkt von Liste2 und Liste1 ist.quelle