Herausforderung
Bei einer beliebigen Liste von 2 Tupeln und einem einzelnen Element in einem dieser Tupel wird dessen "Partner" ausgegeben, dh gegeben a
und [(i,j),...,(a,b),...,(l,m)]
ausgegeben b
. Sie können davon ausgehen, dass alle Tupel eindeutig sind und dass alle Elemente in Tupeln Zeichenfolgen sind. Weiter nimm an du hast nicht beides (x,y)
und (y,x)
.
Testfälle
Input Output
[("(", ")"), ("{", "}"), ("[", "]")], "}" "{"
[("I'm", "So"), ("Meta", "Even"), ("This", "Acronym")], "Even" "Meta"
[("I", "S"), ("M", "E"), ("T", "A")], "A" "T"
[("test", "cases"), ("are", "fun")], "test" "cases"
[("sad", "beep"), ("boop", "boop")], "boop" "boop"
Wenigste Bytes gewinnt!
code-golf
array-manipulation
search
Nate Stemen
quelle
quelle
[a, b, c, d]
anstelle von[(a, b), (c, d)]
. Es würde eine Menge Bytes von meiner Antwort abschneiden. : P(a,a)
speziell nach und mir wurde gesagt, dass es nicht passieren würde . Nate bearbeitete dann sogar die Frage, um diese Tatsache zu spezifizieren. Sie haben jedoch einen Testfall mit einem solchen Eintrag hinzugefügt und auch die Spezifikation bearbeitet, um diese Entscheidung umzukehren - warum? Es ist eine Reihe von Antworten gebrochen.Antworten:
Japt, 6 Bytes
Funktioniert mit Zeichenfolgen oder ganzen Zahlen.
Probier es aus
Erläuterung
Implizite Eingabe von Array
U
und String / IntegerV
.Holen Sie sich das erste Element (Subarray) in
U
diesem ...Enthält
V
.Entfernen Sie
V
das resultierende Einzelelement-Array und geben Sie es implizit zurück.quelle
f
stattæ
an der Zeit. Duh: Pæ
und versucht, durchzudrehenf
! : DHaskell , 33 Bytes
Probieren Sie es online!
Definiert einen binären Operator
!
, der als linkes Argument einen Wertx
vom Typ τ und als rechtes Argument eine Liste von Tupeln (τ, τ) verwendet. Das Definitionsmuster stimmt mit dem Anfang(a,b)
und dem Endec
der angegebenen Liste überein . wennx==a
dannb
wird zurückgegeben; wennx==b
danna
wird zurückgegeben, und ansonsten fahren wir mit der Suche im Rest der Liste fort, indem wir rekursiv vorgehen.(Wenn die Liste keinen „Partner“ enthält, stürzt dies ab, da wir nicht definiert haben, was
x![]
sein soll.)quelle
JavaScript (ES6), 39 Byte
Nimmt den Eintrag und das Array von Arrays als gewöhnliche Argumente. Die beste nicht-rekursive Version, die ich machen konnte, war 44 Bytes:
quelle
a=>b=>a.map(e=>b=e[1-e.indexOf(b)]||b)&&b
(a,b)=>
=>a=>b=>
Art des Currying, aber die nicht-rekursive Version ging von der rekursiven Version aus, die Currying war, weil ich beim rekursiven Aufruf 2 Bytes einsparen konnte (das Currying selbst kostet tatsächlich ein Byte).MATL ,
41456 BytesProbieren Sie es online!
Eingabe ist ein Array als
[{a;b},{c;d}]
. Die Anzahl der Bytes schwankt stark, während das OP herausfindet, was tatsächlich zulässig ist.Ich begann mit einer 4-Byte-Version, die nur einzelne Zeichenfolgen verarbeiten konnte, was der einzige Testfall in der ursprünglichen Herausforderung war. Als sich herausstellte, dass dies ungültig war, erstellte ich eine sehr lange 14-Byte-Version, die nett und abgehackt war (siehe Versionsgeschichte!), Die mich einen Fehler entdecken ließ und sich dann als völlig unnötig herausstellte, da sie
Y=
mit geeigneten Eingaben versehen war , funktionierte genauso gut wie mein ursprüngliches 4-Bytey=P)
.quelle
Python 2 , 37 Bytes
Probieren Sie es online!
Proton , 31 Bytes
Probieren Sie es online!
(Diese beiden Antworten sind sich so ähnlich, dass ich sie zusammen veröffentliche, um ein erneutes Aufwärmen zu vermeiden.)
quelle
reversed
umreverse
für -1 Byte in Proton. \ s: P Im Ernst,reverse
ist ein viel besserer Name, nein? : PPerl 5 , 30 + 1 (-p) = 31 Bytes
Probieren Sie es online!
quelle
Python 2 ,
594542 Bytes-14 Bytes dank Emigna. -3 Bytes dank Maltysen.
Probieren Sie es online!
Ich möchte immer noch Curry verwenden. ; -;
quelle
y+[1,-1][y%2]
. Dachte nur nicht, dass es bitweise war ... Danke!C ++, 179 Bytes
C ++ mit Map-Datentyp, 162 Byte
Mit MSVC wird der Code kompiliert, auch wenn die letzte
return
Anweisung (return"";
) weggelassen wird. Es macht den Code 9 Bytes leichter, ABER das Verlassen durch das Funktionsende (dh das Nicht-Verlassen durch einereturn
Anweisung in der Schleife) ohne Rückgabeanweisungen führt zu undefiniertem Verhalten und funktioniert nicht, wenn das Tupel-Array das "key" -Element nicht enthältquelle
PowerShell, 36 Bytes
Findet das Element, das den Intput enthält, und erhält dann das 'andere' Element, indem die Eingabe von ihm ausgeschlossen wird. PowerShell verfügt nicht über die erstaunlichste Array-Verwaltung, aber möglicherweise ist eine integrierte Funktion dafür vorhanden, die mir nicht bekannt ist.
quelle
("boop", "boop")
Testfall.Röda , 30 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Mathematica
2724 BytesCases
wählt Elemente einer Liste aus, die einem Muster entsprechen. Bei Verwendung mit einem Pfeil können Elemente, die mit Mustern übereinstimmen, transformiert werden.Verwendung:
Erläuterung: In diesem Beispiel wird die Funktion nach dem Auftreten des ersten Arguments 3 zu
Cases[{3,x_}|{x_,3}:>x]
einer OperatorformCases
, die dann auf das zweite Argument angewendet{{1, 2}, {3, 4}}
wird. Auf diese Weise wird der Begleiter von 3 ausgewählt, unabhängig davon, ob er sich auf der Abszisse oder auf der Ordinate befindet. Bemerkenswerterweise listet diese Funktion alle Gefährten auf, wenn das erste Argument tatsächlich mehr als einmal im zweiten Argument vorkommt, mit anderen Worten, dies geht ein wenig über die Annahmen der angegebenen Frage hinaus.Umschließende Glyphen müssen geschweifte Klammern sein. 3 Bytes mit dem Vorschlag "Currying" von @Notatree gespeichert
quelle
Cases[{#,x_}|{x_,#}:>x]&
verwendet wie%[3][{{1,2},{3,4}}]
R , 47
42BytesProbieren Sie es online!
Funktioniert entweder mit einer Matrix oder einem geraden Vektor. v = der Suchwert, a = Tupelarray.
quelle
Gelee , 6 Bytes
Ein dyadischer Link, der die Listenpartner links und den verlorenen Partner rechts aufnimmt und den Partner zurückgibt.
Probieren Sie es online!
Wie?
quelle
(a,a)
und wurde gesagt, wir brauchen nicht damit umzugehen) kommentiert . Ich bin mir sicher, dass ich das Problem beheben konnte, bin mir aber nicht sicher, ob die Spezifikation jetzt so ist, wie sie beabsichtigt war.Pyth -
1198 BytesProbieren Sie es hier online aus .
quelle
Haskell ,
6562 BytesProbieren Sie es online!
Erläuterung
Dies verwendet span, um die erste Instanz zu finden, in der
x
das Tupel enthalten ist. Es erfasst dann das erste Element des Tupels, wenn es nicht gleich ist, und das zweite, wenn es nicht gleich ist.Haskell Lambdabot,
5956 BytesProbieren Sie es online!
Erläuterung
Dies verwendet die
Data.List
s-first
Funktion, um die von verwendeten Bytes zu reduzieren(!!0).snd.span
, da jedochfirst
a zurückgegeben wird, dasMaybe
wirJust
zu unserer Musterübereinstimmung in hinzufügen müssen#
.quelle
x!((a,b):c)|x==a=b|x==b=a|1<2=x!c
es sind 33 Bytes.05AB1E , 7 Bytes
Probieren Sie es online!
Alternative 7-Byte-Lösung
Probieren Sie es online!
quelle
˜D²k>è
für 6, es sei denn, es gibt einen bestimmten Grund für die XOR-Verknüpfung mit 1?Common Lisp, 74 Bytes
Probieren Sie es online!
quelle
Java 8, 78 Bytes
Ein Lambda (Curry) von
Stream<List<String>>
bis zu einem Lambda vonString
bisString
(obwohl implizite Typisierung dazu führt, dass dies für beliebige Listen funktioniert). Die Sprache hat keine dedizierten Tupelklassen, und mir ist keine in der Standardbibliothek bekannt, sodass Eingabepaare als Listen dargestellt werden. Kann zugewiesen werdenFunction<Stream<List<String>>, Function<String, String>>
.Probieren Sie es online
Ich werde die Ersparnis der letzten 6 Bytes jedem gutschreiben, der mich davon überzeugen kann
Optional
gültig ist. Ich konnte mich nicht überzeugen.Einer der interessanten Teile dieser Lösung war für mich, den günstigsten Weg zu finden, um die Ausgabe aus dem Stream zu erhalten. Ich überlegte
reduce
,findFirst
undmin
/max
, aber keiner war kürzer als das IntuitivefindAny
.quelle
Ruby, 31 Bytes
Gibt ein Singleton-Array zurück.
quelle
JavaScript (ES6), 45 Byte
Kam mit dieser letzten Nacht auf, bemerkte dann, dass Neil mich zu einer besseren JS-Lösung geschlagen hatte; dachte, ich könnte es trotzdem posten.
Arbeitet mit Zeichenketten und ganzen Zahlen.
quelle
Prolog (SWI) , 43 Bytes
Probieren Sie es online!
quelle
C # (.NET Core) ,
101100 + 18 BytesVielen Dank an Grzegorz Puławski, der dabei geholfen hat, ein paar Bytes zu reduzieren.
Probieren Sie es online!
C # (.NET Core),
122121120 BytesProbieren Sie es online!
quelle
x=>y=>
ist kürzer als(x,y)=>
(Func<a, b, c>
wirdFunc<a, Func<b, c>>
und Funktionsaufruff(a, b)
wirdf(a)(b)
) - Tolle Antwort übrigens!using System.Linq;
versusnamespace System.Linq{}
)Schale , 10 Bytes
Probieren Sie es online!
Ungolfed / Erklärung
Hinweis : Das obige Beispiel funktioniert nur aus Gründen der Lesbarkeit mit ganzen Zahlen. Der Typ selbst spielt keine Rolle (solange Sie ihn vergleichen können).
quelle
Schnelle 4 , 43 Bytes
Die Ausgabe ist ein Array, das entweder leer ist (kein Partner gefunden) oder ein einzelnes Element (der Partner) enthält.
Testfälle:
quelle
QBIC , 30 Bytes
QBIC ist nicht stark in Listen und Tupeln. Der obige Code verwendet
a
einen Befehlszeilenparameter und fordert dann paarweise zur Eingabe der Tupel durch den Benutzer auf. Wenn ein leeres Element angegeben wird, wird es ausgegebenb
.Probelauf
Erläuterung
Alternative Version, 22 Bytes
Dies entspricht im Wesentlichen der längeren Version, wird jedoch sofort beendet, wenn eine Übereinstimmung gefunden wird. Ich habe dies als Alternative aufgeführt, da Sie nicht alle Tupel in dieses Programm eingeben können, da es vorzeitig beendet wird.
quelle
Mathematica, 50 Bytes
Probieren Sie es online!
quelle
{'boop','boop'}
Testfall.Gestapelt , 21 Bytes
Probieren Sie es online! Dies nimmt Eingaben vom Stapel entgegen und belässt Ausgaben auf dem Stapel. Erweitert sieht das so aus:
Erläuterung
Nehmen wir
(('sad' 'beep') ('boop' 'boop'))
und'boop'
als Eingabe. Dann wird ein Array wie das folgende erstellt:$revmap,
:Das heißt, eine Kopie des Arrays wird zugeordnet, jedes Mitglied wird umgekehrt, und die beiden werden miteinander verkettet.
KeyArray
Im Gegenzug wird aus den angegebenen Werten ein Hash erstellt, wie folgt:Dann
\
bringt die Suchzeichenfolge an die Spitze des Stapels, und erhält den Schlüssel aus dem KeyArray dass Begegnungen mit#
. Dies gibt nur einen Wert zurück, sodass der doppelte Schlüssel im KeyArray nicht besorgt sein muss.Andere Ansätze
32 Bytes: (Eingabe vom Stack, Ausgabe nach STDOUT)
[@x:$revmap,uniq[...x=$out*]map]
36 Bytes:
{%x[y index#+]YES 0# :y neq keep 0#}
38 Bytes:
[@x:$revmap#,[KeyArray x#]map:keep 0#]
46 Bytes:
[@x:KeyArray\$revmap KeyArray,[x#]map:keep 0#]
quelle
Excel, 18 Bytes
Anonyme Excel-Arbeitsmappenformel, die Eingaben
<Lookup Value>
aus dem BereichA1
,<Key Array>
aus dem BereichB:B
und<Def Array>
aus dem Bereich entgegennimmtC:C
und den Wert der Definition, die dem Suchwert zugeordnet ist, an die aufrufende Zelle ausgibtWenn möglich, sind Muster-E / A einzubeziehen
quelle