Historia de fondo
Descargo de responsabilidad: puede contener información inventada sobre canguros.
Los canguros atraviesan varias etapas de desarrollo. A medida que crecen y se fortalecen, pueden saltar más alto y más, y pueden saltar más veces antes de tener hambre.
En la etapa 1 , el canguro es muy pequeño y no puede saltar en absoluto. A pesar de esto, constantemente requiere alimentación. Podemos representar un patrón de actividad de canguro de etapa 1 como este.
o
En la etapa 2 , el canguro puede hacer pequeños saltos, pero no más de 2 antes de que tenga hambre. Podemos representar un patrón de actividad de canguro de etapa 2 como este.
o o
o o o
Después de la etapa 2, el canguro mejora rápidamente. En cada etapa posterior, el canguro puede saltar un poco más alto (1 unidad en la representación gráfica) y el doble de veces. Por ejemplo, el patrón de actividad de un canguro en etapa 3 se ve así.
o o o o
o o o o o o o o
o o o o o
Todo ese salto requiere energía, por lo que el canguro requiere alimentación después de completar cada patrón de actividad. La cantidad exacta requerida se puede calcular de la siguiente manera.
Asigne a cada o en el patrón de actividad de una etapa n canguro su altura, es decir, un número del 1 al n , donde 1 corresponde al suelo yn a la posición más alta.
Calcule la suma de todas las alturas en el patrón de actividad.
Por ejemplo, el patrón de actividad de un canguro en etapa 3 incluye las siguientes alturas.
3 3 3 3
2 2 2 2 2 2 2 2
1 1 1 1 1
Tenemos cinco 1 's, ocho 2 ' s y cuatro 3 's; la suma es 5 · 1 + 8 · 2 + 4 · 3 = 33 .
Tarea
Escriba un programa completo o una función que tome un entero positivo n como entrada e imprima o devuelva los requerimientos nutricionales por actividad de una etapa n canguro.
Este es el código de golf ; ¡que gane la respuesta más corta en bytes!
Ejemplos
1 -> 1
2 -> 7
3 -> 33
4 -> 121
5 -> 385
6 -> 1121
7 -> 3073
8 -> 8065
9 -> 20481
10 -> 50689
http://www.wolframalpha.com/input/?i=2%5E(n-1)*(n%5E2-1)%2B1
(Marcado extraño porque se desordena una URL normal)Respuestas:
Jalea , 6 bytes
Utiliza la fórmula ( n 2 - 1) 2 n - 1 + 1 para calcular cada valor. @ Qwerp-Derp's tuvo la amabilidad de proporcionar una prueba .
Pruébalo en línea! o Verificar todos los casos de prueba.
Explicación
fuente
Coffeescript, 19 bytes
Editar: ¡Gracias a Dennis por cortar 6 bytes!
La fórmula para generar números de canguro es esta:
Explicación de la fórmula:
El número de
1
's enK(n)
la suma final es2^(n - 1) + 1
.El número de
n
's enK(n)
la suma final es2^(n - 1)
, entonces la suma de todos losn
' s esn * 2^(n - 1)
.El número de cualquier otro número (
d
) enK(n)
la suma final es2^n
, entonces la suma de todos losd
's seríad * 2^n
.Por lo tanto, la suma de todos los otros números
= (T(n) - (n + 1)) * 2^n
, dondeT(n)
es la función de número de triángulo (que tiene la fórmulaT(n) = (n^2 + 1) / 2
).Sustituyendo eso, obtenemos la suma final
Cuando sumamos todas las sumas, obtenemos
K(n)
, que es igual a... que es igual a la fórmula anterior.
fuente
n=>(n*n-1<<n-1)+1
Java 7, 35 bytes
fuente
Jalea , 4 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Python 2,
2523 bytesFórmula de millas usadas.
Gracias a Jonathan Allan por -2 bytes.
fuente
~-x
. También puede usarx-1
(no más corto), ya que la resta tiene mayor prioridad que el desplazamiento.~-x
, así que decidí dejarlo sin cambios. Bueno, parece que todos prefierenx-1
, sin embargo (Dennis también dijo exactamente eso).-~(x*x-1<<~-x)
para el registro, pero-1
todavía existe, así que no me gusta mezclar código ...- 1
.Lua, 105 bytes
De-golf:
Problema entretenido!
fuente
En realidad , 8 bytes
Pruébalo en línea!
Explicación:
Esto simplemente calcula la fórmula
(n**2 - 1)*(2**(n-1)) + 1
.fuente
GolfScript , 11 bytes
Pruébalo en línea!
Gracias Martin Ender (8478) por eliminar 4 bytes.
Explicación:
fuente
CJam, 11 bytes
Pruébalo en línea.
Explicación:
fuente
ri
...Mathematica, 15 bytes
No hay un operador de desplazamiento de bits, por lo que necesitamos hacer la exponenciación real, pero luego es más corto dividir por 2 en lugar de disminuir el exponente.
fuente
C, 26 bytes
Como una macro:
Como una función (27):
fuente
f(1+2)
.05AB1E , 7 bytes
Pruébalo en línea!
Explicación
fuente
C #, 18 bytes
Función anónima basada en el excelente análisis matemático de Qwerp-Derp .
Programa completo con casos de prueba:
fuente
Lote, 30 bytes
Bueno, de todos modos supera a Java.
fuente
MATL , 7 bytes
Utiliza la fórmula de otras respuestas.
Pruébalo en línea!
fuente
Oasis , 9 bytes
Me sorprende que no haya una función integrada para
2^n
.Pruébalo en línea!
Explicación:
fuente
m
logro, eso y falta de creatividad. Además, muchos operadores aún no se han implementado, debido a la pereza y la dilación.Raqueta 33 bytes
Usando la fórmula explicada por @ Qwerp-Derp
Sin golf:
Pruebas:
Salida:
fuente
Ruby, 21 bytes
@ Qwerp-Derp básicamente hizo el trabajo pesado.
Debido a la precedencia en ruby, parece que necesitamos algunos parens:
fuente
Scala, 23 bytes
Utiliza bit shift como exponenciación
fuente
Pyth, 8 bytes
pyth.herokuapp.com
Explicación:
fuente
R, 26 bytes
Aplicando descaradamente la fórmula
fuente
J , 11 bytes
Basado en la misma fórmula encontrada anteriormente .
Pruébalo en línea!
Explicación
fuente
Groovy (22 bytes)
No conserva
n
, pero usa la misma fórmula que todos los demás en esta competencia. Se guardó 1 byte con decrementos, debido al paréntesis necesario.Prueba
fuente
JS-Forth, 32 bytes
No es muy corto, pero es más corto que Java. Esta función empuja el resultado a la pila. Esto requiere JS-Forth porque yo uso
<<
.Pruébalo en línea
fuente