Una secuencia de Sumac comienza con dos enteros: t 1 y t 2 .
El siguiente término, t 3 , = t 1 - t 2
Más generalmente, t n = t n-2 - t n-1
La secuencia termina cuando t n <0.
Su desafío: escriba un programa o función que imprima la longitud de una secuencia de Sumac, comenzando con t 1 yt 2 .
- t 1 yt 2 son enteros dentro del rango de su idioma.
- Se aplican lagunas estándar.
Casos de prueba
t1 t2 sumac_len(t1,t2)
120 71 5
101 42 3
500 499 4
387 1 3
Bonificación de credibilidad en la calle:
3 -128 1
-314 73 2
Este es el código de golf, por lo que la respuesta más corta en bytes gana.
code-golf
sequence
arithmetic
SIGSTACKFAULT
fuente
fuente
t1
yt2
como entrada? ¿Y qué hayi
en los casos de prueba?t_1 = t_2 = 0
? ¿"Bonificación de credibilidad callejera" significa que no tenemos que manejart_1 < 0
ot_2 < 0
?Respuestas:
Casco , 8 bytes
Toma la entrada como una lista de 2 elementos. Pruébalo en línea!
Explicación
fuente
Haskell , 22 bytes
Pruébalo en línea!
Realmente desearía que hubiera una manera de emparejar patrones para un número negativo ...
Explicación
fuente
Casco ,
1211 bytesPruébalo en línea!
Toma el crédito de la calle de bonificación por lo que sea que valga la pena.
Explicación
fuente
Ruby , 29 bytes
Pruébalo en línea!
fuente
a<b=a-a=b
... ¿Cómo Ruby analiza eso ...?MATL , 13 bytes
Esto maneja entradas negativas (últimos dos casos de prueba).
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Brain-Flak ,
14290 bytesPruébalo en línea!
No muy corto Lleva la información al revés.
Explicación
fuente
05AB1E , 11 bytes
Pruébalo en línea!
Explicación
Toma entrada como
t2, t1
fuente
Mathematica, 55 bytes
Pruébalo en línea!
y ahora el enfoque aburrido habitual de @totallyhuman
Mathematica, 25 bytes
Pruébalo en línea!
fuente
#1
en#
J , 22 bytes
Cómo funciona:
Pruébalo en línea!
fuente
C (gcc) ,
322726 bytes-5 bytes gracias al abuso totalmente humano de gcc (parece funcionar también en tcc)
-1 byte gracias a PrincePolka
Pruébalo en línea!
fuente
Python 2 , 29 bytes
Pruébalo en línea!
Devuelve True en lugar de 1 .
fuente
JavaScript (ES6), 24 bytes
Devuelve verdadero en lugar de 1 .
Casos de prueba
Mostrar fragmento de código
fuente
f(b)(a-b)
guardar nada.a<0
? (1 más para ir)Pyth , 11 bytes
Esta es una función recursiva que toma dos argumentos,
G
yH
. El enlace se modifica ligeramente para llamar realmente a la función en la entrada dada.Banco de pruebas.
fuente
APL (Dyalog) , 23 bytes
Pruébalo en línea!
¿Cómo?
2∘
- con un acumulador inicial de 2,-/⍵
- si el próximo término0>
- está por debajo de 0,⍺
- devolver el acumulador. de otra manera,(⍺+1)
- aumentar el acumulador∇
- y recurse con-⍨\⌽⍵
- Los dos últimos elementos invertidos y diferenciados.fuente
Java (OpenJDK 8) , 44 bytes
Pruébalo en línea!
El iterativo más corto que encontré (50 bytes)
Pruébalo en línea!
fuente
dc , 24 bytes
Pruébalo en línea!
Explicación
fuente
Conjunto Z80, 10 bytes
Esta versión intenta hacer la versión "street cred" de la tarea. Sin embargo, para el caso de prueba sugerido donde t1 = -314, t2 = 73 este programa produce la respuesta "0", que, francamente, tiene un poco más de sentido que "2".
El programa de prueba para ZX Spectrum 48K escrito usando el ensamblador Sjasmplus se puede descargar aquí . Una instantánea compilada también está disponible .
fuente
Loop: ret c
lugar?2
resultado es realmente una cosa con mi programa.0
es una respuesta aceptable para ese caso de prueba? ¿O quiere decir que sería mejor modificar mi programa a la salida2
?Java (OpenJDK 8) ,
8575 bytesPruébalo en línea!
sin golf:
fuente
Lisp común,
5942 bytesPruébalo en línea!
fuente
Perl 6 ,
2419 bytes-5 bytes gracias a Brad Gilbert b2gills.
Pruébalo en línea!
Explicación : Todo el asunto entre paréntesis es exactamente la secuencia en cuestión (
|@_
son los primeros 2 términos (= los dos parámetros),*-*
es una función que toma dos argumentos y devuelve su diferencia, y* <0
es la condición de detención (término menor que 0) Omitimos el último término con^
después de...
). Luego forzamos el contexto numérico por el+
operador, que produce la longitud de la secuencia.fuente
{+(|@_,*-*...^0>*)}
* <0*, but why you don't need it in
0> * `...%h<a>