Dada uma lista não vazia de números inteiros decimais positivos, imprima o maior número do conjunto de números com o menor número de dígitos.
A lista de entrada não estará em nenhuma ordem específica e pode conter valores repetidos.
Exemplos:
[1] -> 1
[9] -> 9
[1729] -> 1729
[1, 1] -> 1
[34, 3] -> 3
[38, 39] -> 39
[409, 12, 13] -> 13
[11, 11, 11, 1] -> 1
[11, 11, 11, 11] -> 11
[78, 99, 620, 1] -> 1
[78, 99, 620, 10] -> 99
[78, 99, 620, 100] -> 99
[1, 5, 9, 12, 63, 102] -> 9
[3451, 29820, 2983, 1223, 1337] -> 3451
[738, 2383, 281, 938, 212, 1010] -> 938
O código mais curto em bytes vence.
code-golf
number
arithmetic
Passatempos de Calvin
fonte
fonte
Respostas:
Pitão,
736 bytesSuíte de teste
Explicação:
Solução de 7 bytes:
Suíte de teste
Explicação:
fonte
Python 2,
4842 bytes-6 bytes graças a @Dennis (use em
min
vez desorted
)Todos os casos de teste estão em ideone
Pegue o mínimo da lista em (comprimento, valor)
fonte
min
deve funcionar em vez desorted
.sorted()[0]
pormin
? Considero que uma modificação trivial do seu código original.len(`x`)+1./x
o mesmo comprimento. Pena que você precisa do1.
.Geléia , 7 bytes
Teste-o em TryItOnline
Ou veja todos os casos de teste também em TryItOnline
Quão?
fonte
05AB1E , 5 bytes
Código:
Explicação:
Usa a codificação CP-1252 . Experimente online!
fonte
Ruby, 34 bytes
Veja-o em eval.in: https://eval.in/643153
fonte
MATL , 14 bytes
Experimente online!
Explicação:
fonte
Retina ,
2416 bytesExperimente online! ou execute todos os casos de teste .
Economizou 8 bytes graças a Martin!
O teste all está usando uma versão um pouco mais antiga do código, mas o algoritmo é idêntico. Vou atualizá-lo para ficar mais próximo quando tiver mais tempo.
A nova linha à direita é significativa. Classifica os números pelo valor numérico reverso e depois os classifica pelo número de dígitos. Isso nos deixa com o maior número com o menor número de dígitos na primeira posição, para que possamos excluir os dígitos restantes.
fonte
G1`
-lo no último estágio.#
. Você se preocupa apenas com a ordem relativa de um determinado comprimento inteiro e, em um comprimento, a classificação lexicográfica de números está correta.\w+
como o padrão para a classificação, dessa forma eu não teria necessidade de luta tanto para fazer os conjuntos de testes;)Mathematica,
3331 bytesMinimalBy seleciona todos os elementos da lista de entrada original com a menor pontuação de acordo com
IntegerLength
, ou seja, com o menor número de dígitos; e então Max produz o maior.Obrigado a Martin Ender por encontrar e salvar 2 bytes para mim :)
fonte
Perl 6 , 18 bytes
Explicação:
Uso:
fonte
Gelatina , 8 bytes
Experimente online! ou Verifique todos os casos de teste.
Explicação
fonte
JavaScript (ES6), 51
Teste
fonte
J,
2114 bytesEconomizou 7 bytes graças a milhas e (indiretamente) Jonathan!
Esta é uma cadeia de quatro:
Vamos passar por cima da entrada
10 27 232 1000
. O garfo interno consiste em três dentes.#@":"0
calcula os tamanhos,,.
concata cada tamanho com seu-
membro negado ( ). Para entrada10 27 232 1000
, ficamos com isso:Agora, temos
{.@/:
como dente externo. Isso é monádico primeiro ({.
) sobre tipo diádico (/:
). Ou seja, pegaremos o primeiro elemento do resultado da diádica/:
. Isso classifica o argumento correto de acordo com o argumento esquerdo, o que nos fornece como entrada:Então, usar
{.
nos fornece o primeiro elemento dessa lista e estamos prontos:Versão antiga
Ainda trabalhando em melhorias. Joguei a partir dos 30, e acho que isso é bom o suficiente. Vou primeiro dividi-lo em partes básicas:
Veja como isso funciona.
Este é um trem monádico, mas esta parte é um gancho. O verbo
>./@(#~ ] = <./@])
é chamado com argumento esquerdo como a entrada para a cadeia principal e os tamanhos, definidos como#@":"0
, como argumento correto. Isso é calculado como comprimento (#
) sobre (@
) formato padrão (":
), ou seja, stringificação numérica, que é aplicada às células 0 (ou seja, membros) da entrada ("0
).Vamos examinar o exemplo de entrada
409 12 13
.Agora, o verbo interior
>./@(#~ ] = <./@])
. Parece>./@(...)
, o que efetivamente significa o valor máximo (>./
) de (@
) o que está dentro(...)
. Quanto ao interior, este é um trem de quatro, equivalente a este de cinco trens:[
refere-se ao argumento original e]
refere-se à matriz de tamanho;409 12 13
e3 2 2
respectivamente neste exemplo. O dente certo,,<./@]
calcula o tamanho mínimo,2
neste caso.] = <./@]
é uma matriz booleana de valores igual ao mínimo,0 1 1
neste caso. Por fim,[ #~ ...
recebe valores do argumento esquerdo de acordo com a máscara do argumento direito. Isso significa que os elementos correspondentes0
são eliminados e1
retidos. Então ficamos com12 13
. Finalmente, de acordo com o exposto acima, o máximo é obtido, fornecendo o resultado correto de13
e pronto.fonte
>./@#~[:(=<./)#@":"0
. Acho que pode ser um pouco mais para salvar{.@/:#@":"0,.-
mas a entrada deverá ser modelada como uma lista400 12 13
?JavaScript (ES6), 62 bytes
fonte
dc, 54 bytes
Explicação:
Exemplo de execução: 'input.txt' contém todos os casos de teste na declaração da pergunta
Saída:
fonte
Java 7,
112104 bytesAbordagem diferente para salvar vários bytes graças ao @ Barteks2x .
Casos não testados e de teste:
Experimente aqui.
Saída:
fonte
bash, awk, classifique 53 bytes
Ler entrada de stdin, um valor por linha
bash e classificação,
5857 bytesfonte
while
e((
.JavaScript ES6,
807770 bytesEspero estar indo na direção certa ...
fonte
a.map(i=>i.length).sort((a,b)=>a-b)[0]
porMath.min(...a.map(i=>i.length))
?Math.max
:a=>(m=Math.max)(...a.filter(l=>l.length==-m(...a.map(i=>-i.length))))
Parece economizar apenas 1 byte.filter
pode ser substituído por ummap
que retorne0
para valores que não passam no teste:a=>(m=Math.max)(...a.map(l=>l.length+m(...a.map(i=>-i.length))?0:l))
Braquilog , 16 bytes
Experimente online!
Explicação
fonte
Haskell, 39 bytes
fonte
34
a2
.Javascript (ES6),
575453 bytesPara o registro, minha versão anterior era mais orientada para matemática, mas 1 byte maior:
Casos de teste
fonte
MATL , 11 bytes
Entrada é um vetor de coluna (usando
;
como separador), comoExperimente online! Ou verifique todos os casos de teste .
Explicação
Vamos usar a entrada
[78; 99; 620; 100]
como um exemplo.fonte
Perl,
3837 bytesInclui +1 para
-a
Dê entrada no STDIN:
maxmin.pl
:Usa memória linear no maior número, portanto, não tente isso em números muito grandes. Uma solução sem essa falha é de 38 bytes:
Tudo isso é muito estranho e nem parece ótimo ...
fonte
R,
724136 bytesReescreva a função com uma nova abordagem. Jogou 5 bytes com uma sugestão de @bouncyball.
Explicado:
Recuado / explicado:
fonte
function
:i=scan();n=nchar(i);max(i[n==min(n)])
n=nchar(i<-scan())
.Bash + coreutils, 58 bytes
O formato de entrada é um valor por linha. Sugestões de golfe são bem-vindas.
Explicação:
fonte
sed q
=head -1
Python 2 - 41 bytes
fonte
Python 2, 58 bytes
fonte
Python 3, 56 bytes
Usa um lambda em um lambda!
Python 2, 53 bytes
O mesmo, mas com retalhos
fonte
Pip , 11 bytes
Recebe a entrada como argumentos da linha de comando. Experimente online!
Primeira vez em que utiliza o operador com
S
orifícioK
! Como o Pythonsorted()
, é necessária uma função que é aplicada a cada item do iterável e o resultado usado como uma chave de classificação. Veja como este programa funciona:fonte
Clojure, 63 bytes
como em:
Embora eu tenha certeza de que há uma maneira de torná-lo menor.
fonte
PHP, 86 bytes
fonte