Tópico dos policiais
Nesse segmento, sua tarefa é criar um programa / função baseado em recursão para gerar qualquer série inteira. Os ladrões tentarão encontrar uma solução não recursiva mais curta no segmento dos ladrões .
Sinopse do desafio
Em muitos idiomas, as funções recursivas podem simplificar significativamente uma tarefa de programação. No entanto, a sobrecarga de sintaxe para uma recursão adequada pode limitar sua usabilidade no código-golfe.
Os policiais criarão um programa ou função usando um único número inteiro n
, o que gerará as primeiras n
entradas de uma série inteira, usando apenas a recursão 1 . Eles também devem garantir que haja uma maneira não-recursiva mais curta de gerar a sequência para marcar sua entrada como segura.
Os ladrões tentarão encontrar um programa ou função mais curto no mesmo idioma, gerando a mesma série inteira, sem recursão 2 .
Se o envio dos policiais não for decifrado dentro de dez dias (240 horas), o policial provará que era de fato possível ter uma abordagem não recursiva mais curta, revelando sua própria solução. Eles podem então marcar sua submissão como segura .
O vencedor do desafio da polícia será o envio mais curto (de acordo com o código-golfe ) baseado em recursão marcado como seguro.
O vencedor do desafio dos ladrões será o ladrão que quebrou mais soluções.
1: ele só precisa ser recursivo na sintaxe; você não precisa se preocupar, por exemplo, com a otimização da chamada de cauda.
2: Novamente, não-recursivo na sintaxe; portanto, você não pode publicar uma solução recursiva e reivindicá-la compilada em um loop, graças à otimização da chamada de cauda.
Requisitos de envio
Cada envio terá um único número inteiro n
(com base em zero ou um). O envio produzirá ou retornará as primeiras n
entradas de uma série inteira de escolha. (observe que essa série inteira não deve depender n
). O método de entrada e saída pode diferir entre a abordagem recursiva e não recursiva. A série inteira pode ser qualquer série determinística com um comprimento de pelo menos 5. A série deve ser explicada corretamente.
Seu envio não precisa ser arbitrário n
, mas deve funcionar pelo menos n=5
. A abordagem não recursiva deve ser capaz de trabalhar pelo menos da mesma maneira n
que a abordagem recursiva, ou até o n=2^15-1
que for menor.
Recursão
Para esse desafio, recursão é definida como a criação da sequência desejada usando uma função (ou construção semelhante a uma função ) que se chama (ou chama uma sequência de funções que acaba se chamando; isso inclui construções como o combinador Y). A profundidade da recursão deve ir para o infinito como n
vai para o infinito. A abordagem não recursiva é algo que não é recursivo.
fonte
for
é feito por trás recursivo, éfor
recursivo ou loop?n
se for teoricamente correto, mas não pode ser executado devido a restrições de tempo ou memória?n=5
deve ser computadoxfor
esteja disponível através de algum tipo de importação?); Portanto, talvez esse idioma não possa competir.Respostas:
Python 3 , 65 bytes (Seguro)
Experimente online!
Outra tentativa em Python.
A sequência é "o número de maneiras de preencher um tabuleiro 2 por n com dominós em três cores, de modo que nenhum dominó da mesma cor se toque". Não no OEIS.
Vamos dizer
n=6
. O quadro se parece com:e essas são inclinações de dominó válidas em três cores (
1-3
representam uma cor cada):mas não são (dois dominós da mesma cor estão se tocando):
A sequência conta todas as possíveis inclinações de dominó que atendem às regras de cada uma
n
.Solução pretendida, 58 bytes
Experimente online!
Infelizmente, parece que ninguém se incomodou em simplificar a relação de recorrência, o que foi claramente mostrado no código recursivo. Criar um programa com a recorrência dupla fornecida como está não funciona, pois é o Python 3.
fonte
Oitava , 47 bytes, quebrada por l4m2
Experimente online!
Como exemplo, aqui está uma entrada de oitava que gera os primeiros
n
números inteiros positivos, https://oeis.org/A000027 .fonte
l4m2
venceu você.Python 3 , 75 bytes, quebrado pelo xnor
Experimente online!
Os famosos números de Hamming, também conhecidos por números 5 suaves ( A051037 ).
Solução rachada, 51 bytes
Experimente online!
Solução pretendida, 74 bytes
Experimente online!
fonte
Quarto (gforth) , 39 bytes, quebrado por NieDzejkob
Experimente online!
fonte
[1,2,...,n]
, você sabe disso, certo?Röda , 40 bytes
Experimente online!
Esta função fornece a seguinte sequência finita (os 90 primeiros números de Fibonacci):
Sei que pode gerar mais números de Fibonacci, mas, para fins desse desafio, é suficiente produzir esses números.
fonte
JavaScript (Node.js) , 91 bytes, Rachado por l4m2
Experimente online!
Imprime os primeiros n termos da sequência OEIS A022559 (a partir de i = 1).
l4m2 coube 3 para loops em
7472 bytes e rachou meu posto de policial:No entanto, minha resposta pretendida realmente tem apenas 2 para loops:
Experimente online!
fonte
Função x86 .COM, 12 bytes, Rachada por NieDzejkob
Entrada DX, Saída [DI] ~ [DI + 2 * DX-1]
Solução do cracker:
Solução pretendida:
fonte
Python 3 , 62 bytes, rachado por mwchase
Experimente online!
Eu sinto que este vai ser fácil demais ...
A sequência é a sequência de Fibonacci
f(n) = f(n-1) + f(n-2)
comf(0) = f(1) = 1
fonte
Gol> <> , 15 bytes, quebrado por mbomb007
Experimente online!
A série é
0,1,2,3,4,5
mas cada elemento é seguido por muitos 0s.Por exemplo, os primeiros valores são:
fonte
JavaScript, 63 bytes, Rachado
Experimente online!
Retorna os primeiros n elementos em uma matriz invertida
fonte
Windows .BAT, 80 bytes
Uso:
A versão do loop pode assumir no dicionário atual, mas precisa iniciar ou redefinir
fonte
Python, 82 bytes; rachado
Esta é uma implementação Python recursiva da sequência OEIS A004001 em 82 bytes. Mais informações sobre esta série podem ser encontradas em Mathworld da Wolfram .
Os 30 primeiros números nesta sequência são:
fonte