Mein Chef möchte jetzt, dass ich einen Mechanismus implementiere, mit dem er nach einem Element in einem Array suchen und ihm den Index / die Indizes geben kann, in denen dieser Wert vorkommt.
Deine Aufgabe:
Schreiben Sie ein Programm oder eine Funktion, die ein Array und einen Wert (String, Integer, Float oder Boolean) empfängt, und geben Sie die Indizes des Arrays zurück, an dem der Wert auftritt (entweder 0 oder 1 indiziert, je nachdem, was Sie bevorzugen). Wenn der Wert nicht im Array enthalten ist, geben Sie ein leeres Array zurück.
Eingang:
Ein Array A und ein Wert V, die in A vorhanden sein können oder nicht.
Ausgabe:
Ein Array, das die Indizes enthält, bei denen V in A vorkommt, oder, falls V in A nicht vorkommt, ein leeres Array.
Testfälle:
Bitte beachten Sie, dass die Testfälle auf 0 basieren.
12, [12,14,14,2,"Hello World!",3,12,12] -> [0,6,7]
"Hello World", ["Hi", "Hi World!", 12,2,3,True] -> []
"a", ["A",True,False,"aa","a"] -> [4]
12, [12,"12",12] -> [0,2]
Wertung:
Das ist Code-Golf , also gewinnt die niedrigste Punktzahl in Bytes.
quelle
Antworten:
Pyth , 2 Bytes
0-indiziert.
Probieren Sie es online! oder Überprüfen Sie alle Testfälle
Erläuterung
quelle
MATL , 2 Bytes
Das
m
konsumiert zwei Argumente und prüft jedes Element im Array, ob es dem anderen Argument entspricht. Esf
gibt die Indizes der wahrheitsgemäßen Einträge eines Arrays zurück.Probieren Sie es online!
quelle
ismember
stattdessen verwenden=
, um Zeichenfolgenarrays ordnungsgemäß zu behandeln.mf
Python 3 , 45 Bytes
-3 Bytes dank @EriktheOutgolfer und @Chris_Rands
Test Suite.
Heute habe ich gelernt
enumerate(x) == zip(range(len(x)),x)
.Python 3 , 47 Bytes
Probieren Sie es online! oder Überprüfen Sie alle Testfälle
quelle
enumerate()
, um es ein paar Bytes nach unten zu bringenlambda n,l:[x for x,y in enumerate(l)if y==n]
R (+ Pryr), 20 Bytes
Welches zur Funktion auswertet
Wobei entweder
a
der zu suchende Wert undb
der Vektor sein können oder umgekehrt. Wenn zwei Vektoren ungleicher Länge angezeigt werden (ein einzelner Wert zählt als ein Vektor der Länge 1 in R), wird R den kürzeren Vektor so umschließen, dass er der Länge des längeren Vektors entspricht. Dann wird die Gleichheit geprüft. Dies erzeugt einen logischen Vektor.which
Liefert die Indizes, bei denen dieser Vektor wahr ist.Probieren Sie es online!
quelle
JavaScript, 39 Bytes
Das obige Snippet funktioniert möglicherweise nicht in allen Browsern. Hier ist ein TIO-Link .
quelle
JavaScript (ES6),
4443 ByteDurchgestrichen 44 ist immer noch regulär 44; (
1 Byte dank @Arnauld gespeichert
quelle
===
normal machen==
? Ich habe mir im wahrsten Sinne des Wortes das Gleiche ausgedacht, Variablennamen und alles haha.===
ist nötig, um zu unterscheiden12
von"12"
05AB1E , 4 Bytes
Probieren Sie es online!
1-indiziert.
quelle
12
und[12,'12']
, es sei denn, er sagte, es ist kalt für Sprachen, die keinen konkreten Typ haben, um sich nicht um Typen zu kümmern.12
≠'12'
in 05AB1E weil sie manchmal anders verhalten ... nicht sicher , ob es irgendeine Gleichheit Test, obwohl so etwas unterstützen kann.is_alpha (a)
undis_number (d)
, aber ich denke, wir können davon ausgehen, dass unsere gültig sind, bis etwas anderes gesagt wird.C #
8872 Bytes16 Bytes dank @LiefdeWen eingespart.
Probieren Sie es online!
quelle
i==o
es nicht funktioniert.using System.Linq;a=>b=>a.Select((x,i)=>x.Equals(b)?i:-1).Where(x=>x>=0)
Gelee , 3 Bytes
Probieren Sie es online!
-1 Danke an Herrn Xcoder . (dyadische Ketten)
quelle
Haskell ,
4139 BytesProbieren Sie es online!
Zwei Bytes dank @flawr gespart
Haskell ist statisch typisiert, daher musste ich die Testfälle mit einer kleinen Umgehungslösung ausführen.
quelle
v#l=...
anstelle vonf v l=...
, sparen Sie zwei Bytes :)v!l=...
, wusste aber nicht, ob es akzeptiert wurde. Ich werde die Antwort bearbeiten. Vielen Dank!map
auf einigenfilter
Ausdruck ist häufig ein Indikator dafür , dass eine Liste Verständnis könnte kürzer sein:v!l=[i|(i,x)<-zip[1..]l,x==v]
.Schale , 5 Bytes
Probieren Sie es online! 1-indiziert.
Erläuterung
quelle
Ruby,
46 4039 Bytes7 Bytes gespart !!! danke an Eric Duminil.
Probieren Sie es online aus.
quelle
!1
fürfalse
.Ruby, 38 Bytes
Probieren Sie es online!
quelle
Google Sheets, 101 Bytes
Wert
V
inA1
und ArrayA
in,B1
wobei jeder Eintrag durch ein Komma getrennt ist. Null-Einträge sind nicht zulässig (Zeile 5 unten zeigt, was passiert).Erläuterung:
Offset(A1,0,0,1,Counta(Split(B1,",")))
Gibt einen Bereich zurück, der eine Zeile hoch und so viele Spalten breit ist, wie Einträge in vorhanden sindA1
.=IfError(Join(",",Filter(Column(~),Exact(Split(B1,","),A1))),"")
filtert die Spaltennummern dieses Bereichs basierend darauf, ob der Wert inA1
genau einem der Werte in entspricht,B1
und verknüpft sie alle in einer durch Kommas getrennten Liste.quelle
Clojure , 40 Bytes
Erster Versuch, Code Golf zu spielen.
keep-indexed
ordnet hier eine Funktion einer Auflistung zu, übergibt den aktuellen Index an den Callback und gibt alle Nicht-Null-Rückgabewerte zurück.Probieren Sie es online!
quelle
APL (Dyalog Unicode) , 2 Byte SBCS
Nimmt das zu suchende Element als linkes Argument (muss skalar sein, um ein Element des Lookup-Arrays anstelle eines Subarrays zu finden) und das Lookup-Array (das bis zu 15 Dimensionen haben kann) als rechtes Argument. Gibt eine Liste von Indizes zurück, von denen jeder so viele Elemente wie die Anzahl der Dimensionen im Nachschlage-Array haben kann.
Probieren Sie es online!
⍸
Findet heraus, wo⍷
gefundenquelle
⍸
ist nicht im Zeichensatz. Da Dyalog jedoch weit weniger als 256 eindeutige Zeichen verwendet, könnte es sich um ein einzelnes Byte handeln. Wenn wir neue Glyphen hinzufügen, dürfen wir den Zeichensatz nicht so ändern, dass die Abwärtskompatibilität erhalten bleibt.Batch, 86 Bytes
Übernimmt Eingaben als Befehlszeilenparameter (wertet dann die Array-Elemente als separate Parameter). Hinweis: Das Zitieren von Zeichenfolgen wird als Teil der Übereinstimmung betrachtet, z. B.
"1"
nicht gleich1
(würde 6 Byte kosten).quelle
Python 2 , 49 Bytes
Probieren Sie es online!
Nicht kurz genug, aber ich fand es cool. ¯ \ _ (ツ) _ / ¯
quelle
Perl 5 , 28 Bytes
Probieren Sie es online!
Die Ausgabe ist 1-indiziert.
Eine anonyme Funktion ist für Perl ziemlich ungewöhnlich, aber es ist die kürzeste, die ich mir vorstellen kann.
grep ..., 1 .. @_
iteriert über die Indizes des Eingabearrays (tatsächlich geht es eine Zelle über die letzte hinaus, aber es spielt keine Rolle) und behält nur den Index bei, der erfüllt$_[$_]eq$_[0]
, d. h. Diejenigen, bei denen der Wert des Elements ($_[$_]
) dem Wert entspricht, den wir behalten müssen ($_[0]
).Etwas länger (31 Bytes (30 +
-l
Flag)), aber als volles Programm:Probieren Sie es online!
quelle
Haskell ,
3733 BytesDanke @Laikoni für -4 Bytes!
Probieren Sie es online!
quelle
findIndices.(==)
elemIndices
?Java 8,
146113112111110108 Bytes-2 Bytes dank @TAsk mit
Vector
anstelle vonArrayList
.-1 Byte mit
Stack
anstelle vonVector
.-2 Bytes dank @Jakob durch Eingabe von a
ArrayList
anstelle eines Arrays.0-indiziert
Erläuterung:
Probieren Sie es hier aus.
quelle
Vector
können einige Bytes gespart werden. :)List
+ArrayList
ziemlich oft.List r=new Vector();
wird auch funktionieren.null
, aber das ist in Ordnung.05AB1E , 4 Bytes
Probieren Sie es online!
Es ist 1-indiziert, wie unten gezeigt:
quelle
Mathematica, 12 Bytes
1-indiziert
Eingang [Array, Wert]
Ausgabe
quelle
Position
?Haskell, 29 Bytes
Probieren Sie es online!
quelle
Japt , 9 Bytes
1-indiziert.
Die Japt-Eingabe unterstützt keine Booleschen Werte, daher wurden sie durch
0
und1
in den Testfällen ersetzt.Probieren Sie es online! mit dem
-Q
Flag, um die Array-Ausgabe zu formatieren.0-indizierte Lösung, 11 Bytes
Probieren Sie es online!
quelle
¶
anstatt sich als¥
nützlich zu erweisen: PI dachte darüber nach, etwas in der Art zu tunm@Y*(X¶V} f
, aber ich hatte nicht bemerkt, dass dies für den Index nicht funktionieren würde0
. 1-Indizierung ist clever ...Perl 6 , 21 Bytes
Probieren Sie es online!
Das
:k
Adverb togrep
weist es an, die übereinstimmenden Schlüssel (Indizes) der Eingabesequenz zurückzugeben, die mit dem Prädikat übereinstimmen* === $^v
.Wenn Zeichenfolgen und Zahlen als gleichwertig angesehen würden, könnte man ein grep-Prädikat von just
$^v
anstelle von verwenden* === $^v
.quelle
eqv
ist möglicherweise besser als===
abhängig davon, was Sie als äquivalente Werte betrachten möchten.Common Lisp, 66 Bytes
Probieren Sie es online!
quelle
TXR Lisp , 26 Bytes
Mit anderen Worten: "Wo ist Argument 2 gleich Argument 1?"
Lauf:
quelle
Clojure,
3938 BytesEin bisschen dunkel :) Das erste Eingabeargument ist ein
vec
von Werten und das zweite ist der gesuchte Wert.%
ordnet Indizes Werten zu, und die Menge#{%2}
gibt für diesen Wert " truthy" (das Eingabeargument%2
) oder "falsy" zurücknil
. comp setzt diese zusammen.quelle
C
340362166115 BytesHallo alle. Mein erstes Mal hier. Ich dachte, da es mir Spaß macht (zu versuchen), optimierten Code zu schreiben, kann ich dies auch versuchen.
@ Rodney - ~ 39 Bytes aus dem Includes
@ Zacharý - 7 Bytes mit impliziter Eingabe
0-indiziert .
Wie man läuft:
Gemäß dem @Arnolds-Vorschlag nimmt das Programm Argumente auf eine viel C-freundlichere Art und Weise entgegen. Dadurch konnte ich die Größe der Datei um etwas mehr als die Hälfte reduzieren.
Die Argumente sollten in der folgenden Reihenfolge übergeben werden,
value [element1 ...]
wobei geschweifte Klammern optionale Argumente angebenMöglicherweise müssen Sie den angegebenen Zeichenfolgen Anführungszeichen hinzufügen, um die Bedingung von zu erfüllen
12 != "12"
. Auf meinem System kann dies auf folgende Weise erfolgenGolf gespielt
ungolfed
quelle
i = 0
. Diese können entfernt werden. Ich schlage vor, ein bisschen mit dem Leerzeichen herumzuspielen.,12
und ein zweites Argument für[12,14,14,2,"Hello World!",3,12,12]
Ausdrucke,[5,6]
die technisch inkorrekt sind.#include
Anweisungen,strstr(h+i,n)-h ==i
haben ein zusätzliches Leerzeichen und können diesreturn-1
anstelle von tunreturn -1
.#include
Aussagen fallen lassen