Um dia você acorda apenas para se ver preso em uma série. Você tenta sair de lá, pegando um índice de cada vez, mas parece que existem outras regras:
A matriz é completamente preenchida com números naturais.
- Se você se encontrar em um índice
n
, você acessa o índicearray[n]
, exceto: - Se você se encontrar em um índice
n
que é um número primo, vocêarray[n]
recua
Exemplo: você inicia no índice 4
, nesta matriz (o índice inicial é 0):
array = [1,4,5,6,8,10,14,15,2,2,4,5,7];
-----------------^ you are here
Como o valor do campo em que você está é 8
, você vai para o índice 8
como a primeira etapa. O campo em que você pousa contém o valor 2
. Você então vai para o índice 2
como seu segundo passo. Como 2
é um número primo, você recua 5 passos, que é seu terceiro passo. Como não há índice -3
, você escapou da matriz com sucesso em um total de 3 etapas.
Sua tarefa é:
Para escrever um programa ou função, que aceita uma matriz e um índice inicial como parâmetro, e gera a quantidade de etapas para escapar da matriz. Se você não conseguir escapar da matriz (por exemplo, [2,0,2]
com start-index 2
=> você passa constantemente do índice 2
para 0
), insira um valor falso. Você pode usar a indexação com base em um ou a indexação com base em zero, mas especifique qual você usa.
Casos de teste
Entrada: [2,5,6,8,1,2,3], 3
Saída: 1
Entrada: [2, 0, 2], 2
Saída: 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
;
Saída: 6
A resposta mais curta vence.
fonte
Respostas:
Pyth, 31 bytes
Os casos de teste
Ele usa zero para indicar um valor falso, o número de saltos caso contrário.
fonte
Python,
161138 bytesCréditos para fatorial.
Ideone it!
Como funciona
O teorema de Wilson é usado para verificação primária.
Detecção de ciclo através do armazenamento de índices visto para uma matriz (
l
) e verificando se o índice corrente é eml
.fonte
Python, 107 bytes
Uso:
f(list, start)
ex:f([2,5,6,8,1,2,3], 3)
Retorna
0
para loops (detectados quandon > len(a)
)fonte
Matlab, 138 bytes
Essa é uma abordagem direta, usando índices baseados em 1 porque o Matlab usa índices baseados em 1 por padrão. Para contar o número de etapas, usamos um
for
loop contando de 1 a infinito (!). Para o caso em que não podemos escapar da matriz, usamos um vetorv
para acompanhar quais entradas já visitamos. Se visitarmos uma entrada duas vezes, sabemos que estamos presos a um ciclo inevitável. Para verificar se estamos fora de uma matriz, usamos atry/catch
estrutura, que também captura exceções fora dos limites.fonte
05AB1E, 32 bytes
Explicação
Experimente online
fonte
JavaScript (ES6), 100
Índice base 0. Nota: esta função modifica a matriz de entrada
Menos golfe
Teste
fonte
JAVA,
229218 bytesGraças a Kevin, 11 bytes morde o pó.
fonte
Stack<Integer>i=new Stack<>();
podem ser alteradas paraStack i=new Stack();
ereturn 1==2;
podem ser alteradas parareturn 0>1;
. Além disso, você pode mencionar o Java 7 em vez do Java em geral.a,b->{...}
vez deObject e(int[]a,int b){...}
, é por isso que mencionei pessoalmente o Java 7 para informar às pessoas que propositalmente não usei o Java 8 lambdas, mas depende de você.CJam, 44 bytes
Espera
index array
na pilha.Experimente online!
Minha primeira resposta CJam, por isso é tão terrível e imperativa ...
(é considerado bom travar após a saída correta impressa, que é o que o programa faz aqui)
fonte
C, 121 bytes
A função
f
aceita matriz, índice inicial (baseado em 0) e número de elementos na matriz, já que não há como testar o final de uma matriz em C (pelo menos eu não conheço nenhum).Experimente em ideone!
Nota:
function p(n)
testa sen
é primo ou não. O crédito é atribuído a @Lynn e sua resposta para Este número é primo?fonte
c
para chamar a função novamente.JavaScript,
121132 bytesedit 1: oops, não entendi o retorno do número de etapas. correção em breve.
editar 2: fixo
fonte
Raquete,
183156 bytesProvavelmente mais bytes economizáveis com mais golfe, mas é isso para mim. :)
Módulo completo com suíte de testes com função de limpeza:
Execute como
raco test e.rkt
Muitos elogios para o @cat descobrindo a
prime?
função não documentada .fonte
Java,
163160 bytesp(n)
é para teste principal,f(a,n)
é para a função de escape. Uso:Versão não destruída:
fonte
Perl 6 , 85 bytes
Explicação:
Esta é uma sequência lenta dos índices percorridos de acordo com a regra. Se o índice eventualmente exceder os limites da matriz de entrada (o
!(0 <= * < a)
condição), a sequência será finita; caso contrário, os índices mudam infinitamente.Essa sequência é alimentada para a função anônima interna:
Se a sequência é definida no índice fornecido pelo tamanho da matriz de entrada, ela deve ter entrado em um ciclo infinito e, portanto,
0
é retornada. Caso contrário, o tamanho da sequência+$_
é retornado.fonte
Perl 5 , 107 + 1 (
-a
) = 108 bytesExperimente online!
Lista baseada em 0. Retorna false (em branco) se a lista for inevitável.
fonte