(Wir werden jedoch keine finden Find
oder fangen tryCatch
)
Dies ist Teil zwei einer mehrteiligen Serie zur Implementierung einiger interessanter R-Funktionen. Teil eins finden Sie hier .
Die Aufgabe:
Sie müssen die match
Funktion von R in so wenigen Bytes wie möglich implementieren .
Eingang:
x
, eine möglicherweise leere Liste / Array von ganzen Zahlentable
, eine möglicherweise leere Liste / Array von ganzen Zahlennomatch
ein einzelner ganzzahliger Wertincomparables
, eine möglicherweise leere Liste / Array von ganzen Zahlen
Ausgabe:
- Ein einzelnes Array / eine Liste von ganzen Zahlen mit
O
der gleichen Länge wiex
, wobei jeder WertO[i]
entweder darstellt:- Der Index
j
des ersten Wertes intable
wheretable[j]==x[i]
nomatch
Anzeigt, dass kein Wert intable
gleichx[i]
OR , daßx[i]
in der Liste derincomparables
.
- Der Index
Testfälle
All in the form x, table, nomatch, incomparables -> output
outputs
[], [1,2,3], 0, [5] -> []
[1, 2, 3], [], 0, [5] -> [0, 0, 0]
[9, 4, 3, 6, 3], [9, 8, 7, 6, 5, 4, 3, 2, 1], -1, [4] -> [1, -1, 7, 4, 7]
[8, 6, 7, 5, 3, 0, 9], [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4, 6, 2, 6], 1000, [1] -> [12, 8, 14, 5, 1, 1000, 6]
Weitere Testfälle können nach Bedarf generiert werden.
Zusätzliche Regeln:
- R hat Indizes auf der Basis von 1, aber konsistente Indizes auf der Basis von Alternativen sind akzeptabel. Sie können also Indizes verwenden, die bei 3 oder 17 oder was auch immer beginnen, dies muss jedoch konsistent sein, und Sie müssen dies in Ihrer Antwort angeben.
- Wenn Sie eine Sprache ausgewählt haben, die dies unterstützt, implementieren Sie bitte auch Ihre eigene Lösung.
- Erklärungen sind willkommen.
Das ist Code-Golf , also gewinnt die kürzeste Lösung in Bytes!
code-golf
array-manipulation
Giuseppe
quelle
quelle
4
ist inincomparables
, so kann es nicht zugeordnet werden. Wenn Ihre Sprache keine negativen Zahlen unterstützt, ist es in Ordnung, nicht negative Zahlen zu fordern, aber geben Sie diese Annahme in Ihrer Einreichung an.make
.Antworten:
Jelly ,
108 Bytes-2 danke an Erik den Outgolfer
Ein vollständiges Programm, das vier Befehlszeilenargumente akzeptiert und
incomparables nomatch table x
eine Jelly-Darstellung * der Liste dermatch
Funktionsergebnisse von R ausgibt.Probieren Sie es online!
Wie?
zB mit
incomparables nomatch table x
=[1,4], 2, [2,4], [4,3,2,1,0]
:* Eine leere Liste wird als nichts dargestellt, eine Liste mit der Nummer zehn wird nur als Element dargestellt, während andere Listen von eingeschlossen
[]
und begrenzt werden,
quelle
R 83 Bytes
Probieren Sie es online!
Vermeidet
match
,%in%
undsetdiff
.quelle
R , 55 Bytes
In diesem Fall wird der Code nicht in
match
vollem Umfang verwendet, sondern nur alsindex
Funktion. Erste Antwort von R, also wahrscheinlich unglaublich ineffizient!Beachten Sie (danke an Giuseppe für die Info) :
%in%
undsetdiff
sind auch beide intern mit implementiertmatch
, so dass die vollständige Beseitigung dieser überraschend nützlichen Funktion zu einem Durcheinander führt . Daher gibt es eine Prämie von 150 Wiederholungen ohne Frist dafür! (Beachten Sie jedoch, dass diessetdiff
erlaubt ist.)Probieren Sie es online!
oder...
R , 5 Bytes
Probieren Sie es online!
quelle
%in%
und vermieden habematch
. Wenn Sie eine gute golferische Antwort ohne eine dieser Funktionen finden möchten (wahrscheinlich schrecklich), werde ich dies belohnen.match
Einreichungifelse
mit diesen Tipp: codegolf.stackexchange.com/a/97826/59530match
Gelee ,
98 BytesProbieren Sie es online!
Ein volles Programm , das drei Argumente verwendet :
[[table], incomparables]
,x
,nomatch
in dieser Reihenfolge.quelle
C # (Visual C # Interactive Compiler) , 60 Byte
Probieren Sie es online!
quelle
Ruby , 44 Bytes
Null indexiert.
Probieren Sie es online!
quelle
R , 79 Bytes
Probieren Sie es online!
R , 66 Bytes
Kombination meiner Lösung mit Teilen von Nicks Lösung .
Probieren Sie es online!
quelle
Japt , 14 Bytes
Versuch es
quelle
Python 3 , 60 Bytes
Probieren Sie es online!
quelle
R has 1-based indices, but a consistent alternative-based indices are acceptable.
So können Sie die herausnehmen-~
und nur 0-Indizierung für -1 Bytes verwenden.t.index(v)if v in{*t}-{*i}else n
hat die exakt gleichen bytecount wie Ihre aktuellev in{*t}-{*i}and-~t.index(v)or n
Lösung, hahaPowerShell , 63 Byte
Probieren Sie es online!
0-indiziert
quelle
JavaScript (ES6), 53 Byte
Probieren Sie es online!
quelle
Perl 6 , 45 Bytes
Probieren Sie es online!
Anonymer Codeblock, der Eingaben wie Curry annimmt
f(table, nomatch, incomparables)(x)
und die Treffer 0 indiziert zurückgibt.Erläuterung:
quelle
$_∉d&&b.antipairs.Map{$_}||c
was ohne den Falsey-Wert von 0 gut funktioniert hätte. Der erste ($ _: k) ist eine großartige Lösung, die die langen Antipairs vermeidet. Kartenzwang.Holzkohle , 14 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. 1-indiziert. Erläuterung:
quelle
C (gcc) , 125 Bytes
1-indiziert.
Da ich in den übergebenen Arrays keinen Sentinel-Wert verwenden kann, muss ich die Array-Grenzen für jedes Array angeben.
Probieren Sie es online!
quelle
Attache , 39 Bytes
Probieren Sie es online!
Ziemlich einfache Überprüfung. Beachten Sie, dass sich die Argumentreihenfolge von der der Übereinstimmung unterscheidet. Insbesondere
x
ist das letzte Argument eher als das erste und entspricht_4
dem obigen Ausschnitt.Erläuterung
quelle
Haskell,
5756 BytesArgument Reihenfolge ist:
table
,nomatch
,incomparables
,x
.Probieren Sie es online!
quelle
05AB1E , 7 Bytes
0-indiziert. Die Eingänge sind in der Reihenfolge:
incomparables, table, x, nomatch
.Probieren Sie es online aus.
Erläuterung:
quelle