Entrada
Uma lista de números inteiros não negativos.
Saída
O maior número inteiro não negativo, de h
modo que pelo menos h
os números da lista sejam maiores ou iguais a h
.
Casos de teste
[0,0,0,0] -> 0
[12,312,33,12] -> 4
[1,2,3,4,5,6,7] -> 4
[22,33,1,2,4] -> 3
[1000,2,2,2] -> 2
[23,42,12,92,39,46,23,56,31,12,43,23,54,23,56,73,35,73,42,12,10,15,35,23,12,42] -> 20
Regras
Você pode escrever um programa completo ou uma função, e funções anônimas também são permitidas. Isso é código-golfe, então a menor contagem de bytes vence. As brechas padrão não são permitidas.
fundo
O índice h é uma noção usada na academia que visa capturar o impacto e a produtividade de um pesquisador. Segundo a Wikipedia, um pesquisador tem o índice h , se ele publicou h artigos científicos, cada um dos quais foi citado em outros artigos pelo menos h vezes. Portanto, esse desafio é sobre o cálculo do índice h a partir de uma lista de contagens de citações.
Atualizar
Uau, ótimas respostas o tempo todo! Aceitei a mais curta, mas se alguém vier com uma ainda mais curta, atualizarei minha escolha.
Vencedores por idioma
Aqui está uma tabela de vencedores por idioma que também tentarei manter atualizada. Incluí todas as postagens com pontuação não negativa. Corrija-me se cometi um erro aqui.
- APL : 7 bytes por @MorisZucca
- Bash + coreutils : 29 bytes por @DigitalTrauma
- C # : 103 bytes por @ LegionMammal978
- C ++ : 219 bytes por @ user9587
- CJam : 15 bytes por @nutki
- GolfScript : 13 bytes por @IlmariKaronen
- Haskell : 40 bytes por @proudhaskeller
- J : 12 bytes de @ ɐɔıʇǝɥʇuʎs
- Java : 107 bytes por @Ypnypn
- JavaScript : 48 bytes por @ edc65
- Mathematica : 38 bytes por @ kukac67
- Perl : 32 bytes por @nutki
- Pyth : 10 bytes por @isaacg
- Python : 49 bytes por @feersum
- R : 29 bytes de @MickyT
- Ruby : 41 bytes por @daniero
- Scala : 62 bytes por @ChadRetz
- SQL : 83 bytes de @MickyT
- TI-BASIC : 22 bytes de @Timtech
CJam, 15 bytes
Tradução direta da minha solução Perl.
fonte
l~$W%{W):W>},,
- 14 bytes{$W%ee::<1b}
(ee
foi adicionado 17-04-2015) e{$W%_,,.>1b}
(.
foi adicionado 2015-02-21).J (
1312)Muito semelhante à solução da randomra. Demonstração:
fonte
#\<:
vez dei.@#<
salva um personagem.Mathematica,
44424038 bytesFunção anônima:
Execute-o alinhando a entrada até o final da seguinte maneira:
fonte
#>i++
. Eu testei mais alguns casos. (E obrigado por todas as sugestões!)SQL,
819483Dada uma tabela (I) de valores (V), a seguinte consulta retornará h. Testado no PostgreSQL e também funcionará no SQL Server. Editar Faça com que ele retorne 0 em vez de NULL. Melhorou com COUNT, obrigado @nutki
Exemplo de SQLFiddle
Essencialmente, ele numera as linhas em uma ordem decrescente dos valores. Em seguida, ele retorna o número máximo de linhas em que o número da linha é maior que igual ao valor.
fonte
COUNT(R)
vez deCOALESCE(MAX(R),0)
uma correção mais curta para o problema NULL.R,
393529Dado um vetor de inteiros em ie usando a lógica de uma ordem inversa, retornando o
comprimentodo vetor em que o número do elemento é menor que s. Obrigado a @plannapus pela boa dica.fonte
s=sort(i);sum(s>=length(s):1)
CJam, 23 bytes
Isso leva a lista como uma matriz em STDIN, como
Teste aqui.
Você pode usar isso para executar todos os casos de teste:
Explicação
A lógica está um pouco para trás, mas salvou alguns bytes. Basicamente, o bloco passou para classificar retornos
0
para candidatos válidos e1
outros. Portanto, os candidatos válidos vêm em primeiro lugar na matriz classificada. E como a classificação é estável, e começamos com uma lista de N até 1, isso retornará o maior h válido.fonte
Perl 5: 32 (30 + 2 para
-pa
)Toma entrada separada por espaço no STDIN:
fonte
sort{$b-$a}
economiza mais 2Python (63)
Basicamente, uma porta direta da minha solução J. Obviamente, muito mais tempo, como se pode imaginar.
fonte
enumerate
.Haskell, 40
isso procura o primeiro número que não se enquadra no esquema e retorna seu antecessor.
fonte
until
: Experimente online!Ruby
4441Estratégia recursiva, mais ou menos a mesma da solução Python do xnor:
Ruby 52
Não recursivo:
Funções lambda / anônimas "Stabby", requerem Ruby 1.9 ou mais recente. Ligue com, por exemplo
f[[22,33,1,2,4]]
fonte
Bash + coreutils, 29
Entrada retirada do stdin como uma lista separada por nova linha.
sort
os números inteiros em ordem decrescentenl
prefixa cada linha com seu número de linha com base em 1, separando o número da linha e o restante da linha com um número maior que>
bc
. Inteiros menores que o número da linha resultam em 0. Caso contrário, 1.grep
conta o número de0
s, ou seja, o número de números inteiros maior ou igual ah
Exemplo
fonte
JavaScript (ES6) 48
Solução recursiva.
Teste no console do FireFox / FireBug
Saída
fonte
f=(l,h=0)=>l.map(v=>x+=v>h,x=0)&&x>h?f(l,h+1):h
. No entanto, sua solução também teria 47 bytes, se você mudar apenash=-1
parah=0
.Java 8, 116 bytes.
Classe completa:
Função:
fonte
APL, 12 caracteres
(+/⊢≥⍒)⊂∘⍒⌷⊢
fonte
C ++
815219 de (wc -c main.cpp)Tudo bem, aqui estão alguns dos piores códigos que eu já escrevi! :)
fonte
Gelatina, 6 bytes
Explicação:
fonte
CJam, 22 bytes
Pega a lista como entrada:
Saída:
Experimente aqui
fonte
GolfScript, 13 bytes
Teste este código online. 1
Recebe entrada como uma matriz na pilha. Usa o mesmo algoritmo da solução Python do feersum , iterando sobre os números na matriz e incrementando um contador de 0 até que seja igual ou exceda o elemento atual da matriz.
1) O servidor GolfScript on-line parece estar experimentando tempos limite aleatórios novamente. Se o programa atingir o tempo limite, tente executá-lo novamente.
fonte
TI-BASIC, 22 bytes
Representação ASCII:
Despejo hexagonal:
Obtém uma lista como entrada. A partir de Ans = 0, verifica se pelo menos Ans + 1 dos números são pelo menos Ans + 1. Nesse caso, incrementa Ans e volta novamente. Caso contrário, gera Ans.
fonte
JAGL Alpha 1.2 - 14
Não conta porque a funcionalidade de matriz reversa 'C' foi adicionada após a pergunta, mas estou respondendo por diversão de qualquer maneira.
Assume que a matriz é o primeiro item da pilha e coloca a resposta no topo da pilha.
Para imprimir, basta adicionar
P
no final, adicionando um byte.Explicação:
fonte
J,
1511 caracteres(Solução J mais curta atual.)
Compara os elementos da
<:
lista classificada\:~
com 1..n + 1#\
e conta comparações verdadeiras+/
.Teste de similaridade com outra solução J em 100 casos de teste aleatórios:
fonte
Reng v.3.2, 43 bytes
Experimente aqui!Esse código pode ser dividido em três partes: inicial, computacional e final.
Inicial
Isso armazena
1
ax
, o comprimento da pilha de entradak
paray
, e recebe todas as entradas (aïí
) que é então classificadas ('
).1ø
vai para a próxima linha, ou seja, a próxima parte.Computacional
Reng não tem embutido na desigualdade. Assim, um algoritmo deve ser implementado. O algoritmo mais curto que encontrei
a < b
é%:1,%1e
; isso é assim:Tenho certeza que esclareceu tudo! Deixe-me explicar mais.
x % 1
, ou seja, módulo com 1, mapeiax
para(-1,1)
. Sabemos que(a/b) % 1
éa/b
quandoa < b
. Assim, essa expressão é igual aa < b
.No entanto, isso não funciona tão bem devido a problemas com o módulo com zero. Portanto, incrementamos cada membro da pilha e do contador inicialmente.
Depois de colocar a desigualdade booleana na pilha, a
x+
adiciona a x, mas a deixa no momento.y1-
diminuiy
e?^
sobe sey == 0
continuarmos para a fase final. Caso contrário, nós colocamosy-1
emy
eo novox
emx
.Final
Isso retira o resíduo
y-1
da pilha, diminui o resultado, gera o resultado e termina o programa.fonte
05AB1E , 5 bytes
Experimente online! ou como um conjunto de testes
Explicação
fonte
Mathematica, 57 bytes
Esta é uma função anônima que pega uma lista e retorna um número inteiro, como
Use isso para verificar todos os casos de teste:
fonte
C #, 103
Função anônima.
Recuado:
fonte
Scala, 62
fonte