Länder besitzen eine Reihe von Gebieten in einer 1D-Welt. Jedes Land ist eindeutig durch eine Nummer gekennzeichnet. Das Eigentum an den Gebieten kann durch eine Liste wie folgt dargestellt werden:
1 1 2 2 1 3 3 2 4
Wir definieren die kantigsten Gebiete eines Landes als die beiden Gebiete, die an beiden Rändern am nächsten liegen. Wenn die obige Liste mit Null indexiert wurde, 1
treten die kantesten Territorien des Landes an Position 0
und auf 4
.
Ein Land umgibt ein anderes, wenn die Unterliste zwischen den beiden Randgebieten alle Gebiete eines anderen Landes enthält. Im obigen Beispiel lautet die Unterliste zwischen den Randgebieten des Landes 2
:
2 2 1 3 3 2
Und wir sehen, dass alle Territorien des Landes 3
zwischen den kantigsten Territorien des Landes liegen 2
, also Land 2
um Land 3
.
Ein Land mit nur einem Element wird niemals ein anderes umgeben.
Herausforderung
Nehmen Sie eine Liste von Ganzzahlen als Eingabe (in einem beliebigen Format) und geben Sie einen Wahrheitswert aus , wenn ein Land von einem anderen umgeben ist, und ansonsten einen falschen Wert.
Sie können davon ausgehen, dass die Eingabeliste nicht leer ist, nur positive Ganzzahlen enthält und keine Zahlen 'überspringt': Dies 1 2 1 5
wäre beispielsweise eine ungültige Eingabe.
Testfälle
+----------------------+--------+
| Input | Output |
+----------------------+--------+
| 1 | False |
| 2 1 3 2 | True |
| 2 1 2 1 2 | True |
| 1 2 3 1 2 3 | False |
| 1 3 1 2 2 3 2 3 | True |
| 1 2 2 1 3 2 3 3 4 | False |
| 1 2 3 4 5 6 7 8 9 10 | False |
+----------------------+--------+
Antworten:
Pyth, 7 Bytes
Führen Sie den Code für Testfälle aus.
Die einzige Möglichkeit, die Umgebung zu vermeiden, besteht darin, die am weitesten links gelegenen Gebiete der Länder in derselben Reihenfolge wie die am weitesten rechts gelegenen Gebiete zu sortieren. Wenn zwei Länder in dieser Reihenfolge vertauscht werden, hat eines ein Territorium, das weiter links und weiter rechts liegt als das andere, und umgibt es daher.
Um die eindeutigen Länder in der Reihenfolge der am weitesten links liegenden Gebiete zu erhalten, deduplizieren wir einfach, wodurch diese Reihenfolge erhalten bleibt. Dasselbe geschieht für das Gebiet ganz rechts durch Umkehren, Deduplizieren und erneutes Umkehren. Wenn diese unterschiedliche Ergebnisse liefern, ist ein Land umgeben.
quelle
Retina ,
61-60BytesViel länger als ich möchte ...
Gibt die Anzahl der Länder aus, die mindestens ein anderes Land umgeben.
Probieren Sie es online aus.
Es ist eine sehr einfache Implementierung der Spezifikation: Wir suchen nach dem Muster
A...B...A
,B
das weder vor noch nach dem Spiel erscheint.quelle
Python, 64 Bytes
Die einzige Möglichkeit, die Umgebung zu vermeiden, besteht darin, die am weitesten links gelegenen Gebiete der Länder in derselben Reihenfolge wie die am weitesten rechts gelegenen Gebiete zu sortieren. Wenn zwei Länder in dieser Reihenfolge vertauscht werden, hat eines ein Territorium, das weiter links und weiter rechts liegt als das andere, und umgibt es daher.
Die Funktion überprüft, ob das Sortieren der Gebiete nach äußerster linker und äußerster rechter Position zu denselben Ergebnissen führt. Leider haben Python-Listen keine
rindex
Analogie zurfind
, daher kehren wir die Liste um und kehren dann die sortierte Ausgabe um.Gleiche Länge (64) mit einer Hilfsfunktion:
quelle
C #, 113 Bytes
Ungolfed:
Mit einem prägnanten
LINQ
Ansatz.quelle
int
wenn Sie nichts anderes sagen" -Marke. +1 für den Algorithmus und die Implementierung..ToArray()
.using System.Linq;
+n=>!n.Distinct().SequenceEqual(n.Reverse().Distinct().Reverse())
(der Linq-Import ist leider obligatorisch). Probieren Sie es online aus. Schöne Antwort, +1 von mir!CJam (
1413 Bytes)Online-Demo
Vielen Dank an Martin Büttner für die einmalige Ersparnis.
quelle
Japt, 12 Bytes
Probieren Sie es online!
Vielen Dank an @xnor für das Herausfinden des Algorithmus. Das Eingabearray wird automatisch in gespeichert
U
,â
ist eindeutig,w
ist umgekehrt und¦
ist!=
.¬
verbindet sich mit der leeren Zeichenkette ([1,2,3] => "123"
); Dies ist erforderlich, da der JavaScript-Vergleich zwei Arrays als nicht gleich ansieht, es sei denn, sie sind dasselbe Objekt. Zum Beispiel (JS-Code, nicht Japt):Wenn dies nicht der Fall wäre, könnten wir zwei Bytes entfernen, indem wir einfach nicht jedes Array verbinden:
quelle
ES6,
76756564 BytesEinfache Portierung von @ xnors Antworten.
Edit: Gespeichert 1 Byte durch den Ersatz
a.lastIndexOf(x)==i
mita.indexOf(x,i+1)<0
.Bearbeiten: 10 Bytes dank @ user81655 gespeichert.
Edit: Gespeichert 1 Byte durch den Ersatz
r||i
mitr|i
.quelle
a=>(f=r=>a.filter((x,i)=>a.indexOf(x,r&&i+1)==(r||i))+a)()!=f(-1)
~
ist das gleiche wie>=0
.05AB1E , 4 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Port von @xnors Pyth-Antwort .
Erläuterung:
quelle
Java, 281 Zeichen
quelle
Python 3, 90 Bytes
Diese Funktion übernimmt die Eingabe als Python-Liste. Leider unterstützen Python-Listen nicht direkt die Suche am Ende wie Strings
rindex()
, aber na ja .quelle