EDIT: Vou aceitar uma resposta segunda-feira, 15/02/2016. Que os bytes estejam sempre a seu favor!
No desafio "Imprima a sequência N-Bonacci" , o @DJMcGoathem descreve as seqüências N-bonacci, em que os números N anteriores são somados, em vez dos 2 tradicionais da sequência Fibonacci ( denominada "sequência duo nacci"). Ele, então, pediu para tomar duas entradas, X e N, em seguida, a saída X th N número -nacci.
Eu proponho o oposto.
Dada uma sequência, produza da qual N- nacci é um subconjunto. Eu digo "subconjunto de" porque:
- A) essas seqüências são infinitas
- B) se for dado o início da sequência, você poderá apenas contar o número de 1s iniciais
No caso de pertencer a várias seqüências N- nacci, escolha a mais baixa.
No caso de não pertencer a nenhuma sequência N-nacci , seu programa poderá fazer outra coisa senão imprimir algo que possa ser confundido com saída. Esses comportamentos incluem (mas não estão limitados a): loop infinito, erro, falha, excluir-se (* tosse * vigília * tosse *) ou criar um buraco negro (desde que esse buraco negro não produza nada que possa ser confundido com saída válida).
Para esse desafio, essas seqüências começam com 1. Isso significa que qualquer sequência N- nacci começa com N -s. Além disso, Ndeve ser um número inteiro positivo. Portanto, não -1- nacci, etc.
Casos de teste:
1,1,1 -> 1
49, 97 -> 7
55, 89, 144 -> 2
1 -> 1
6765 -> 2
12, 23, 45, 89 -> 12
100, 199 -> 100
create a black hole (as long as this black hole does not produce anything that could be mistaken for valid output).
Nossa, as espirais do buraco negro estão convergindo para a proporção áurea! Ele deve ser válido saída para uma seqüência duoacci!Respostas:
Ruby, 94
Estou surpreso com o quão longe eu fui capaz de jogar isso dentro do mesmo algoritmo! Comecei com mais de 200!
Ungolfed:
fonte
x=[1]*(s+z=a.size)
funciona exatamente?n == 1
, então nunca aumentaremos, então precisamos de uma matriz de 1, por mais longa que seja a entrada. Sen > 1
, então precisamos de pelo menosn
1 para a sequência. Então,s+a.size
cobren == 1
qualquer comprimento dea
, e cobre o início de qualquer outra sequência, para que possamos começar a adicionars
dígitos da bateria. Isso faz sentido?[1]*number
fornece uma matriz de 1's com comprimentonumber
. Assim,x=[1]*(s+z=a.size)
atribuia.size
a ez
, em seguida, atribui ax
uma matriz com o comprimento de 1s+z
.Python 2, 176 bytes
Observe que isso requer entrada neste formato:
ao invés de
Solução bastante simples, apenas para fazer as coisas rolarem. Vou trabalhar mais no golfe assim que alguém responder. Isso usa uma versão ligeiramente modificada do gerador N-Bonnaci da resposta de @ Data , portanto, adota- o. Então, para cada N-Bonnaci no intervalo da entrada, verifica se a entrada é uma subsequência dela.
fonte
f.append
paraf+=
;
necessário?Lua,
324323 bytesQuando vejo outra submissão, sinto que há algo errado com meu código ... Mas lembro que é Lua e não há todas essas funcionalidades sofisticadas: '(
Foi muito divertido, me levou algum tempo, na verdade.
Edit: Salvo 1 byte com um truque simples: usando um
::label::
+ emgoto label
vez de um loop infinito feito comwhile''
.Ungolfed e explicações
Lua não tem como definir um conjunto, subconjunto ou mesmo verificar se uma matriz / tabela contém um valor sem usar seu índice / chave. É por isso que decidi remover elementos da matriz que tomo como parâmetro. é assim que mantenho registros de quais elementos já foram computados e se foram correspondentes.
Você pode experimentar o Lua online e copiar / colar o seguinte exemplo de código para executar alguns testes. Como essa função sai quando encontra a resposta (loop infinito caso contrário), você terá que alterar o índice de
test[]
usado (não esqueça que lua é 1-indexado :)).fonte