Bei einer gegebenen Liste von Ganzzahlen besteht Ihre Aufgabe darin, den zweitgrößten Wert in den ersten k Elementen für jedes k zwischen 2 und der Länge der Eingabeliste auszugeben .
Mit anderen Worten, geben Sie den zweitgrößten Wert für jedes Präfix der Eingabe aus.
Sie können einen beliebigen Wert für das erste Element ausgeben (wobei k = 1 ist) oder diesen Wert einfach weglassen, da es für eine Liste mit 1 Element kein zweites Maximum gibt. Sie können davon ausgehen, dass die Eingabe mindestens zwei Elemente enthält.
Kürzester Code gewinnt.
Beispiele
Input:
1 5 2 3 5 9 5 8
Output:
1 2 3 5 5 5 8
Input:
1 1 2 2 3 3 4
Output:
1 1 2 2 3 3
Input:
2 1 0 -1 0 1 2
Output:
1 1 1 1 1 2
code-golf
number
array-manipulation
jimmy23013
quelle
quelle
k
bestimmt?1
ist streng genommen nicht der zweitgrößte Wert von1,1
(2. Beispiel), sondern der zweite Wert bei absteigender Sortierung.-1, 0, 0, 1, 1, 2
für den letzten Testfall geben.)Antworten:
05AB1E , 5 Bytes
Probieren Sie es online!
Gibt als
[]
erstes (beliebiger Wert) zurück.quelle
η¦ε{¨θ
sollte für 6 Bytes funktionierenZ©KZ®‚¹sÃ
war, was ich dachte, wusste nicht,à
war auch nur eine Sache!Áθ
stattdessen verwendet.Schale ,
97 BytesDank @Zgarb ein oder zwei Bytes gespeichert
Rückgabe
0
für das erste "zweite Maximum"Erklärung
Probieren Sie es online!
quelle
→hO
stattdessen ein Byte zuordnen und speichern.Python 2 , 54 Bytes
Probieren Sie es online!
quelle
JavaScript (ES6),
585150 Bytes1 Byte dank @Neil gespeichert
Fügt
undefined
für k = 1 hinzu .Testfälle
Hinweis: Diese Code - Schnipsel Anwendungen
JSON.stringify()
zur besseren Lesbarkeit, die - als Nebeneffekt - Konvertitenundefined
zunull
.Code-Snippet anzeigen
quelle
a=>a.map(e=>(b=[e,...b]).sort((a,b)=>b-a)[1],b=[])
ist nur 50.Pyth , 8 Bytes
Probieren Sie es online! oder Probieren Sie die Test Suite!
Wie?
Dies gibt das erste Element der Liste als ersten Wert in der Liste gemäß der Spezifikation aus. Sie können einen beliebigen Wert für das erste Element ausgeben .
quelle
Gelee , 8 Bytes
Probieren Sie es online!
Der erste Wert ist immer 0, und die folgenden Zahlen sind das zweite Maximum jedes Präfixes.
Erläuterung
quelle
Java (OpenJDK 8) ,
87-86ByteProbieren Sie es online!
quelle
int x,y=x=
. Ich wusste nicht, dass separate Deklaration und Zuweisung in derselben Anweisung erfolgen können.Python 2 , 45 Bytes
Probieren Sie es online!
Die rechte Seite des Codes ist selbsterklärend. Was setzen wir aber links von der
and
? Da wir Teile einer Liste rekursiv verketten, muss die linke Seite wahr sein, wennl
zwei oder mehr Elemente vorhanden sind, und ansonsten eine leere Liste.l[1:]
erfüllt dieses Kriterium gut.quelle
C # (Mono) , 81 Bytes
Probieren Sie es online!
quelle
Brachylog , 10 Bytes
Probieren Sie es online!
quelle
Batch, 123 Bytes
quelle
APL (Dyalog) , 15 Bytes
Probieren Sie es online!
quelle
05AB1E , 5 Bytes
Fand ein anderes 5-Byte, ganz anders als Eriks Lösung . Der beliebige Wert ist das erste Element der Liste.
Probieren Sie es online!
Erläuterung
Nehmen wir ein Beispiel, um es verständlicher zu machen.
Zuerst bekommen wir die implizite Eingabe, sagen wir es ist
[1, 5, 2, 3, 5, 9, 5, 8]
.Dann pushen wir seine Präfixe mit
η
-[[1], [1, 5], [1, 5, 2], [1, 5, 2, 3], [1, 5, 2, 3, 5], [1, 5, 2, 3, 5, 9], [1, 5, 2, 3, 5, 9, 5], [1, 5, 2, 3, 5, 9, 5, 8]]
.Der Code durchsucht nun die Liste und sortiert jedes Präfix mit
{
-[[1], [1, 5], [1, 2, 5], [1, 2, 3, 5], [1, 2, 3, 5, 5], [1, 2, 3, 5, 5, 9], [1, 2, 3, 5, 5, 5, 9], [1, 2, 3, 5, 5, 5, 8, 9]]
.Wir nehmen dann das allerletzte Element und verschieben es an den Anfang:
[[1], [5, 1], [5, 1, 2], [5, 1, 2, 3], [5, 1, 2, 3, 5], [9, 1, 2, 3, 5, 5], [9, 1, 2, 3, 5, 5, 5], [9, 1, 2, 3, 5, 5, 5, 8]]
.Natürlich bekommt der Code jetzt das letzte Element jeder Unterliste mit
θ
-[1, 1, 2, 3, 5, 5, 5, 8]
(das erste ist der beliebige Wert).quelle
CJam , 16 Bytes
Probieren Sie es online!
Gibt das erste Element für first zurück.
-2 dank Challenger5 .
quelle
{_,,:)\f{<$-2=}}
ist zwei Bytes kürzer.R ,
5449 BytesDank an Giuseppe -5 Bytes. Ich kannte dieses Feature von nicht
seq()
.Probieren Sie es online!
quelle
seq(x<-scan())
ist um einige Bytes kürzer.Japt ,
1210 BytesDas Ausgabearray besteht aus dem ersten Element im Eingabearray, gefolgt von der gewünschten Sequenz.
Probier es aus
Erläuterung
Implizite Eingabe eines Arrays
U
.Karte über
U
, woY
ist der aktuelle Index.In Scheiben schneiden
U
von0
bisY+1
.Absteigend sortieren.
Holen Sie sich das zweite Element.
Das resultierende Array implizit ausgeben.
quelle
MATL ,
1910 BytesDanke an Luis Mendo für das Rasieren von 9 Bytes!
Probieren Sie es hier aus .
Erläuterung
quelle
J, 13 Bytes
Probieren Sie es online! Das erste Element ist immer 1.
Erläuterung
Der Raum ist wichtig.
quelle
Ohm ,
108 Bytes-2 Bytes dank ETHproductions.
Probieren Sie es online!
Äh, das ist seltsam, aber ich weiß nicht, wie ich sonst eine negative Zahl drücken soll ...Ich weiß nicht wirklich , Ohm. : Pquelle
0 2-
scheint sehr seltsam ...2~
?Mathematica, 45 Bytes
Probieren Sie es online!
quelle
Perl 5 , 42 + 1 (-a) = 43 Bytes
Probieren Sie es online!
quelle
Schnelle 3 , 67 Bytes
Test Suite.
Schnelle 3 , 65 Bytes
Test Suite.
Wie führe ich diese aus?
Die erste Funktion ist eine vollständige Funktion, die die Eingabe als Funktionsparameter verwendet und das Ergebnis ausgibt. Sie können sie genau wie im Testlink gezeigt verwenden. Ich habe mich jedoch dazu entschlossen, Anweisungen hinzuzufügen, da die zweite Art von Funktion sehr selten verwendet wird und die meisten Leute nicht einmal von ihrer Existenz wissen. Verwendung:
Die zweite Funktion ist eine anonyme Funktion wie Lambdas. Sie können es genauso verwenden, wie Sie es tun würden. Python deklariert eine Variable
f
und ruft sie auf:oder in eckige Klammern setzen und direkt aufrufen (
(...)(ArrayGoesHere)
):quelle
PHP, 53 Bytes
Nimmt Eingaben von Befehlszeilenargumenten entgegen. Ausgabe durch Semikola begrenzt, vor- und nachgeführt.
Laufen Sie mit
-nr
oder versuchen Sie es online .Gibt eine Warnung in PHP 7.1 aus; ersetzen
a&
mit""<
zu reparieren.Oder verwenden Sie
for(;++$i<$argc;rsort($a),print$a[1]._)$a[]=$argv[$i];
(54 Bytes)quelle
Mathematica 42 Bytes
Unabhängig kam zu einer Antwort, die @Jenny_mathy sehr ähnlich, aber 3 Bytes kürzer ist
Es wurde erkannt, dass das 1. laufende Maximum nur 15 Bytes und zwei Funktionsaufrufe benötigt !:
Dies kann so kurz gemacht werden, weil
Max
es die Attribute hatFlat
undOneIdentity
das gilt nicht fürRankedMax
die der logische Ersatz wäre. Leider nimmt das Definieren oder Ändern von Attributen für vorhandene Funktionen viel zu viele Bytes in Anspruch, sodass die Reduzierung auf andere Weise erfolgen muss.Alle n-ten laufenden Maxes können in 48 Bytes gefunden werden:
quelle
Pyth, 15 Bytes
FNr2hlQ@_S<QN1
Probieren Sie es hier aus: https://pyth.herokuapp.com/?code=FNr2hlQ%40_S%3CQN1&input=%5B1%2C+5%2C+2%2C+3%2C+5%2C+9%2C+5% 2C + 8% 5D & debug = 0
Erläuterung
FNr2hlQ
- Für Schleife mit Zähler 2 <= N <= Listenlänge@_S<QN1
- 2. Element, wenn die ersten N Elemente der Liste in aufsteigender Reihenfolge sortiert und dann umgekehrt werden (in absteigender Reihenfolge sortiert)quelle
k , 13 Bytes
Probieren Sie es online!
quelle
Oktave, 51 Bytes
- Ein beliebiger Wert, der für das erste Element zurückgegeben wird.
Probieren Sie es online!
quelle
JavaScript (ES6),
4351 BytesBearbeiten: 8 Bytes hinzugefügt, da eine numerische Sortierung gewünscht wird.
:(
Behalten Sie diese hier, da sie kürzer ist, vorausgesetzt, Sie möchten eine lexikografische Reihenfolge:
Beide Ausdrücke erzeugen
undefined
für das erste Element.Code testen
Code-Snippet anzeigen
quelle
10
, wie sie.sort()
standardmäßig lexikografisch sortiert ist (dh 1,10,100,11,12,13, ..., 2,20,21, ...). Sie müssten einschließen(a,b)=>a-b
oder ähnliches, damit es nach Nummer sortiert wird.Clojure, 56 Bytes
Vielleicht gibt es eine bessere Möglichkeit, diese Präfixe zu generieren.
quelle