Ihr Ziel ist es, den festgelegten Schnittpunkt zweier Ganzzahllisten zu berechnen. Der Schnittpunkt ist definiert als die eindeutige ungeordnete Gruppe von Ganzzahlen, die mindestens einmal in beiden Eingabelisten gefunden wird.
Eingang
Die Eingabe kann in jedem gewünschten Format (Funktionsparameter, stdio usw.) erfolgen und besteht aus zwei Listen von Ganzzahlen. Sie nehmen viele nichts anderes an, als dass sie eine nicht negative Anzahl von Ganzzahlen enthalten (dh sie sind unsortiert, enthalten möglicherweise Duplikate, haben unterschiedliche Längen und sind möglicherweise sogar leer). Es wird davon ausgegangen, dass jede Ganzzahl in den muttersprachlichen Ganzzahltyp Ihrer Sprache passt, mehr als eine Dezimalstelle lang sein kann und vorzeichenbehaftet ist.
Beispieleingabe:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
Ausgabe
Die Ausgabe ist eine beliebige listähnliche Anzahl von Ganzzahlen, die den festgelegten Schnittpunkt der beiden Listen in einem beliebigen Format (Rückgabewert, Standard usw.) darstellen. Es ist nicht erforderlich, dass die Ausgabe sortiert wird. Sie können jedoch auch eine Implementierung bereitstellen, die zufällig immer sortiert ist. Die Ausgabe muss eine gültige ungeordnete Menge bilden (z. B. darf sie keine doppelten Werte enthalten).
Beispieltestfälle (beachten Sie, dass die Reihenfolge der Ausgabe nicht wichtig ist):
Die ersten beiden Zeilen sind die Eingabelisten, die dritte Zeile ist die Ausgabe. (empty)
bezeichnet die leere Liste.
(empty)
(empty)
(empty)
1000
(empty)
(empty)
3 1 2 4 3 1 1 1 1 3
3 1 -1 0 8 3 3 1
1 3
1 2 1
3 3 4
(empty)
Wertung
Das ist Code Golf; Die kürzeste Antwort in Bytes gewinnt.
Standardschlupflöcher sind verboten. Sie können alle integrierten Funktionen verwenden, die nicht für satzähnliche Vorgänge ausgelegt sind.
Verbotene integrierte Funktionen:
- Festlegen der Erstellung / Entfernung von Duplikaten
- Differenz / Schnittpunkt / Vereinigung einstellen
- Verallgemeinerte Mitgliedschaftstests (z. B. alles, was dem
in
Schlüsselwort in Python ähnelt ,indexOf
ähnliche Funktionen usw.). Beachten Sie, dass die Verwendung von "foreach item in list" -Konstrukten zulässig ist (vorausgesetzt, sie verstoßen nicht gegen eine der anderen Einschränkungen), obwohl Python dasin
Schlüsselwort zum Erstellen dieses Konstrukts erneut verwendet. - Diese verbotenen integrierten Funktionen sind "viral". Wenn also eine größere integrierte Funktion eine dieser Unterfunktionen enthält, ist dies ebenfalls verboten (z. B. Filtern nach Mitgliedschaft in einer Liste).
Alle integrierten Funktionen, die nicht in der obigen Liste enthalten sind, sind zulässig (z. B. Sortieren, Testen der Ganzzahlgleichheit, Anhängen / Entfernen der Liste nach Index, Filtern usw.).
Nehmen Sie zum Beispiel die folgenden zwei Beispielausschnitte (Python-ähnlichen Code):
# prohibited: filters by testing if each value in tmpList is a member of listA
result = tmpList.filter(listA)
# ok: filtering by a lambda which manually iterates over listA and checks for equality
def my_in_func(val, slist):
for a in slist:
if(val == a):
return True
return False
result = filter(lambda v: my_in_func(val, listA), tmpList)
Sie können diese Set-ähnlichen Funktionen gerne selbst implementieren und sie werden für Ihre Punktzahl angerechnet.
Ihre Lösung sollte in angemessener Zeit abgeschlossen sein (z. B. weniger als eine Minute auf der Hardware, die Sie für zwei Listen mit einer Länge von jeweils 1000 haben).
quelle
Antworten:
Haskell,
4542 BytesProbieren Sie es online aus!
Bearbeiten: -2 Bytes dank @ Ørjan Johansen, -1 Bytes dank @dfeuer.
quelle
MATL , 18 Bytes
Probieren Sie es online aus!
Dies funktioniert in zwei Schritten. Zuerst wird der Schnittpunkt berechnet, möglicherweise mit Duplikaten. Dies basiert auf dem Vergleich aller Elemente eines Arrays mit allen Elementen des anderen und dem Beibehalten der Elemente des ersten, die im zweiten vorhanden sind.
Dann werden Duplikate entfernt. Dazu wird das Array aus dem vorherigen Schritt sortiert und Einträge werden beibehalten, wenn sie sich vom vorherigen unterscheiden. Ein
-inf
Wert wird vorangestellt, damit der erste (dh niedrigste) Wert nicht verloren geht.quelle
Gelee, 13 Bytes
Probieren Sie es online aus!
Wie es funktioniert
quelle
Golflua , 68 Zeichen
das heißt als
In der regulären Lua wäre dies
Im Grunde genommen iteriere ich also über jedes Element der beiden Tabellen und speichere nur die entsprechenden Werte. Indem
k[w]=w
ich den Wert als Schlüssel ( ) verwende, entferne ich alle Duplikate. Wir geben dann die neue Tabelle aus, indem wir über den Index und den Wert von iterierenpairs
quelle
JavaScript (ES6), 66 Byte
Ohne zu verwenden
indexOf
, da ich nicht davon überzeugt bin, dass es erlaubt ist.quelle
Pyth,
1211 BytesDemonstration
Erläuterung:
quelle
Bash + GNU Coreutils, 184 Bytes
Aufruf:
Ausgabe:
Keine Ausgabe, wenn die Kreuzung leer ist. Dieses Skript sortiert nicht und führt eine Überprüfung der Integrität durch, wenn der erste Satz leer ist. Erläuterung:
Zu wissender Bonus: Sie können
grep -o .
dies auch mit zufälligen Zeichenfolgen anstelle von Zahlen ändern .quelle
Perl 6,
2637 BytesVerwendungszweck
Freche, nicht konkurrierende Antwort
oder wenn Sie es in einer langweiligen alten
f
Funktion mögenquelle
invert
wenn Sie stattdessen die Werte nehmen. 24 BytesNetzhaut , 63 Bytes
In den letzten beiden Zeilen werden Duplikate entfernt. Die Eingabe besteht aus zwei durch Leerzeichen getrennten Listen, die durch ein Komma getrennt sind. Die Ausgabe ist durch Leerzeichen getrennt.
Probieren Sie es online aus
Wenn Duplikate in der Ausgabe zulässig sind, würde mein Programm 42 Bytes umfassen.
quelle
Jq 1,5 , 99 Bytes
Erweitert
Dies vermeidet die Verwendung
{}
Objekten und da jq keine Bitoperationen hat, werden diese mit einem Array emuliert.Probieren Sie es online aus!
quelle
Axiom, 411 Bytes
ungolf und test
quelle
Axiom, 257 Bytes
Dies ohne die Verwendung von Binsearch ... Aber ich kenne das große O nicht ... Unglofed und Ergebnisse:
Nicht viele Tests ausgeführt, könnte also abgehört werden ...
quelle
Gelee , 12 Bytes
Probieren Sie es online aus!
quelle
[3]
statt3
[]
und das Element für Singleton-Listen. Sie können auf die Wiki-Seite (Atome) gehen und das integrierte Python Stringify anhängen, aber das macht meine Antwort länger und strenge E / A ist dummSchale , 9 Bytes
Probieren Sie es online aus!
Im Quellcode von Husk auf GitHub wird
k
("keyon") als Zusammensetzung zum Sortieren der Liste und Gruppieren benachbarter Werte implementiert. Obwohl ich die Implementierung von "groupOn" nicht finden kann, ist es wahrscheinlich sicher anzunehmen, dass dies nicht der Fall ist. Da Haskell eine funktionale Sprache ist und das Gruppieren benachbarter gleicher Werte eine ziemlich einfache Operation zum Reduzieren einer verknüpften Liste ist, ist nichts zu tun. (Ich kann die Implementierung derk
anderen Typensignatur "keyby" finden, die ich hier durch Ändern verwenden könnteI
zu=
, aber ich weiß nicht, Haskell , so kann ich nicht sagen , wie das genau funktioniert.)Außerdem eine nette kleine Brachylog-Antwort, die ich mir ausgedacht hatte, bevor mir klar wurde, dass Set-Operationen aller Art nicht erlaubt waren:
⟨∋∈⟩ᵘ
quelle
R,
14183 BytesVerbessert von Giuseppe
Versuchen Sie es online
HierHierquelle
a
undb
sind vordefiniert. Sie müssen Eingaben akzeptieren, indem Sie sie entweder als Funktionsargumente oder von STDIN verwenden.Python3, 51 Bytes
Wenn die Eingabelisten Duplikate enthalten können:
Python3, 67 Bytes
quelle
PHP ,
7877 BytesProbieren Sie es online aus!
Kein Schnickschnack, aber regelkonform (glaube ich).
Ausgabe
quelle