Entrada
Una lista de enteros no negativos.
Salida
El número entero no negativo más grande, de h
modo que al menos uno h
de los números de la lista sea mayor o igual que h
.
Casos de prueba
[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
Reglas
Puede escribir un programa completo o una función, y también se permiten funciones anónimas. Este es el código de golf, por lo que gana la menor cantidad de bytes. Las lagunas estándar no están permitidas.
Fondo
El índice h es una noción utilizada en la academia que tiene como objetivo capturar el impacto y la productividad de un investigador. Según Wikipedia, un investigador tiene el índice h , si él o ella ha publicado h artículos científicos, cada uno de los cuales ha sido citado en otros artículos al menos h veces. Por lo tanto, este desafío se trata de calcular el índice h a partir de una lista de recuentos de citas.
Actualizar
¡Guau, excelentes respuestas en general! He aceptado el más corto, pero si a alguien más se le ocurre uno más corto, actualizaré mi elección en consecuencia.
Ganadores por idioma
Aquí hay una tabla de ganadores por idioma que también intentaré mantener actualizada. He incluido todas las publicaciones con puntaje no negativo. Corríjame si he cometido un error aquí.
- 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 por @ ɐɔıʇǝɥʇ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 por @MickyT
- Ruby : 41 bytes por @daniero
- Scala : 62 bytes por @ChadRetz
- SQL : 83 bytes por @MickyT
- TI-BASIC : 22 bytes por @Timtech
CJam, 15 bytes
Traducción directa de mi solución Perl.
fuente
l~$W%{W):W>},,
- 14 bytes{$W%ee::<1b}
(ee
se agregó el 17/04/2015) y{$W%_,,.>1b}
(.
se agregó el 21/02/2015).J (
1312)Bastante similar a la solución de randomra. Demostración:
fuente
#\<:
lugar dei.@#<
guardar un personaje.Mathematica,
44424038 bytesFunción anónima:
Ejecútelo agregando la entrada al final de la siguiente manera:
fuente
#>i++
. Probé algunos casos más. (¡Y gracias por todas las sugerencias!)SQL,
819483Dada una tabla (I) de valores (V), la siguiente consulta devolverá h. Probado en PostgreSQL y también funcionará en SQL Server. Editar Haga que devuelva 0 en lugar de NULL. Mejoró con un COUNT, gracias @nutki
Ejemplo de SQLFiddle
Esencialmente numera las filas en un tipo descendente de los valores. Luego devuelve el número máximo de fila donde el número de fila es mayor que igual al valor.
fuente
COUNT(R)
lugar deCOALESCE(MAX(R),0)
una solución más corta para el problema NULL.R,
393529Dado un vector de enteros en i y usando la lógica de una ordenación inversa, devuelve la
longituddel vector donde el número de elemento es menor que s. Gracias a @plannapus por el buen consejo.fuente
s=sort(i);sum(s>=length(s):1)
CJam, 23 bytes
Esto toma la lista como una matriz en STDIN, como
Pruébalo aquí.
Puede usar esto para ejecutar todos los casos de prueba:
Explicación
La lógica es un poco al revés, pero ahorró un par de bytes. Básicamente, el bloque pasado para ordenar retornos
0
para candidatos válidos y de1
otra manera. Por lo tanto, los candidatos válidos son los primeros en la matriz ordenada. Y debido a que el ordenamiento es estable, y comenzamos con una lista desde N hasta 1, esto devolverá la h válida más grande.fuente
Perl 5: 32 (30 + 2 para
-pa
)Toma entrada separada por espacios en STDIN:
fuente
sort{$b-$a}
ahorra 2 másPitón (63)
Básicamente un puerto directo de mi solución J. Obviamente, mucho más tiempo, como uno podría imaginar.
fuente
enumerate
.Haskell, 40
esto busca el primer número que no se ajusta al esquema y devuelve su predecesor.
fuente
until
: ¡ Pruébelo en línea!Rubí
4441Recursiva, más o menos la misma estrategia que la solución Python de xnor:
Rubí 52
No recursivo:
Las funciones lambda / anónimas "Stabby" requieren Ruby 1.9 o posterior. Llamar con eg
f[[22,33,1,2,4]]
fuente
Bash + coreutils, 29
Entrada tomada de stdin como una lista separada por nueva línea.
sort
los enteros en orden descendentenl
prefija cada línea con su número de línea basado en 1, separando el número de línea y el resto de la línea con un valor mayor que>
bc
. Los enteros menores que su número de línea dan como resultado 0. De lo contrario, 1.grep
cuenta el número de0
s, es decir, el número de enteros mayor o igual queh
Ejemplo
fuente
JavaScript (ES6) 48
Solución recursiva.
Prueba en la consola FireFox / FireBug
Salida
fuente
f=(l,h=0)=>l.map(v=>x+=v>h,x=0)&&x>h?f(l,h+1):h
. Sin embargo, su solución también sería de 47 bytes si solo cambia elh=-1
ah=0
.Java 8, 116 bytes.
Clase completa:
Función:
fuente
APL, 12 caracteres
(+/⊢≥⍒)⊂∘⍒⌷⊢
fuente
C ++
815219 de (wc -c main.cpp)Muy bien, ¡aquí está uno de los peores códigos que he escrito! :)
fuente
Jalea, 6 bytes
Explicación:
fuente
CJam, 22 bytes
Toma la lista como entrada:
Salida:
Pruébalo aquí
fuente
GolfScript, 13 bytes
Prueba este código en línea. 1
Toma la entrada como una matriz en la pila. Utiliza el mismo algoritmo que la solución Python de feersum , iterando sobre los números en la matriz e incrementando un contador desde 0 hasta que iguala o excede el elemento actual de la matriz.
1) El servidor de GolfScript en línea parece estar experimentando tiempos de espera aleatorios nuevamente. Si el programa se agota, intente volver a ejecutarlo.
fuente
TI-BASIC, 22 bytes
Representación ASCII:
Volcado hexadecimal:
Obtiene una lista como entrada. A partir de Ans = 0, verifica si al menos Ans + 1 de los números son al menos Ans + 1. Si es así, incrementa Ans y repite nuevamente. Si no, genera la respuesta
fuente
JAGL Alpha 1.2 - 14
No cuenta porque la funcionalidad de matriz inversa 'C' se agregó después de la pregunta, pero de todos modos estoy respondiendo por diversión.
Asume que la matriz es el primer elemento de la pila y coloca la respuesta en la parte superior de la pila.
Para imprimir, solo agregue
P
al final, agregando un byte.Explicación:
fuente
J,
1511 caracteres(La solución J más corta actual).
Compara elementos de
<:
lista ordenados\:~
con 1..n + 1#\
y cuenta comparaciones verdaderas+/
.Prueba de similitud con otra solución J en 100 casos de prueba aleatorios:
fuente
Reng v.3.2, 43 bytes
Pruébalo aquí! Este código se puede dividir en tres partes: inicial, computacional y final.
Inicial
Este tiendas
1
ax
, la longitud de la pila de entradak
ay
, y obtiene toda la entrada (aïí
) que se clasifica entonces ('
).1ø
va a la siguiente línea, es decir, la siguiente parte.Computacional
Reng no tiene incorporado la desigualdad. Por lo tanto, se debe implementar un algoritmo. El algoritmo más corto que encontré para
a < b
es%:1,%1e
; esto se ve así:Estoy seguro de que eso lo aclaró! Déjame explicarte más.
x % 1
, es decir, módulo con 1, se asignax
a(-1,1)
. Sabemos que(a/b) % 1
esa/b
cuandoa < b
. Por lo tanto, esta expresión es igual aa < b
.Sin embargo, esto no funciona tan bien debido a problemas con el módulo con cero. Entonces, incrementamos cada miembro de la pila y el contador inicialmente.
Después de obtener la desigualdad booleana en la pila, la
x+
agrega a x, pero la deja en la pila por el momento.y1-
decrementosy
, y?^
sube iffy == 0
y procedemos a la fase final. De lo contrario, ponemosy-1
dentroy
y lo nuevox
dentrox
.Final
Esto extrae el residuo
y-1
de la pila, disminuye el resultado, lo genera y finaliza el programa.fuente
05AB1E , 5 bytes
Pruébalo en línea! o como un conjunto de pruebas
Explicación
fuente
Mathematica, 57 bytes
Esta es una función anónima que toma una lista y devuelve un entero, como
Use esto para verificar todos los casos de prueba:
fuente
C #, 103
Función anónima.
Sangrado:
fuente
Scala, 62
fuente