Introducción
En este desafío, su tarea es simular un cierto tipo de juego de eliminación. En el juego, los participantes se paran en círculo y todos sostienen un número entero. En cada ronda del juego, cada participante señala a la persona n
que se aleja, si n
es el número que tiene. Si n
es positivo, cuentan a su derecha, si n
es negativo, cuentan a su izquierda, y si n
es cero, se señalan a sí mismos. Cada participante que tiene a alguien que los señala se elimina y abandona el círculo; Esto termina la ronda. Las rondas continúan hasta que no quedan participantes.
Entrada
Su entrada es una lista no entera de enteros, en cualquier formato razonable. Representa los números que tienen los participantes del juego.
Salida
Su salida es la cantidad de rondas que se necesitan hasta que finaliza el juego.
Ejemplo
Considere la lista de entrada [3,1,-2,0,8]
. En la primera ronda, sucede lo siguiente:
- La persona que tiene
3
puntos justo en la persona que tiene0
. - La persona que tiene
1
puntos justo en la persona que tiene-2
. - La persona que tiene
-2
puntos dejó en la persona que tiene3
. - La persona que tiene
0
puntos en sí misma. - La persona que tiene
8
puntos justo en la persona que tiene-2
(la lista representa un círculo, por lo que se envuelve en los extremos).
Esto significa que 0
, -2
y 3
se eliminan, por lo que la segunda ronda se realiza con la lista [1,8]
. Aquí, 1
apunta 8
y 8
apunta a sí mismo, por lo que 8
se elimina. La tercera ronda se realiza con la lista [1]
, donde 1
simplemente se señala a sí misma y se elimina. Se necesitaron tres rondas para eliminar a todos los participantes, por lo que el resultado correcto es 3
.
Reglas y puntaje
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
[3] -> 1
[0,0,0] -> 1
[-2,-1,0,1,2,3,4,5,6,7] -> 2
[5,5,5,6,6,6] -> 2
[3,-7,-13,18,-10,8] -> 2
[-7,5,1,-5,-13,-10,9] -> 2
[4,20,19,16,8,-9,-14,-2,17,7,2,-2,10,0,18,-5,-5,20] -> 3
[11,2,7,-6,-15,-8,15,-12,-2,-8,-17,6,-6,-5,0,-20,-2,11,1] -> 4
[2,-12,-11,7,-16,9,15,-10,7,3,-17,18,6,6,13,0,18,10,-7,-1] -> 3
[18,-18,-16,-2,-19,1,-9,-18,2,1,6,-15,12,3,-10,8,-3,7,-4,-11,5,-15,17,17,-20,11,-13,9,15] -> 6
n
es el número que tiene la persona?Respuestas:
Pyth, 15 bytes
Test suite gracias a Kirby
Utiliza el mismo mecanismo de iteración que @orlp, pero detecta el número de iteraciones usando
f
la función "Repetir hasta falsa", para detectar[]
una vez que hayamos terminado.fuente
Matlab,
9177 bytesVersión antigua:
Este es un desafío donde matlab brilla, el corazón de este código es la eliminación de las entradas de la matriz:
a(mod((1:l)+a-1,l)+1)=[]
que es bastante elegante, creo.fuente
CJam, 21 bytes
Banco de pruebas.
Toma datos como una lista de estilos de CJam, pero el conjunto de pruebas se encarga de la conversión del formato en el desafío.
Explicación
fuente
ee
es casi exactamente lo que estaba buscando ayer para una pregunta diferente.C #,
251219211197193 bytesEl lenguaje no esotérico más irrefrenable ataca de nuevo.
Este programa espera la secuencia de entrada como argumentos de línea de comandos. Por ejemplo, para ingresar la lista
[5,5,5,6,6,6]
, llámela con argumentos de línea de comandos5 5 5 6 6 6
.Gracias a Martin Büttner por algunos consejos.
Llegó a 197 al darme cuenta de que puedo reutilizar la
args
matriz a pesar de que es una serie de cadenas. Solo necesito analizarlos en un número entero en un solo lugar.Golfó a 193 al darse cuenta de que
.Where(...==x).Any()
es más corto que.Select(...).Contains(x)
.Sin golf
fuente
Pyth, 21 bytes
Demostración en vivo con casos de prueba.
fuente
R, 105 bytes
código
sin golf
fuente
Pyth, 17 bytes
Casualmente muy similar a la respuesta de Kirbyfan.
fuente
Mathematica, 71 bytes
fuente
(i=0;#//.l:{__}:>l~Delete~Mod[++i;Plus~MapIndexed~l,Length@l,1];i)&
Plus~MapIndexed~#
es realmente inteligente, pero me pregunto si no hay una forma más corta de usarl+Range@Length@l
.STATA, 146 bytes
Utiliza la versión paga de STATA. Asume que la entrada está en un archivo separado de nueva línea llamado
a.
. Limitado a situaciones en las que no se requieren más de 1023 rondas debido a un número máximo de variables permitidas (se puede arreglar al costo de 10 bytes). Lee los datos y ejecuta un bucle hasta que no haya más observaciones. En cada iteración, haga una variable con el valor del índice al que apunta. Para cada observación, si otra observación apunta a ella, establezca un indicador para descartar la variable. Luego suelte todas las observaciones con ese indicador e incremente el contador. Después del bucle, imprima el contador.fuente
Ruby,
7874 bytesfuente
awk, 66 bytes
Simplemente se usa
mod length array
para mantenerlo dentro de la matriz. En la entrada, los números deben estar separados por espacios.Ejemplo de uso
Aquí están todos los ejemplos de entrada en el formato apropiado
fuente
Python 2, 122 bytes
fuente