Étant donné une liste d'entiers, votre tâche consiste à générer la deuxième valeur la plus élevée dans les premiers k éléments, pour chaque k compris entre 2 et la longueur de la liste d'entrée.
En d'autres termes, sortez la deuxième plus grande valeur pour chaque préfixe de l'entrée.
Vous pouvez sortir une valeur arbitraire pour le premier élément (où k = 1), ou simplement omettre cette valeur, car il n'y a pas de deuxième maximum pour une liste de 1 élément. Vous pouvez supposer qu'il y a au moins 2 éléments dans l'entrée.
Le code le plus court gagne.
Exemples
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
la source
la source
k
déterminé?1
n'est pas, à proprement parler, la deuxième plus grande valeur de1,1
(2e exemple), c'est la deuxième valeur lorsqu'elle est triée décroissante.-1, 0, 0, 1, 1, 2
pour le dernier cas de test.)Réponses:
05AB1E , 5 octets
Essayez-le en ligne!
Renvoie
[]
(valeur arbitraire) pour le premier.la source
η¦ε{¨θ
devrait fonctionner pendant 6 octetsZ©KZ®‚¹sÃ
c'était ce que je pensais, je ne savaisà
même pas que c'était une chose!Áθ
place.Husk ,
97 octetsSauvegardé un octet ou deux grâce à @Zgarb
Renvoie
0
pour le premier "deuxième maximum"Explication
Essayez-le en ligne!
la source
→hO
place et enregistrer un octet.Python 2 , 54 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
585150 octets1 octet enregistré grâce à @Neil
Ajoute
undefined
pour k = 1 .Cas de test
NB: Cet extrait utilise
JSON.stringify()
pour la lisibilité, qui - comme effet secondaire - se convertitundefined
ennull
.Afficher l'extrait de code
la source
a=>a.map(e=>(b=[e,...b]).sort((a,b)=>b-a)[1],b=[])
n'a que 50 ans.Pyth , 8 octets
Essayez-le en ligne! ou Essayez la suite de tests!
Comment?
Cela génère le premier élément de la liste comme première valeur de la liste, conformément à la spécification. Vous pouvez générer une valeur arbitraire pour le premier élément .
la source
Gelée , 8 octets
Essayez-le en ligne!
La première valeur sera toujours 0 et les nombres suivants seront les seconds maximums de chaque préfixe.
Explication
la source
Java (OpenJDK 8) ,
8786 octetsEssayez-le en ligne!
la source
int x,y=x=
. Je ne savais pas qu'une déclaration et une affectation distinctes pouvaient être faites dans la même déclaration.Python 2 , 45 octets
Essayez-le en ligne!
Le côté droit du code est explicite. Cependant, que mettons-nous à gauche de la
and
? Parce que nous concaténons récursivement des parties d'une liste, nous avons besoin que le côté gauche soit vrai s'ill
a 2 éléments ou plus, et une liste vide sinon.l[1:]
répond bien à ce critère.la source
C # (Mono) , 81 octets
Essayez-le en ligne!
la source
Brachylog , 10 octets
Essayez-le en ligne!
la source
Lot, 123 octets
la source
APL (Dyalog) , 15 octets
Essayez-le en ligne!
la source
05AB1E , 5 octets
Trouvé un autre 5 octets, très différent de la solution d' Erik . La valeur arbitraire est le premier élément de la liste.
Essayez-le en ligne!
Explication
Prenons un exemple, pour le rendre plus facile à comprendre.
D'abord, nous obtenons l'entrée implicite, disons que c'est
[1, 5, 2, 3, 5, 9, 5, 8]
.Ensuite, nous poussons ses préfixes en utilisant
η
-[[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]]
.Maintenant, le code mappe la liste et trie chaque préfixe à l'aide de
{
-[[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]]
.Nous prenons alors le dernier élément et le déplacer au début:
[[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]]
.Bien sûr, maintenant le code obtient le dernier élément de chaque sous-liste en utilisant
θ
-[1, 1, 2, 3, 5, 5, 5, 8]
(le premier étant la valeur arbitraire.la source
CJam , 16 octets
Essayez-le en ligne!
Renvoie le premier élément pour le premier.
-2 grâce à Challenger5 .
la source
{_,,:)\f{<$-2=}}
est de deux octets plus court.R ,
5449 octetsMerci à Giuseppe -5 octets. Je ne connaissais pas cette fonctionnalité de
seq()
.Essayez-le en ligne!
la source
seq(x<-scan())
est plus court de quelques octets.Japt ,
1210 octetsLe tableau de sortie se compose du premier élément du tableau d'entrée suivi de la séquence souhaitée.
Essaye-le
Explication
Entrée implicite du tableau
U
.Carte sur
U
, oùY
est l'index actuel.Tranche
U
de0
àY+1
.Trier par ordre décroissant.
Obtenez le deuxième élément.
Sortie implicite du tableau résultant.
la source
MATL ,
1910 octetsMerci à Luis Mendo d'avoir rasé 9 octets!
Essayez-le ici .
Explication
la source
J, 13 octets
Essayez-le en ligne! Le premier élément est toujours 1.
Explication
L'espace compte.
la source
Ohm ,
108 octets-2 octets grâce à ETHproductions.
Essayez-le en ligne!
Euh, c'est bizarre mais je ne sais pas comment pousser un nombre négatif ...Je ne sais pas vraiment Ohm. : Pla source
0 2-
semble très étrange ...2~
?Mathematica, 45 octets
Essayez-le en ligne!
la source
Perl 5 , 42 + 1 (-a) = 43 octets
Essayez-le en ligne!
la source
Swift 3 , 67 octets
Suite de tests.
Swift 3 , 65 octets
Suite de tests.
Comment les exécuter?
La première est une fonction complète qui prend l'entrée comme paramètre de fonction et imprime le résultat. Vous pouvez les utiliser exactement comme indiqué dans le lien de test. J'ai cependant décidé d'ajouter des instructions, car le deuxième type de fonction est très rarement utilisé et la plupart des gens ne connaissent même pas son existence. Usage:
La seconde est une fonction anonyme, comme les lambdas. Vous pouvez l'utiliser exactement comme vous le feriez en Python, en déclarant une variable
f
et en l'appelant:ou placez-le entre crochets et appelez-le directement (
(...)(ArrayGoesHere)
):la source
PHP, 53 octets
prend l'entrée des arguments de la ligne de commande. Sortie délimitée, plomb et traînée par semicola.
Courez avec
-nr
ou essayez-le en ligne .Donne un avertissement en PHP 7.1; remplacer
a&
par""<
pour corriger.Ou utilisez
for(;++$i<$argc;rsort($a),print$a[1]._)$a[]=$argv[$i];
(54 octets)la source
Mathematica 42 octets
Indépendamment arrivé à une réponse très similaire à @Jenny_mathy mais 3 octets plus court
Réalisé que le 1er max en cours d'exécution ne prend que 15 octets et deux appels de fonction!:
Cela peut être fait de manière concise, car il
Max
a les attributsFlat
etOneIdentity
ce n'est pas vrai pourRankedMax
lequel serait le remplacement logique. Malheureusement, définir des attributs ou les modifier sur des fonctions existantes prend beaucoup trop d'octets, donc l'aplatissement doit être fait par d'autres moyens.Tous les nèmes max en cours d'exécution peuvent être trouvés en 48 octets:
la source
Pyth, 15 octets
FNr2hlQ@_S<QN1
Essayez-le ici: 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 et débogage = 0
Explication
FNr2hlQ
- Pour boucle avec compteur 2 <= N <= longueur de liste@_S<QN1
- 2ème élément lorsque les N premiers éléments de la liste sont triés par ordre croissant puis inversés (triés par ordre décroissant)la source
k , 13 octets
Essayez-le en ligne!
la source
Octave, 51 octets
- Une valeur arbitraire retournée pour le premier élément.
Essayez-le en ligne!
la source
JavaScript (ES6),
4351 octetsModifier: ajout de 8 octets car le tri numérique est souhaité.
:(
Garder celui-ci ici, cependant, car il est plus court à condition de vouloir un ordre lexicographique:
Les deux expressions produisent
undefined
pour le premier élément.Code de test
Afficher l'extrait de code
la source
10
, comme.sort()
trie lexicographiquement par défaut (ie 1,10,100,11,12,13, ..., 2,20,21, ...). Vous devez inclure(a,b)=>a-b
ou similaire pour le trier par numéro.Clojure, 56 octets
Il existe peut-être une meilleure façon de générer ces préfixes.
la source