Esto está destinado a ser un código de golf fácil de tamaño de bocado.
El mex (número excluido mínimo) de una colección finita de números es el número entero no negativo más pequeño 0, 1, 2, 3, 4, ...
que no aparece en la colección. En otras palabras, es el mínimo del complemento. La operación mex es fundamental para el análisis de juegos imparciales en la teoría de juegos combinatorios .
Su objetivo es escribir un programa o función con nombre para calcular el mex utilizando la menor cantidad de bytes posible.
Entrada:
Una lista de enteros no negativos en cualquier orden. Puede contener repeticiones. Para ser más concretos, la longitud de la lista y el rango permitido de elementos estarán entre 0
e 20
inclusive.
La definición de "lista" aquí es flexible. Cualquier estructura que represente una colección de números está bien, siempre que tenga un orden fijo de elementos y permita repeticiones. No puede incluir ninguna información auxiliar, excepto su longitud.
La entrada puede tomarse como un argumento de función o mediante STDIN.
Salida
El número excluido más pequeño. Salida o imprimirlo.
Casos de prueba
[1]
0
[0]
1
[2, 0]
1
[3, 1, 0, 1, 3, 3]
2
[]
0
[1, 2, 3]
0
[5, 4, 1, 5, 4, 8, 2, 1, 5, 4, 0, 7, 7]
3
[3, 2, 1, 0]
4
[0, 0, 1, 1, 2, 2, 3]
4
[1, 0, 7, 6, 3, 11, 15, 1, 9, 2, 3, 1, 5, 2, 3, 4, 6, 8, 1, 18]
10
0
a20
, la salida correcta es 21. Voy a añadir un caso de prueba. Sí, el rango fijo definitivamente lo hace más fácil, aunque todavía se podría usarsys.maxint
o2**64
si no lo especifico.Respuestas:
Pyth , 6 bytes
Ejecución de ejemplo
Cómo funciona
fuente
range(21)
), que está ordenado. (Esto también significa que la explicación no es del todo precisa. Pyth y Python 3 son bastante nuevos para mí).-
en Pyth es en realidad un filtro: filtra el primer argumento por ausencia del segundo argumento, luego lo convierte a la forma del primer argumento (cadena, lista o conjunto).h-U22Q
así, dará la salida correcta de 21 en la entrada que contiene el rango completo permitido.CJam,
118 bytesCómo funciona:
Entrada de muestra:
Salida:
Pruébalo en línea aquí
fuente
J - 13 char
Acciones muy simples en J, y por lo tanto muy difíciles de hacer más pequeñas.
i.@21
crea una lista de 0 a 20 inclusive.-.
realiza set-resta la entrada de esta lista.0{
toma el primer elemento de lo que queda, es decir, el número más pequeño.f=:
define una función con nombre. En la REPL:Desde el lanzamiento de J806 en noviembre de 2017, existe una nueva sintaxis que nos ahorra un byte al permitirnos usar
i.@21
la antigua(i.21)
en este contexto.fuente
f=:
?i.@21-.]
ahorraría 1 byte.Golfscript 7
Una versión más golfizada de la respuesta de Peter Taylor. Wiki de la comunidad ya que no tengo el representante para comentar su publicación.
La diferencia es usar el tamaño máximo de lista conocido de la pregunta en lugar de la longitud +1 para guardar un personaje y soltar el $ irrelevante.
Pruébalo en línea
fuente
Burlesque - 9 bytes
Toma información de stdin en el formato {7 6 5 5 1 2 2 4 2 0}
Explicado:
Prueba algunos ejemplos:
{1 0 7 6 3 11 15 1 9 2 3 1 5 2 3 4 6 8 1 18} 20rzj \\ <]
{5 4 1 5 4 8 2 1 5 4 0 7 7} 20rzj \\ <]
fuente
{0 1 2}
, porque necesitarz
uno más que el número más grande. Simplemente ir directamente a20rzj\\<]
solucionar esto y ahorra un char.Bash + coreutils, 23 bytes
Esto supone una entrada como una
|
lista separada (canalización). P.ej:fuente
"(...)"
en el$1
.Ruby, 32 bytes
Define una función
f
que se llamará con una matriz.fuente
f[[0, 1]]
(donde los corchetes externos son la sintaxis de invocación y los corchetes internos definen la matriz).f=
?GolfScript (
109 bytes)Toma la entrada de stdin en el formato
[5 4 1 5 4 8 2 1 5 4 0 7 7]
.Demostración en línea
fuente
;
contarse antes de la cadena de entrada en el propio programa?Xojo, 55 bytes
fuente
Ruby, 22
Explicación
Array
deInteger
s.[0,1,2..20]
.Array
[0,1,2..20]
está ordenado, el primer elemento debe ser el mex.fuente
20
lugar de21
, porque la entrada solo puede contener 20 elementos.Haskell, 30
Esto funciona para listas de todos los tamaños y listas más allá de 20. Esto puede tener 15 bytes de longitud si se importa Data.List:
fuente
Esquema - 219
No muy competitivo Pero me gusta escribir esquema :),
Aquí está el código sin golf:
fuente
Python, 37 caracteres
fuente
range(21)
.f=lambda l,i=0:i in l and f(l,i+1)or i
es un char más larga y la solución iterativai=0;l=input()\nwhile i in l:i+=1\nprint i
es dos caracteres más larga (no almacenar la entrada hace que se tome repetidamente). Sin el20
límite, creo que estos enfoques prevalecerían.C # - 64 caracteres
No siempre esel mejor lenguaje de golf, pero es fácil de escribir y entender :)fuente
Scala, 18 bytes
l
es una lista de int.fuente
Java , 91 bytes
Pruébalo en línea!
fuente
Java 7,
6966 bytes-3 bytes gracias a @LeakyNun
Explicación:
No solo admite 0-20, sino también 0-2147483647 (que en realidad ahorra bytes).
Código de prueba:
Pruébalo aquí.
Salida:
fuente
APL (Dyalog) , 19 bytes
Pruébalo en línea!
Probablemente me estoy perdiendo algo importante aquí. Golf en progreso ...
fuente
TI-BASIC, 24 bytes
Si
Prompt X
se le da una lista en lugar de un solo número, creará automáticamente una lista con nombre a laX
que se puede accederʟX
.fuente
Prompt X:0:While not(prod(ʟX-Ans:Ans+1:End:Ans
Stax , 6 bytes
Ejecutar y depurarlo
Explicación
fuente
APL (Dyalog Classic) , 11 bytes
Pruébalo en línea!
fuente
Jalea , 7 bytes
Otro enfoque. Se puede usar en una cadena con cualquier arity, y no necesita separador de cadena ni nada.
Como se garantiza que la respuesta sea inferior a 256, esto también funciona:
Jalea , 5 bytes
Pruébalo en línea!
fuente
Powershell, 28 bytes
Script de prueba:
Salida:
Explicación:
$i
mientras la$args
matriz contiene el valor entero+$i
.+$i
.fuente
MathGolf ,
54 bytesPruébalo en línea!
Esta solución está restringida solo al rango de 0 a 20, aunque puede ampliarse fácilmente aumentando el rango inicial.
Explicación:
Alternativamente, una solución de 5 bytes para todos los números:
Pruébalo en línea!
Explicación:
fuente
Z
lugar deJ
porque era vago).Perl - 34
Aquí hay una subrutina.
Prueba con:
fuente
Java, 93
Sin golf:
fuente
-1
para caso de prueba[]
.Cobra - 50
fuente
Javascript, 74
Agradable y simple! Tenga en cuenta el bucle while vacío.
fuente
JavaScript (E6) 35
Función recursiva, parámetro de matriz en entrada y devolución de
mex
. No limitado a 20Prueba en la consola FireFox / FireBug
Salida
fuente
PHP, 38 bytes
PHP, 39 bytes
fuente