Dado un conjunto entero:
- Comience desde el primer número
- Salta hacia adelante n posiciones donde n es el valor de la posición actual
- Elimine la posición actual, haciendo que la siguiente posición sea la posición actual.
- Ir al paso 2 hasta que quede un número
- Imprime ese número
Reglas
La matriz se ajusta (el siguiente número después del último número de la matriz es el primer número).
Un cero se elimina a sí mismo (obviamente).
Los números negativos no están permitidos como entrada.
Casos de prueba
[1] => 1
[1,2] => 1
[1,2,3] => 3
[1,2,2] => 1
[1,2,3,4] => 1
[6,2,3,4] => 4
[1,2,3,4,5] => 5
[0,1] => 1
[0,0,2,0,0] => 0
Ejemplo paso a paso
[1,4,2,3,5]
^ start from the first position
^ jump 1 position (value of the position)
[1, 2,3,5] remove number in that position
^ take next position of the removed number (the 'new' 'current' position)
^ jump 2 positions
[1, 2,3 ] remove number in that position
^ take next position (looping on the end of the array)
^ jump 1 position
[1, 3 ] remove number in that position
^ take next position (looping)
^ jump 3 positions (looping on the end of the array)
[ 3 ] remove number in that position
print 3
Ejemplo # 2
[4,3,2,1,6,3]
^ start from the first position
^ jump 4 positions
[4,3,2,1, 3] remove number in that position
^ take next position
^ jump 3 positions
[4,3, 1, 3] remove number in that position
^ take next position
^ jump 1 positions
[4,3, 1 ] remove number in that position
^ take next position
^ jump 4 positions
[4, 1 ] remove number in that position
^ take next position
^ jump 1 position
[ 1 ] remove number in that position
print 1
Este es el código de golf , ¡la respuesta más corta en bytes gana!
code-golf
array-manipulation
flujo de trabajo
fuente
fuente
Respuestas:
Casco , 7 bytes
Esto devuelve el resultado como una lista singleton
Pruébalo en línea!
Explicación
fuente
Haskell ,
545048 bytesPruébalo en línea!
Explicación:
f[x]=x
: Si la lista dada es una lista singleton, devuelve su elemento.f(x:r)=f$ ...
: De lo contrario, se aplica recursivamentef
a la siguiente lista:cycle$x:r
),x+1
elementos eliminados (drop(x+1)$
),r
. (snd<$>zip r
es una alternativa más corta atake(length r)
).Versión anterior de 54 bytes:
Pruébalo en línea!
fuente
Rubí , 37 bytes
Modifica la matriz en el lugar, que parece ser aceptable como salida. Pruébalo en línea!
fuente
MATL , 21 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Python 3 ,
5451 bytesLa salida es una lista singleton.
Pruébalo en línea!
fuente
CJam , 15 bytes
Pruébalo en línea!
Explicación
En lugar de hacer un seguimiento de un puntero, simplemente cambio la matriz cíclicamente para que el elemento actual esté siempre al frente.
Una alternativa divertida que desafortunadamente no guarda ningún byte:
fuente
Brain-Flak , 88 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 , 55 bytes
Pruébalo en línea!
Salidas como una lista singleton, según lo permitido por defecto . Ahorré algunos bytes gracias a Dennis , recordándome que está permitido modificar el argumento de la función.
Cómo funciona
def f(a)
- Define una función con un parámetroa
.while a[1:]:
- Si biena
el primer elemento eliminado es verdadero, ejecuta el bloque de código que sigue. Una lista con un elemento o más es verdadera, y las listas vacías son falsas en Python, por lo tanto, esto se detendrá una vez quea
alcance una longitud de 1.l=a[0]%len(a)
- Tome el primer elemento y obtenga el resto de su división por la longitud dea
. Asignar el resultado al
.a[:]=a[-~l:]+a[:l]
- Girea
a la izquierda porl
elementos y elimine el primero, mientras asigna esto a sua
lugar.Python 2 , 63 bytes
Pruébalo en línea!
Aunque más largo, esto parece mucho más elegante. También gracias a ovs por ayudar en el chat.
fuente
a,*b=input()
(python3) y guardar algunos bytes? Sin embargo, no estoy seguro de cómo afectaría esol
y el corteJalea , 7 bytes
Pruébalo en línea!
Programa completo
fuente
ḷ/
es muy inteligente.Jalea , 9 bytes
Pruébalo en línea!
-2 bytes gracias al usuario202729
Explicación
fuente
Python 3 , 60 bytes
Pruébalo en línea!
-3 bytes gracias a los ovs
fuente
APL (Dyalog) ,
2018 bytesPruébalo en línea!
fuente
Mathematica, 36 bytes
usa el algoritmo de Martin
-5 bytes de Misha Lavrov && Martin Ender
Pruébalo en línea!
fuente
#//.{x_,y__}:>Rest@RotateLeft[{x,y},x]&
. (Esto se detiene cuando solo hay un elemento porque{a}
ya no coincide con el patrón{x_,y__}
).y
, llamar a la lista completal
y luego usar enl
lugar de{x,y}
.#//.l:{x_,__}:>Rest@RotateLeft[l,x]&
?J ,
2117 bytes-4 bytes gracias a FrownyFrog
Pruébalo en línea!
Original:
([:}.{.|.])^:(1<#)^:_
Cómo funciona:
^:_
repita hasta que el resultado deje de cambiar^:(1<#)
si la longitud de la lista es mayor que 1{.|.]
rotar la lista a la izquierda su primer elemento veces[:}.
suelte el primer elemento y tape el tenedorPruébalo en línea!
fuente
JavaScript (ES6),
5460 bytesGuardado 1 byte gracias a la versión fija @Shaggy
(+6 bytes)
Modifica la matriz de entrada , que se reduce a un singleton.
Casos de prueba
Mostrar fragmento de código
¿Cómo?
Aplicamos recursivamente el algoritmo descrito en el desafío. Solo la condición de parada
1/a
puede parecer un poco extraña. Al aplicar un operador aritmético:NaN
y1/NaN
también sonNaN
falsas.1/0 = +Infinity
o1/N = positive float
para N> 0 (ambos verdaderos).fuente
splice
modifica la matriz original, podría hacerlof=(a,p=0)=>1/a||f(a,p=p+a[p]%a.length,a.splice(p,1))
por 52 bytesf=(a,p=0)=>1/a?a:f(a,p=(p%a.length+a[p%a.length])%a.length,a.splice(p,1))
está bien, pero puede optimizarsep+a[p]
podrían eliminarse. Lo cual, por supuesto, no es el caso. ¡Gracias por informar esto!Julia 0.6 ,
4642 bytesPruébalo en línea!
Directa versión recursiva de Julia.
x[]
accede al primer elemento de x.fuente
Java 8, 79 bytes
Esta lambda acepta a
Stack<Integer>
y devuelve unint
oInteger
.Pruébalo en línea
Sin golf
Expresiones de gratitud
fuente
i%=s
puede ser eliminado si esl.get(i)
cambiado porl.get(i%s)
Pyth , 9 bytes
Pruébalo aquí!
Esto genera el resultado como una lista singleton, según lo permitido por defecto .
Cómo funciona
Nota: Si no desea ver esos corchetes, simplemente agregue
h
oe
delante del código completo.fuente
Rápido , 87 bytes
Regresa como una lista unitaria mediante la modificación de la entrada . Pruébalo en línea!
Explicación
fuente
Perl 6 ,
4645 bytes(-1 byte gracias a Brad Gilbert)
Pruébalo en línea!
($_, { ... } ... 1)
genera una secuencia de listas, comenzando con la lista de entrada$_
, cada elemento sucesivo generado por la expresión de llaves, y terminando cuando la lista coincide de forma inteligente1
--es decir, tiene una longitud de 1. El seguimiento[* - 1]
obtiene el elemento final, y el final[0]
saca el único elemento de esa lista singleton.(|$_ xx *)
genera una copia plana, infinitamente replicada del elemento actual. Esta lista está indexada con el rango.[0] + (1 ..^ $_)
para extraer la siguiente lista finita de la serie.fuente
[*-1][0]
se puede combinar para[*-1;0]
guardar un byte. También1..$_-1
está mejor escrito como1..^$_
guardar de nuevo un byte.[*-1;0]
, pero parece no ser equivalente de alguna manera. La función luego devuelve una lista en lugar de un número.1..^$_
optimizaciónPerl 5 ,
474341 + 2 (-ap
) = 43 bytesPruébalo en línea!
Toma datos como números separados por espacios.
fuente
$x%=@F,splice@F,$x=($x+$F[$x])%@F,1while$#F;$_="@F"
Haskell , 56 bytes
Pruébalo en línea!
fuente
Python 3 ,
5756 bytesPruébalo en línea!
fuente
Java 8 , 325 bytes
Golfizado:
Sin golf:
fuente
static
palabras clave aquí. Por lo general, las soluciones de métodos múltiples se implementan como miembros no estáticos de una clase ymain
crean una instancia para la prueba. Además, si lo hace de esa manera, admite Java 7 y puede enviarlo simplemente como una solución "Java". Para referencia futura, el formato de entrada tiende a ser bastante flexible aquí, por lo que, por ejemplo, puede optar por tomar la entrada como aList
(lo cual es bastante útil para este problema).APL + WIN, 36 bytes
Explicación:
Solicita entrada de pantalla.
fuente
Python 2, 61 bytes
fuente
JavaScript,
585659 bytesDevuelve el resultado como el único elemento que queda en la matriz de entrada que se actualiza en su lugar.
¡Dos bytes guardados usando una declaración separada por comas en lugar de una declaración de bloque en el cuerpo del bucle for! Tres bytes perdidos para saltar de un elemento eliminado al final de la matriz (:
Menos golfizado:
fuente
[3, 5, 7, 9]
.[3,5,7,9]
. Valor esperado 5Brain-Flak , 104 bytes
H.PWiz tiene una respuesta más corta aquí que ayudé a hacer, deberías verificarla.
Pruébalo en línea!
Explicación
fuente
Limpio , 78 bytes
Utiliza el mismo método que la respuesta Haskell de Laikoni .
Pruébalo en línea!
fuente
R , 111
117126bytesGracias a @Giuseppe por jugar 11 bytes al cambiar a un ciclo while, obtuve otros 4 al eliminar la función y leer la entrada del usuario directamente.
No me siento bien con lo que se necesitó para llegar allí; estoy seguro de que existe una solución más elegante.
Pruébalo en línea!
Código sin golf
fuente
f=
debe incluirsewhile
bucle, creo.while
buclef=
parte de la función recursiva. :(