Uma sequência Sumac começa com dois números inteiros: t 1 e t 2 .
O próximo termo, t 3 , = t 1 - t 2
De maneira mais geral, t n = t n-2 - t n-1
A sequência termina quando t n <0.
Seu desafio: escreva um programa ou função que imprima o comprimento de uma sequência Sumac, começando com t 1 e t 2 .
- t 1 e t 2 são números inteiros dentro do intervalo do seu idioma.
- Aplicam-se brechas padrão.
Casos de teste
t1 t2 sumac_len(t1,t2)
120 71 5
101 42 3
500 499 4
387 1 3
Cred de rua de bônus:
3 -128 1
-314 73 2
Isso é código-golfe, então a resposta mais curta em bytes vence.
code-golf
sequence
arithmetic
SIGSTACKFAULT
fonte
fonte
t1
et2
como entrada? E o que hái
nos casos de teste?t_1 = t_2 = 0
? "Credit street cred" significa que não precisamos lidart_1 < 0
out_2 < 0
?Respostas:
Casca , 8 bytes
Aceita entrada como uma lista de 2 elementos. Experimente online!
Explicação
fonte
Haskell , 22 bytes
Experimente online!
Eu realmente gostaria que houvesse uma maneira de combinar padrões para um número negativo ...
Explicação
fonte
Casca ,
1211 bytesExperimente online!
Toma o crédito de rua de bônus por tudo o que vale a pena.
Explicação
fonte
Ruby , 29 bytes
Experimente online!
fonte
a<b=a-a=b
... Como Ruby analisa isso ..?MATL , 13 bytes
Ele lida com entradas negativas (últimos dois casos de teste).
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Flak cerebral ,
14290 bytesExperimente online!
Não é muito curto. Leva a entrada para trás.
Explicação
fonte
05AB1E , 11 bytes
Experimente online!
Explicação
Aceita entrada como
t2, t1
fonte
Mathematica, 55 bytes
Experimente online!
e agora a abordagem chata regular de @totallyhuman
Mathematica, 25 bytes
Experimente online!
fonte
#1
para#
J , 22 bytes
Como funciona:
Experimente online!
fonte
C (gcc) ,
322726 bytes-5 bytes graças ao abuso de totallyhuman do gcc (parece funcionar também no tcc)
-1 byte graças ao PrincePolka
Experimente online!
fonte
Python 2 , 29 bytes
Experimente online!
Retorna True em vez de 1 .
fonte
JavaScript (ES6), 24 bytes
Retorna true em vez de 1 .
Casos de teste
Mostrar snippet de código
fonte
f(b)(a-b)
economizar.a<0
? (1 mais para ir)Pitão , 11 bytes
Essa é uma função recursiva que recebe dois argumentos
G
eH
. O link é ligeiramente modificado para realmente chamar a função na entrada fornecida.Suíte de teste.
fonte
APL (Dyalog) , 23 bytes
Experimente online!
Quão?
2∘
- com um acumulador inicial de 2,-/⍵
- se o próximo termo0>
- é inferior a 0,⍺
- devolva o acumulador. de outra forma,(⍺+1)
- aumentar o acumulador∇
- e recorrer com-⍨\⌽⍵
- os dois últimos itens foram revertidos e diferenciados.fonte
Java (OpenJDK 8) , 44 bytes
Experimente online!
Iterativa mais curta que encontrei (50 bytes)
Experimente online!
fonte
dc , 24 bytes
Experimente online!
Explicação
fonte
Montagem Z80, 10 bytes
Esta versão tenta executar a versão "street cred" da tarefa. No entanto, para o caso de teste sugerido em que t1 = -314, t2 = 73, este programa produz a resposta "0", que, francamente, faz um pouco mais de sentido do que "2".
O programa de teste do ZX Spectrum 48K gravado usando o montador Sjasmplus pode ser baixado aqui . Um instantâneo compilado também está disponível .
fonte
Loop: ret c
lugar?2
resultado é realmente apenas uma coisa no meu programa.0
é uma resposta aceitável para esse caso de teste? Ou você quer dizer que seria melhor modificar meu programa para produzir2
?Java (OpenJDK 8) ,
8575 bytesExperimente online!
ungolfed:
fonte
Lisp comum,
5942 bytesExperimente online!
fonte
Perl 6 ,
2419 bytes-5 bytes graças a Brad Gilbert b2gills.
Experimente online!
Explicação : A coisa toda entre parênteses é exatamente a sequência em questão (
|@_
são os 2 primeiros termos (= os dois parâmetros),*-*
é uma função que recebe dois argumentos e retorna sua diferença e* <0
é a condição de parada (termo menor que 0) Omitimos o último termo com^
após o...
). Em seguida, forçamos o contexto numérico pelo+
operador, que produz o comprimento da sequência.fonte
{+(|@_,*-*...^0>*)}
* <0*, but why you don't need it in
0> * `...%h<a>