Un día te despiertas solo para encontrarte atrapado en una serie. Intenta salir de allí, tomando un índice a la vez, pero parece que hay otras reglas:
La matriz está completamente llena de números naturales.
- Si te encuentras en un índice
n
, vas al índicearray[n]
, excepto: - Si te encuentras en un índice
n
que es un número primo,array[n]
retrocedes pasos
Ejemplo: comienza en el índice 4
, en esta matriz (el índice de inicio es 0):
array = [1,4,5,6,8,10,14,15,2,2,4,5,7];
-----------------^ you are here
Como el valor del campo en el que se encuentra es 8
, usted va al índice 8
como primer paso. El campo en el que aterrizas contiene el valor 2
. Luego vas al índice 2
como tu segundo paso. Como 2
es un número primo, retrocede 5 pasos, que es su tercer paso. Como no hay índice -3
, escapó con éxito de la matriz en un total de 3 pasos.
Tu tarea es:
Para escribir un programa o función, que acepta una matriz y un índice de inicio como parámetro, y genera la cantidad de pasos para escapar de la matriz. Si no puede escapar de la matriz (por ejemplo, [2,0,2]
con start-index 2
=> pasa constantemente del índice 2
a 0
), genera un valor falso. Puede usar indexación basada en uno o indexación basada en cero, pero especifique cuál usa.
Casos de prueba
Entrada: [2,5,6,8,1,2,3], 3
Salida: 1
Entrada: [2, 0, 2], 2
Salida: false
Entrada [14,1,2,5,1,3,51,5,12,3,4,41,15,4,12,243,51,2,14,51,12,11], 5
:;
Salida: 6
La respuesta más corta gana.
fuente
Respuestas:
Pyth, 31 bytes
Los casos de prueba
Utiliza cero para indicar un valor falso, el número de saltos de lo contrario.
fuente
Python,
161138 bytesCréditos por factorial.
Ideone it!
Cómo funciona
El teorema de Wilson se utiliza para la verificación de primos.
Detección de bucle almacenando índices vistos en una matriz (
l
) y verificando si el índice actual está dentrol
.fuente
Python, 107 bytes
Uso:
f(list, start)
ex:f([2,5,6,8,1,2,3], 3)
Devoluciones
0
para bucles (detectados cuandon > len(a)
)fuente
Matlab, 138 bytes
Este es un enfoque sencillo, que utiliza índices basados en 1 porque Matlab usa índices basados en 1 de forma predeterminada. Para contar el número de pasos, usamos un
for
ciclo que cuenta de 1 a infinito (!). En el caso de que no podamos escapar de la matriz, utilizamos un vectorv
para realizar un seguimiento de las entradas que ya visitamos. Si visitamos una entrada dos veces, sabemos que estamos atrapados en un ciclo no escapable. Para ver si estamos fuera de una matriz, usamos latry/catch
estructura, que también captura excepciones fuera de límites.fuente
05AB1E, 32 bytes
Explicación
Pruébalo en línea
fuente
JavaScript (ES6), 100
Índice base 0. Nota: esta función modifica la matriz de entrada
Menos golf
Prueba
fuente
JAVA,
229218 BytesGracias a Kevin, 11 bytes muerden el polvo.
fuente
Stack<Integer>i=new Stack<>();
se puede cambiarStack i=new Stack();
yreturn 1==2;
se puede cambiar areturn 0>1;
. Además, es posible que desee mencionar que es Java 7 en lugar de Java en general.a,b->{...}
lugar de esoObject e(int[]a,int b){...}
, es por eso que personalmente menciono Java 7 para que la gente sepa que a propósito no he usado lambdas de Java 8, pero depende de ti.CJam, 44 bytes
Espera
index array
en la pila.Pruébalo en línea!
Mi primera respuesta de CJam, por eso es tan terrible e imperativo ...
(se considera correcto bloquear después de la salida correcta impresa, que es lo que hace el programa aquí)
fuente
C, 121 bytes
La función
f
acepta la matriz, el índice de inicio (basado en 0) y el número de elementos en la matriz, ya que no hay forma de probar el final de una matriz en C (al menos no sé ninguno).Pruébalo en ideone!
Nota:
function p(n)
prueba sin
es primo o no. El crédito por esto va para @Lynn y su respuesta para ¿Es este número un primo?fuente
c
para volver a llamar a la función.JavaScript,
121132 bytesedit 1: oops, perdí el bit sobre devolver el número de pasos. La solución llegará pronto.
editar 2: fijo
fuente
Raqueta,
183156bytesProbablemente más bytes ahorrables con más golf, pero eso es todo para mí. :)
Módulo completo con conjunto de pruebas con función de limpieza:
Ejecútalo como
raco test e.rkt
Grandes felicitaciones para @cat por descubrir la
prime?
función indocumentada .fuente
Java,
163160bytesp(n)
es para pruebas principales,f(a,n)
es para la función de escape. Uso:Versión sin golf:
fuente
Perl 6 , 85 bytes
Explicación:
Esta es una secuencia perezosa de los índices recorridos de acuerdo con la regla. Si el índice finalmente excede los límites de la matriz de entrada (el
!(0 <= * < a)
condición), la secuencia es finita; de lo contrario, los índices circulan infinitamente.Esa secuencia se alimenta a la función anónima interna:
Si la secuencia se define en el índice dado por el tamaño de la matriz de entrada, debe haber entrado en un ciclo infinito, por lo que
0
se devuelve. De lo contrario,+$_
se devuelve el tamaño de la secuencia .fuente
Perl 5 , 107 + 1 (
-a
) = 108 bytesPruébalo en línea!
Lista basada en 0. Devuelve falso (en blanco) si la lista es inevitable.
fuente