Una leyenda india cuenta la historia del supuesto inventor del juego de ajedrez, que impresionó tanto al emperador de la India con su juego que sería recompensado con todo lo que se le pidiera.
El hombre dijo que quería que le pagaran en arroz. Quería un grano de arroz para el primer cuadro del tablero de ajedrez, dos para el segundo, cuatro para el tercero, ocho para el cuarto, y así sucesivamente, hasta el cuadrado 64.
El emperador se sorprendió de que el hombre pidiera una recompensa tan pequeña, pero a medida que sus matemáticos comenzaron a contar, terminó perdiendo una de sus provincias.
Tarea
Dada la longitud del lado de un tablero de ajedrez hipotético (que es 8 en un tablero de ajedrez predeterminado) y el multiplicador entre cuadrados (que es 2 en la leyenda), calcule la cantidad de granos de arroz que el emperador debe pagar al hombre.
Notas
La longitud del lado siempre será un número entero positivo. El multiplicador podría ser cualquier tipo de número racional.
Si su idioma de elección no puede mostrar números muy grandes, está bien siempre que su programa pueda procesar correctamente entradas más pequeñas.
Además, si su idioma de elección redondea valores más grandes (con anotaciones exponenciales), está bien si esos valores son aproximadamente correctos.
Casos de prueba
Input (side length, multiplier) => Output
8, 2 => 18446744073709551615
3, 6 => 2015539
7, 1.5 => 850161998.2854
5, -3 => 211822152361
256, 1 => 65536
2, 2 => 15
2, -2 => -5
Tenga en cuenta que la fórmula explícita
result = (multiplier ^ (side ^ 2) - 1) / (multiplier - 1)
Realiza mal en multiplier = 1
, como
1 ^ (side ^ 2) - 1 = 0
1 - 1 = 0
0 / 0 != side ^ 2 (as it should be)
Tanteo
Este es el código de golf. La respuesta más corta en bytes gana.
If your language of choose can't display too large numbers, it's ok as long as your program can correctly process smaller inputs
Cuidado, eso ha causado problemas en el pasado. meta.codegolf.stackexchange.com/a/8245/31716Respuestas:
Jalea , 4 bytes
Esto utiliza el enfoque de la inteligente respuesta APL de @ APLDude .
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
MATL , 6 bytes
Pruébalo en línea!
fuente
APL, 10 bytes
⎕
se usa para leer la entrada del usuario dos veces. Si almacenamos la longitud del lado en sy el multiplicador en m , obtenemos el siguiente código.Y así es como APL analiza este código:
fuente
⊣⊥1⍴⍨⊢×⊢
(8 bytes) Como un comando REPL interactivo,⎕⊥×⍳⎕*2
(7 bytes) también funciona.Python, 40 bytes
Genera y evalúa una cadena como
que codifica la suma como un polinomio Hornerizado con
n*n
términos.Muchos métodos diferentes dieron recuentos de bytes muy similares:
fuente
Pyth, 6 bytes
1 byte guardado gracias a @FryAmTheEggman .
Pruébalo en línea!
Banco de pruebas.
fuente
Haskell, 25 bytes
Suma la lista
[m^0, m^1, ..., m^(n*n-1)]
.fuente
JavaScript (ES2016 / ES7),
312928 bytesSolo la versión ES6 de @Bassdrop Cumberwubwubwub y @ Kaizo, pero con operador de exponenciación. :) (No tenía suficiente reputación para comentar en su lugar).
Editar:
/+(b-1)
cambiado a/--b
(gracias @Neil).Editar: ahora usa curry (gracias @MamaFunRoll).
fuente
+
operador fue una prueba que olvidé editar, por lo que puede eliminar 1 byte omitiéndolo :)/--b
Te ahorraría un byte o dos?Jalea, 6 bytes
Pruébalo en línea!
fuente
MATLAB, 23 bytes
¡Pruébalo aquí !
fuente
Javascript ES6,
59373534 bytes¡Gracias a @Kaizo por reducir 19 bytes, @Neil por otros 2 y @gcampbell por 1 más!
Pruébalo aquí
Mostrar fragmento de código
Versiones rotas alternativas
32 bytes
Causas
NaN
parab==1
.30 bytes
Causas
Infinity
parab==1.5
.28 bytes
Salidas
1
para algunos casos de prueba válidos.Versión anterior para 59 bytes
(a,b)=>Array(a*a).fill``.reduce((c,d,i)=>c+Math.pow(b,i),0)
fuente
/~-b
obviamente no es bueno para fraccionalb
, pero/--b
debería funcionar, ¿no?(a,b)=>[...Array(a*a-1)].reduce(s=>s+=p*=b,p=1)
Java, 132 bytes
Sin golf
Notas
Salidas
fuente
R, 18 bytes
Explicación:
fuente
05AB1E , 5 bytes
Código:
Explicación:
Pruébalo en línea! .
fuente
Haskell, 30 bytes
o igualmente largo
La primera versión comienza con
1
multiplicaciones repetidas conm
. Luego suma los primerosn^2
números de esta secuencia. La segunda versión es la fórmula explícita como se ve en otras respuestas.fuente
n#m=sum$(m^)<$>[0..n*n-1]
?J, 10 bytes
Uso
Marco algunos enteros con el
x
sufijo para usar enteros extendidos para obtener resultados exactos.Explicación
fuente
#.*:$*
según APL Dude.Mathcad, [tbd] bytes (~ 11)
Utiliza el operador de suma incorporado de Mathcad. También demuestra la simplificación simbólica del procesador para generar la fórmula exacta.
Mathcad ejecuta efectivamente dos motores de procesamiento en paralelo: uno un punto flotante estándar IEEE de 64/80 bits y el otro un proceso simbólico de longitud de número arbitrario (MuPad). La evaluación numérica estándar se indica con el signo igual (=), mientras que una flecha hacia la derecha indica evaluación simbólica.
El esquema de recuento de Mathcad aún no se ha determinado, por lo que no se proporciona el recuento de bytes.
ctl- $ ingresa el operador de suma (Sigma), incluidos los marcadores de posición vacíos para colocar la variable de suma, el valor inicial, el valor final y la expresión. Recuento aproximado de bytes equivalentes = 11.
fuente
PostgreSQL,
6766 bytesSqlFiddleDemo
Entrada:
VALUES(side, multiplier)
EDITAR:
La entrada se movió a la tabla, todos los casos a la vez:
SqlFiddleDemo
Salida:
fuente
TI-Basic, 19 bytes
S
es la longitud del lado yM
es el multiplicador.fuente
Python, 40 bytes
fuente
lambda l,m:(m**(l*l)-1)/(m-1)
Rubí: 39 bytes
Prueba:
fuente
sum
función? Esto cambia el juegoPython, 41 bytes
Totalmente nuevo en esto del golf, ¡las críticas son bienvenidas!
fuente
l**l
lugar de lo que hice?l*l
en realidad, que es más corto quel**2
.Jolf,
181510 bytesGracias a Cᴏɴᴏʀ O'Bʀɪᴇɴ por guardar 3 bytes y apuntarme hacia el mapeo
Pruébalo aquí!
fuente
CJam , 9 bytes
Las entradas están en orden inverso separadas por una nueva línea o un espacio.
Pruébalo en línea!
fuente
PHP,
5854 bytesEsto solo usa la fórmula de suma para mostrar el valor, después de verificar si el multiplicador es 1 (que devuelve NAN en la fórmula).
fuente
Mathematica, 22 bytes
Crea un rango de
{1, 2, ... s^2}
, resta 1 sobre él para hacer{0, 1, ..., s^2-1}
. Luego eleva cada uno al poder dem
hacer{m^0, m^1, ..., m^(s^2-1)}
y devuelve la suma de ellos.Alternativamente, Mathematica puede usar la fórmula explícita tomando su límite. Esto requiere 29 bytes.
fuente
Tr[#^Range[#2^2]/#]&
PARI / GP , 25 bytes
Más largo pero más rápido (35 bytes):
Lindo (30 bytes):
fuente
C #, 56 bytes
fuente
256, 1
?(Math.Pow(1, 256 * 256) - 1) / --1
= 0/0.Lua,
5447 bytesEjecute desde la línea de comando con la longitud del lado del tablero como primer argumento y el multiplicador como el segundo.
Gracias a user6245072 por guardar 6 bytes, y Katenkyo por guardar 1 adicional.
Versión original de 54 bytes:
fuente
l,m=...r=0 for i=0,l^2 do r=r+m^i end print(r)
c=1 d=1
=>a,b=...c=1g=1 for i=2,a^2 do c=c*b g=g+c end print(g)
. si la sugerencia de @ user6245072 funciona, puede guardar un byte con el mismo principio =>r=0l,m=...for i=0,l^2 do r=r+m^i end print(r)
r=0
yl,m=...
es obligatorio de todos modos, por lo que no cambia. También el bucle debería serfor i=0,l^2-1
pero esto es mi culpa jajaja.𝔼𝕊𝕄𝕚𝕟, 11 caracteres / 14 bytes
Try it here (Firefox/WebKit Nightly only).
Sí, ¡ahora funciona en WebKit Nightly! El soporte de Chrome es el siguiente.
Explicación
fuente
RETORNO , 32 bytes
Try it here.
Lambda anónima que deja resultado en Stack2. Uso:
Explicación
fuente