Considere uma sequência baseada em relações de recorrência f(n) = f(n-1)+f(n-2)
, começando com f(1) = x1, f(2) = x2
. Pois x1 = 2, x2 = 1
, a sequência começa assim:
2 1 3 4 7 11 18 29 47 76 123 199 322 521 843
Concatenar isso em uma string dará:
213471118294776123199322521843
Agora, divida esta lista nos menores números possíveis y(n) > y(n-1)
. Comece com o primeiro número, depois o segundo etc. O primeiro número de saída deve sempre ser um dígito. Coloque o último número com o número necessário de zeros.
2 13 47 111 829 4776 12319 93225 218430
Você receberá dois números, (x1, x2)
como entrada, em qualquer formato conveniente, e o desafio é gerar a lista classificada.
Regras:
- Função e programas estão OK
- A sequência inicial deve ter exatamente 15 números (o último número é
f(15)
). x1
ex2
não são negativos (é possível zero).- A saída pode estar em qualquer formato conveniente
- O vetor de saída
y
deve ser criado para quey2 > y1
.- Primeiro, o menor possível
y1
, depois o menor possívely2
,y3
e assim por diante.
- Primeiro, o menor possível
- Se,
x1 = x2 = 0
então, forneça 15 zeros (no mesmo formato de outra saída, ou seja, não000000000000000
).
Exemplos :
Input: 1 1
Output: 1 12 35 81 321 345 589 1442 3337 7610
Input: 3 2
Output: 3 25 71 219 315 0811 3121 23435 55898 145300
|
Optional leading zero
Input: 0 0
Output: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
O código mais curto em bytes vence. Por favor, inclua um link para um intérprete online, se possível.
code-golf
math
arithmetic
Stewie Griffin
fonte
fonte
5467
?54 67
?5 46 70
?Respostas:
Pitão, 56 bytes
Suíte de teste
Explicação:
Primeiro, verificamos se a entrada é precisa
0, 0
. Nesse caso, imprima 15 zeros.Caso contrário, produzimos a sequência, com
jkhM.u,eNsN14Q
. Isso é semelhante ao algoritmo Pyth padrão para a sequência de Fibonacci.Em seguida, reduzimos essa string. O acumulador é uma lista de cadeias, representando cada número na sequência dividida. Em cada etapa de redução, pegamos o próximo caractere e verificamos se o acumulador está em ordem, usando a função auxiliar
y
, definida comLsgM.:sMb2
, que é verdadeira se a entrada estiver com defeito. Se estiver em ordem, anexamos o próximo caractere à lista como seu próprio número. Caso contrário, adicionamos o próximo caractere ao final da última string. Isso é realizado comu?yGX_1GHaGH ... Y
.Em seguida, executamos um loop while funcional. O loop continua até que a lista de corrida esteja em ordem, reutilizando a função auxiliar. Em cada etapa, a
0
é adicionado ao final da última string na lista. Isso é realizado com.WyHX_1Z`0
.Finalmente, as seqüências de caracteres são convertidas em números inteiros, com
sM
e impressas.Pitão, 51 bytes
Acredito que isso funcione, mas é muito lento para testar - é uma solução de força bruta para dividir a corda.
Farei algumas melhorias na
X
função, mas o código acima funciona na versão do Pyth mais recente quando a pergunta foi publicada.fonte
JavaScript ES6, 127
135Teste
fonte
JavaScript ES6,
187180187184182179175172165160155154 bytesEu obtenho resultados semelhantes ao executá-lo
1,1
e3,2
testar casos.0,0
tomou um excesso de 26 bytes ...De-golfe + convertido em ES5 + demo:
fonte
n <= 15
.f(n) = f(n-1)+f(n-2)
tem um valor máximo de exatamente 15. O número de valores de saída é determinado com base no algoritmo, nada mais.f(1)=x1
ef(2)=x2
podem ser maiores que 15. O número de valores de saída é determinado com base nos valores de entrada. Pois3 2
será 10.JavaScript (ES6), 162 bytes
Explicação
Teste
Mostrar snippet de código
fonte
Mathematica, 192 bytes
Casos de teste:
Os comprimentos dos nomes das funções estão me matando.
fonte
Haskell,
165159152 152142141 bytesExemplo de uso:
3 % 2
->[3,25,71,219,315,811,3121,23435,55898,145300]
.Demonstração online (com um
main
invólucro).Como funciona:
fonte
PowerShell,
167166 bytesSalva um byte, eliminando a
$s
variável e alimentando diretamente o loop de saída.Ungolfed e comentou:
fonte
Perl 6 , 107 bytes
Uso:
Explicação
cria uma sequência semelhante a Fibonacci, começando com os argumentos (
@_
) escorregados (|
) empega os 15 primeiros elementos dessa sequência
combina isso em uma única string (
.join
), divide-a em uma sequência de caracteres individuais (.comb
) e armazena-a no escalar "padrão" ($_
) após coagir a sequência em uma matriz mutável, armazenando-a primeiro em uma matriz anônima (@
)encontra a soma dos valores no escalar padrão e, se for zero, retorna o escalar padrão, que conterá uma matriz de 15 zeros
se a soma não for zero, ela cria uma lista, deslocando primeiro o primeiro elemento no escalar padrão
seguido por gerar o restante dos valores, comparando-o com o anterior (
$^b
)se o escalar padrão ficar sem valores, use 0 em vez (
//0
)parando quando não há elementos restantes no escalar padrão
fonte
until (my$a...
? Não(
é um delimitador especial?until
, que não existe.