Dada una lista de enteros, su tarea es generar el segundo valor más grande en los primeros k elementos, para cada k entre 2 y la longitud de la lista de entrada.
En otras palabras, muestre el segundo valor más grande para cada prefijo de la entrada.
Puede generar un valor arbitrario para el primer elemento (donde k = 1), o simplemente omitir este valor, ya que no hay un segundo máximo para una lista de 1 elemento. Puede suponer que hay al menos 2 elementos en la entrada.
El código más corto gana.
Ejemplos
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
fuente
fuente
k
determina?1
estrictamente hablando, el segundo valor más grande de1,1
(segundo ejemplo) es el segundo valor cuando se ordena descendente.-1, 0, 0, 1, 1, 2
para el último caso de prueba)Respuestas:
05AB1E , 5 bytes
Pruébalo en línea!
Devuelve
[]
(valor arbitrario) para el primero.fuente
η¦ε{¨θ
debería funcionar para 6 bytesZ©KZ®‚¹sÃ
fue lo que estaba pensando, ¡ni siquiera sabía queà
era una cosa!Áθ
lugar.Casco ,
97 bytesGuardado un byte o dos gracias a @Zgarb
Devoluciones
0
para el primer "segundo máximo"Explicación
Pruébalo en línea!
fuente
→hO
y guardar un byte.Python 2 , 54 bytes
Pruébalo en línea!
fuente
JavaScript (ES6),
585150 bytesGuardado 1 byte gracias a @Neil
Anexa
undefined
para k = 1 .Casos de prueba
NB: este fragmento se utiliza
JSON.stringify()
para facilitar la lectura, que, como efecto secundario, se convierteundefined
ennull
.Mostrar fragmento de código
fuente
a=>a.map(e=>(b=[e,...b]).sort((a,b)=>b-a)[1],b=[])
son solo 50.Pyth , 8 bytes
Pruébalo en línea! o prueba el Test Suite!
¿Cómo?
Esto genera el primer elemento de la lista como el primer valor de la lista, según la especificación . Puede generar un valor arbitrario para el primer elemento .
fuente
Jalea , 8 bytes
Pruébalo en línea!
El primer valor será 0, siempre, y los siguientes números serán los segundos máximos de cada prefijo.
Explicación
fuente
Java (OpenJDK 8) ,
8786 bytesPruébalo en línea!
fuente
int x,y=x=
. No sabía que se pudieran hacer declaraciones y asignaciones separadas en la misma declaración.Python 2 , 45 bytes
Pruébalo en línea!
El lado derecho del código se explica por sí mismo. Sin embargo, ¿qué ponemos a la izquierda de la
and
? Debido a que estamos concatenando partes de una lista de forma recursiva, necesitamos que el lado izquierdo sea verdadero sil
tiene 2 o más elementos, y una lista vacía de lo contrario.l[1:]
satisface este criterio muy bien.fuente
C # (Mono) , 81 bytes
Pruébalo en línea!
fuente
Brachylog , 10 bytes
Pruébalo en línea!
fuente
Lote, 123 bytes
fuente
APL (Dyalog) , 15 bytes
Pruébalo en línea!
fuente
05AB1E , 5 bytes
Encontré otro 5-byter, muy diferente de la solución de Erik . El valor arbitrario es el primer elemento de la lista.
Pruébalo en línea!
Explicación
Tomemos un ejemplo, para que sea más fácil de entender.
Primero obtenemos la entrada implícita, digamos que es
[1, 5, 2, 3, 5, 9, 5, 8]
.Luego, empujamos sus prefijos usando
η
-[[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]]
.Ahora, el código se asigna a través de la lista y clasifica cada prefijo usando
{
-[[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]]
.Entonces tomamos el último elemento y moverlo al principio:
[[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]]
.Por supuesto, ahora el código obtiene el último elemento de cada sublista usando
θ
-[1, 1, 2, 3, 5, 5, 5, 8]
(el primero es el valor arbitrario.fuente
CJam , 16 bytes
Pruébalo en línea!
Devuelve el primer elemento para el primero.
-2 gracias a Challenger5 .
fuente
{_,,:)\f{<$-2=}}
es dos bytes más corto.R ,
5449 bytesGracias a Giuseppe -5 bytes. No conocía esta característica de
seq()
.Pruébalo en línea!
fuente
seq(x<-scan())
es más corto por unos pocos bytes.Japt ,
1210 bytesLa matriz de salida consta del primer elemento en la matriz de entrada seguido de la secuencia deseada.
Pruébalo
Explicación
Entrada implícita de matriz
U
.Mapa encima
U
, dondeY
está el índice actual.Rebanada
U
de0
aY+1
.Orden descendiente.
Obtén el segundo elemento.
Salida implícita de la matriz resultante.
fuente
MATL ,
1910 bytes¡Gracias a Luis Mendo por reducir 9 bytes!
Pruébalo aquí .
Explicación
fuente
J, 13 bytes
Pruébalo en línea!El primer elemento es siempre 1.
Explicación
El espacio importa.
fuente
Ohm ,
108 bytes-2 bytes gracias a ETHproductions.
Pruébalo en línea!
Uh, esto es extraño, pero no sé cómo empujar un número negativo ...Realmente no sé Ohm. :PAGfuente
0 2-
parece muy extraño ...2~
?Mathematica, 45 bytes
Pruébalo en línea!
fuente
Perl 5 , 42 + 1 (-a) = 43 bytes
Pruébalo en línea!
fuente
Swift 3 , 67 bytes
Banco de pruebas.
Swift 3 , 65 bytes
Banco de pruebas.
¿Cómo ejecutar estos?
La primera es una función completa que toma la entrada como parámetro de función e imprime el resultado. Puede usarlos exactamente como se muestra en el enlace de prueba. Sin embargo, decidí agregar instrucciones, porque el segundo tipo de función se usa muy raramente y la mayoría de las personas ni siquiera saben de su existencia. Uso:
La segunda es una función anónima, como lambdas. Puede usarlo exactamente como lo haría con Python, declarando una variable
f
y llamándola:o envuélvelo entre paréntesis y llámalo directamente (
(...)(ArrayGoesHere)
):fuente
PHP, 53 bytes
toma datos de los argumentos de la línea de comandos. Salida delimitada, liderada y rastreada por semicola.
Ejecutar
-nr
o probarlo en línea .Produce una advertencia en PHP 7.1; reemplazar
a&
con""<
para arreglar.O use
for(;++$i<$argc;rsort($a),print$a[1]._)$a[]=$argv[$i];
(54 bytes)fuente
Mathematica 42 Bytes
Independientemente llegó a una respuesta muy similar a @Jenny_mathy pero 3 bytes más corta
¡Me di cuenta de que el primer máximo de ejecución solo toma 15 bytes y dos llamadas a funciones !:
Esto se puede hacer de manera concisa porque
Max
tiene los atributosFlat
yOneIdentity
eso no es cierto paraRankedMax
cual sería el reemplazo lógico. Desafortunadamente, definir atributos o modificarlos en funciones existentes ocupa demasiados bytes, por lo que el aplanamiento debe hacerse por otros medios.Todos los enésimos máximos en ejecución se pueden encontrar en 48 bytes:
fuente
Pyth, 15 bytes
FNr2hlQ@_S<QN1
Pruébelo aquí: 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 y depuración = 0
Explicación
FNr2hlQ
- Para bucle con contador 2 <= N <= longitud de la lista@_S<QN1
- Segundo elemento cuando los primeros N elementos de la lista se ordenan en orden ascendente y luego se invierten (ordenados en orden descendente)fuente
k , 13 bytes
Pruébalo en línea!
fuente
Octava, 51 bytes
- Un valor arbitrario devuelto para el primer elemento.
Pruébalo en línea!
fuente
JavaScript (ES6),
4351 bytesEditar: Se agregaron 8 bytes ya que se desea la ordenación numérica.
:(
Sin embargo, mantener este aquí, ya que es más corto, siempre que uno quiera ordenar lexicográficamente:
Ambas expresiones producen
undefined
para el primer elemento.Código de prueba
Mostrar fragmento de código
fuente
10
, por ejemplo, como.sort()
lexicográficamente por defecto (es decir, 1,10,100,11,12,13, ..., 2,20,21, ...). Debería incluir(a,b)=>a-b
o similar para ordenarlo por número.Clojure, 56 bytes
Tal vez hay una mejor manera de generar esos prefijos.
fuente