Herausforderung
Die Aufgabe ist einfach. Gegeben ein Array und ein erster und letzter Wert: Gibt den ersten vom letzten nach dem ersten und den letzten vom ersten vor dem letzten zurück.
Oder einfach: Gegeben ein Array, var1, var2.
Beispielarray:
[var2 ,, var1 ,, var2 ,, var2, var1, var2,]
Rückkehr:
- Der Index der ersten var2 auf der rechten Seite der ersten var1, die im Array angezeigt wird.
[Var2, erste var1 , erste var2 , zweite var2, var1, dritten var2,]
- Der Index der ersten var1 auf der linken Seite der letzten var2, die im Array angezeigt wird.
[var2 ,, zweite var1 ,, var2 ,, var2, erste var1 , letzte var2 ,]
Eingang
Zwei verschiedene positive ganze Zahlen
Array positiver Ganzzahlen
Ausgabe
Index der Antworten in der richtigen Reihenfolge
Regeln
Das Array enthält mindestens eine von jeder Variablen (Mindestgröße 2).
Angenommen, die Eingaben funktionieren
Beispiel:
0, 1 [1, 0]
oder ähnliches würde fehlschlagen
Beispiele
Input
First = 2; Last = 4; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]
Output
2, 9
Input
First = 4; Last = 2; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]
Output
3, 6
Input
First = 0; Last = 1; [0, 1]
Output
1, 0
code-golf
array-manipulation
Elender Lümmel
quelle
quelle
var1
gleich seinvar2
?9, 2
,6, 3
und die0, 1
jeweils (oder plus eins , wenn der Ausgang 1-indexiert).Antworten:
Gelee , 17 Bytes
Probieren Sie es online aus!
quelle
Python 2 , 72 Bytes
Probieren Sie es online aus!
quelle
APL (Dyalog Classic) ,
2927 BytesProbieren Sie es online aus!
fordert zur Eingabe des Arrays und dann zu var1, var2 auf
quelle
JavaScript (ES6), 63 Byte
Probieren Sie es online aus!
Kommentiert
Alternative Versionen
Bei Verwendung von JS-integrierten Funktionen beträgt eine einfachere Antwort 79 Byte:
die leicht auf 75 Bytes komprimiert werden kann:
Probieren Sie es online aus!
Edit : @Neil hat es geschafft, es auf ein sehr schönes 67-Byte zu reduzieren :
Probieren Sie es online aus!
quelle
lastIndexOf
nimmt zwei Parameter, so dass die einfache Antwort auf 70 Bytes reduziert wird, und ich konnte die folgende 67-Byte-Version entwickeln:(x,y,a,f=s=>a[z=y,y=x,x=z,s+=`ndexOf`](x,a[s](y)))=>[f`i`,f`lastI`]
Python 3 ,
9793 Bytes-4 Bytes dank Ovs
Probieren Sie es online aus!
quelle
a-1-b == a + (-b-1) == a + ~b
kann für -1 Byte verwendet werden. Wenn Sie dieindex
Funktion einem Namen zuweisen , erhalten Sie 93 BytesJapt ,
272524 BytesInspiriert von der Antwort von @Arnauld
Danke @Shaggy -2 Bytes und @ETHproductions -1 Bytes
Ich habe gerade mit japt angefangen, also muss es ein besserer Weg sein. \
Probieren Sie es online aus!
quelle
)
durch Starter ersetzen , um 2 Bytes zu sparen.X=WbU)...+X
: Probieren Sie es online aus! Ich kämpfe auch darum, eine kürzere Methode zu finden ...APL (Dyalog Unicode) , 42 Byte SBCS
Anonyme stillschweigende Infix-Funktion. Nimmt var1, var2 als linkes Argument und das Array als rechtes Argument.
Probieren Sie es online aus!
quelle
R 81 Bytes
Probieren Sie es online aus!
(1-indiziert)
quelle
MATL , 27 Bytes
Probieren Sie es online aus!
Alternativ für die gleiche Anzahl von Bytes:
27 Bytes
Probieren Sie es online aus!
Der zweite ist leichter zu erklären:
Der zweite Teil des Codes macht dasselbe, mit Ausnahme dieser Änderungen:
2G
für die zweite Eingabe (var1) und die3G
erste dritte Eingabe (var2) anstelle der impliziten Eingabe oderi
, da diese verbraucht wurdenPY>P
(Flip-Array von links nach rechts, kumulatives Maximum abrufen, zurückblättern) anstelle vonY>
, um 1s vor dem letzten Vorkommen statt nach dem ersten Vorkommen zu erhaltenf0)
diese Option , um die letzte Stelle abzurufen, an der beide Bedingungen erfüllt sind, anstatt die erste Stelle (funktioniert, weil MATL die modulare Indizierung verwendet, sodass 0 als Verweis auf den letzten Index des Arrays verwendet wird).quelle
MATLAB (80 Bytes)
Eingegeben wird
x
,y
unda
. Da MATLAB 1-indiziert ist, sollten Sie Testfällen 1 hinzufügen.Testfall:
quelle
Java 8, 114 Bytes
Ein Lambda, das a
java.util.List<Integer>
und zweiint
s (var1, var2) nimmt und ein durch Kommas getrenntes Paar zurückgibt.Probieren Sie es online aus
quelle
Kotlin , 132 Bytes
Probieren Sie es online aus!
quelle
Julia ,
7164 Bytesdanke an sundar und sein
find(A.==x)[]
stattfindfirst(A,x))
..
quelle
find(A.==x)[]
anstelle von verwendenfindfirst(A,x)
.