Dada uma lista de números inteiros, sua tarefa é gerar o segundo maior valor nos primeiros k elementos, para cada k entre 2 e o comprimento da lista de entrada.
Em outras palavras, imprima o segundo maior valor para cada prefixo da entrada.
Você pode gerar um valor arbitrário para o primeiro elemento (onde k = 1) ou simplesmente omitir esse valor, pois não há um segundo máximo para uma lista de 1 elemento. Você pode assumir que há pelo menos 2 elementos na entrada.
O menor código vence.
Exemplos
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
fonte
fonte
k
determinado?1
estritamente falando, não é o segundo maior valor de1,1
(segundo exemplo); é o segundo valor quando classificado em ordem decrescente.-1, 0, 0, 1, 1, 2
para o último caso de teste.)Respostas:
05AB1E , 5 bytes
Experimente online!
Retorna
[]
(valor arbitrário) para o primeiro.fonte
η¦ε{¨θ
deve funcionar para 6 bytesZ©KZ®‚¹sÃ
era o que eu estava pensando, nem sabia queà
era uma coisa!Áθ
vez disso.Casca ,
97 bytesSalvo um ou dois bytes graças a @Zgarb
Retorna
0
para o primeiro "segundo máximo"Explicação
Experimente online!
fonte
→hO
e salvar um byte.Python 2 , 54 bytes
Experimente online!
fonte
JavaScript (ES6),
585150 bytesGuardado 1 byte graças a @Neil
Anexa
undefined
para k = 1 .Casos de teste
Nota: este fragmento utiliza
JSON.stringify()
para facilitar a leitura, que - como efeito colateral - converteundefined
emnull
.Mostrar snippet de código
fonte
a=>a.map(e=>(b=[e,...b]).sort((a,b)=>b-a)[1],b=[])
tem apenas 50 anosPitão , 8 bytes
Experimente online! ou Experimente o Conjunto de Testes!
Quão?
Isso gera o primeiro elemento da lista como o primeiro valor da lista, conforme a especificação Você pode gerar um valor arbitrário para o primeiro elemento .
fonte
Gelatina , 8 bytes
Experimente online!
O primeiro valor será 0, sempre, e os seguintes números serão os segundos máximos de cada prefixo.
Explicação
fonte
Java (OpenJDK 8) ,
8786 bytesExperimente online!
fonte
int x,y=x=
. Eu não sabia que uma declaração e atribuição separadas poderiam ser feitas na mesma declaração.Python 2 , 45 bytes
Experimente online!
O lado direito do código é auto-explicativo. No entanto, o que colocamos à esquerda do
and
? Como estamos concatenando partes de uma lista recursivamente, precisamos que o lado esquerdo seja verdadeiro sel
tiver 2 ou mais elementos e, caso contrário, uma lista vazia.l[1:]
satisfaz bem esse critério.fonte
C # (Mono) , 81 bytes
Experimente online!
fonte
Braquilog , 10 bytes
Experimente online!
fonte
Lote, 123 bytes
fonte
APL (Dyalog) , 15 bytes
Experimente online!
fonte
05AB1E , 5 bytes
Encontrei outro 5-byter, muito diferente da solução de Erik . O valor arbitrário é o primeiro elemento da lista.
Experimente online!
Explicação
Vamos dar um exemplo, para facilitar a compreensão.
Primeiro obtemos a entrada implícita, digamos que seja
[1, 5, 2, 3, 5, 9, 5, 8]
.Em seguida, pressionamos seus prefixos 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]]
.Agora, o código mapeia a lista e classifica cada prefixo 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]]
.Em seguida, tomar o último elemento e movê-lo para o início:
[[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]]
.Obviamente, agora o código obtém o último elemento de cada sub-lista usando
θ
-[1, 1, 2, 3, 5, 5, 5, 8]
(o primeiro é o valor arbitrário.fonte
CJam , 16 bytes
Experimente online!
Retorna o primeiro elemento para o primeiro.
-2 graças a Challenger5 .
fonte
{_,,:)\f{<$-2=}}
é dois bytes mais curto.R ,
5449 bytesGraças a Giuseppe -5 bytes. Eu não conhecia esse recurso
seq()
.Experimente online!
fonte
seq(x<-scan())
é mais curto em alguns bytes.Japonês ,
1210 bytesA matriz de saída consiste no primeiro elemento na matriz de entrada seguido pela sequência desejada.
Teste-o
Explicação
Entrada implícita da matriz
U
.Mapa sobre
U
, ondeY
está o índice atual.Fatia
U
de0
paraY+1
.Classificar em ordem decrescente.
Obtenha o segundo elemento.
Saída implícita da matriz resultante.
fonte
MATL ,
1910 bytesAgradecimentos a Luis Mendo por remover 9 bytes!
Experimente aqui .
Explicação
fonte
J, 13 bytes
Experimente online!O primeiro elemento é sempre 1.
Explicação
O espaço é importante.
fonte
Ohm ,
108 bytes-2 bytes graças a ETHproductions.
Experimente online!
Isso é estranho, mas eu não sei mais como enviar um número negativo ...Eu realmente não sei Ohm. : Pfonte
0 2-
parece muito estranho ...2~
?Mathematica, 45 bytes
Experimente online!
fonte
Perl 5 , 42 + 1 (-a) = 43 bytes
Experimente online!
fonte
Swift 3 , 67 bytes
Suíte de teste.
Swift 3 , 65 bytes
Suíte de teste.
Como executá-los?
A primeira é uma função completa que recebe a entrada como parâmetro de função e imprime o resultado. Você pode usá-los exatamente como mostrado no link de teste. Decidi adicionar instruções, porque o segundo tipo de função é usado muito raramente e a maioria das pessoas nem sabe de sua existência. Uso:
A segunda é uma função anônima, como lambdas. Você pode usá-lo exatamente como faria em Python, declarando uma variável
f
e chamando-a:ou coloque-o entre colchetes e chame-o diretamente (
(...)(ArrayGoesHere)
):fonte
PHP, 53 bytes
recebe entrada dos argumentos da linha de comando. Saída delimitada, liderada e seguida por semicola.
Corra com
-nr
ou experimente online .Emite um aviso no PHP 7.1; substitua
a&
por""<
para corrigir.Ou use
for(;++$i<$argc;rsort($a),print$a[1]._)$a[]=$argv[$i];
(54 bytes)fonte
Mathematica 42 Bytes
Chegou independentemente a uma resposta muito semelhante a @Jenny_mathy, mas 3 bytes mais curto
Percebeu que o primeiro máximo em execução leva apenas 15 bytes e duas chamadas de função !:
Isso pode ser feito de forma concisa, porque
Max
tem os atributosFlat
eOneIdentity
mas isso não é verdade paraRankedMax
o que seria o substituto lógico. Infelizmente, definir atributos ou modificá-los em funções existentes ocupa muitos bytes, portanto, o nivelamento deve ser feito por outros meios.Todos os enésimos enésimos máximos em execução podem ser encontrados em 48 bytes:
fonte
Pitão, 15 bytes
FNr2hlQ@_S<QN1
Experimente aqui: 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
Explicação
FNr2hlQ
- Loop for com contador 2 <= N <= comprimento da lista@_S<QN1
- 2º elemento quando os primeiros N elementos da lista são classificados em ordem crescente e depois revertidos (classificados em ordem decrescente)fonte
k , 13 bytes
Experimente online!
fonte
Oitava, 51 bytes
- Um valor arbitrário retornado para o primeiro elemento.
Experimente online!
fonte
JavaScript (ES6),
4351 bytesEdit: Adicionado 8 bytes desde que a classificação numérica é desejada.
:(
Manter este aqui, porém, como é mais curto, desde que se queira uma ordem lexicográfica:
Ambas as expressões produzem
undefined
para o primeiro elemento.Código de teste
Mostrar snippet de código
fonte
10
, como.sort()
padrão lexicograficamente (por exemplo, 1,10.100,11,12,13, ..., 2,20,21, ...). Você precisaria incluir(a,b)=>a-b
ou semelhante para classificá-lo por número.Clojure, 56 bytes
Talvez haja uma maneira melhor de gerar esses prefixos.
fonte