tarea
Su tarea es construir una estructura con cubos. El volumen de cubos sigue la siguiente secuencia (abajo -> arriba)
entrada
El volumen total de la estructura ( ).
salida
valor de ( ), es decir: el número total de cubos.
notas
- La entrada siempre será un número entero.
- A veces no es posible seguir la secuencia, es decir: no representa un valor específico para n . En ese caso, devuelva -1 o un valor falso de su elección (aunque se requiere coherencia).
- Este es el código de golf, por lo que la respuesta más corta en bytes para cada idioma gana.
- Ninguna respuesta se marcará como aceptada por el motivo mencionado anteriormente.
peticiones
- Este es mi primer desafío en el sitio, así que tengan paciencia conmigo y perdonen (y cuéntenme) los errores que cometí.
- Proporcione amablemente un enlace para que su código pueda ser probado.
- Si puede, escriba amablemente una explicación sobre cómo funciona su código, para que otros puedan entender y apreciar su trabajo.
ejemplos
input : 4183059834009
output : 2022
input : 2391239120391902
output : -1
input : 40539911473216
output : 3568
Gracias a @Arnauld por el enlace a esto:
¿No es lindo?
Enlace a original: enlace
4183059834009
da salida2022
?Respuestas:
JavaScript (ES7), 31 bytes
Una fórmula directa. Devuelve
0
si no hay solución.Pruébalo en línea!
¿Cómo?
La suma de los primeros n cubos viene dada por:Sn n
(Esto es A000537 . Esta fórmula se puede probar fácilmente por inducción. Aquí hay una buena representación gráfica de ).S5
Recíprocamente, si es la suma de los primeros x cubos, la siguiente ecuación admite una solución entera positiva:v x
Como es positivo, esto lleva a:(x2+x)/2
Cuya solución positiva está dada por:
Si es un número entero, se garantiza que es impar, porqueΔ ensí es impar. Por lo tanto, la solución se puede expresar como:r=Δ−−√ Δ
Comentado
Versión recursiva,
3635 bytesDevuelve
NaN
si no hay solución.Pruébalo en línea!
Comentado
fuente
05AB1E , 6 bytes
Pruébalo en línea!
Port of Jonathan's Jelly respuesta. Tome la suma acumulada de [0 ... n] , cuadrado cada uno y encontrar el índice de V .
05AB1E , 7 bytes
Pruébalo en línea!
Cómo funciona
Alternativa de 8 bytes:
ÝÝÅΔ3mOQ
.fuente
3mO
ynO
trabajo ... Probablemente también mencione -1 es el valor falso.R ,
4240 bytes-2 bytes gracias a Giuseppe
Pruébalo en línea!
La respuesta de JavaScript del puerto de Arnauld . También devuelve 0 si no hay solución.
fuente
Jalea ,
54 bytesUn enlace monádico, rinde
0
si no es posible.Pruébalo en línea! Demasiado ineficiente para los casos de prueba! (O (V) espacio: p)
Aquí hay una versión de 8 bytes que realiza una raíz cúbica de V primero para convertirla en O (V ^ (1/3)). El uso de esa versión de 8 bytes aquí es un conjunto de pruebas
¿Cómo?
fuente
36
IJi
comporte como²⁼
(Ị
en otras palabras).Elixir , 53 bytes
Pruébalo en línea!
La respuesta de Port of Jonathan's Jelly.
Elixir , 74 bytes
Pruébalo en línea!
Definitivamente subóptimo. ¡Pero solo soy un novato en Elixir! :) Devuelve los
nil
valores "no válidos" deV
.fuente
Japt, 7 bytes
Intentalo
Explicación
Alternativa
Intentalo
fuente
Cubix , 27 bytes (o volumen 27?)
Parece el lugar correcto para este idioma.
Pruébalo en línea!
Esto se envuelve en un cubo 3x3x3 de la siguiente manera
Míralo correr
Es esencial las fuerzas brutas al quitar cubos crecientes de la entrada. Si resulta en cero
n
, imprima lo contrario si hay un resultado negativo, imprima 0 y salga.fuente
Perl 6 ,
302926 bytes-4 bytes gracias a Jo King
Pruébalo en línea!
Solución de fuerza bruta para n <10000. Utiliza la ecuación de la respuesta de Jonathan Allan.
37Solución de 36 bytes para n más grande ( -1 byte gracias a Jo King ):Pruébalo en línea!
Devoluciones
False
si no hay solución.Explicación
fuente
0..$_
ser válido para todos los números, incluso si se agota el tiempo en los más grandes. Para jugar al golf normal, puede eliminar el.
primero y cambiar el segundo de0>=*
a1>*
JavaScript (Node.js) , 28 bytes
Pruébalo en línea!
Sé que es mi propia pregunta y todo eso, pero tenía una mejor respuesta (para este idioma) que está presente, así que publiqué. Espero que esté bien
fuente
APL (Dyalog) , 18 bytes
Pruébalo en línea!
fuente
Matlab, 27 bytes
Devuelve el
n
if existe o una matriz vacía si no.Cómo funciona
Pruébalo en línea!
Nota Falla en grande
v
debido a limitaciones de memoria.fuente
Python 3 , 60 bytes
Pruébalo en línea!
-6 gracias al Sr. Xcoder .
Si podemos lanzar un error en caso de que no hayanorte para un particular V , podemos reducir esto a 51 bytes:
Pruébalo en línea!
fuente
Perl 6 , 33 bytes
Pruébalo en línea!
Esto usa el método de Arnauld . Devuelve un objeto vacío si el número no es válido.
fuente
dc , 19 bytes
La entrada y salida es de la pila, devuelve 0 si no hay solución.
Pruébalo en línea!
Explicación
Si hay una solución n, la entrada es
((n^2+n)^2)/4
. Así que vamos a calcular una solución de prueba quen=sqrt(sqrt(4*input))
, utilizando por defecto 0 decimal de precisión de corriente continua para las raíces cuadradas, a continuación, comparar(n^2+n)^2
a4*input
ver si es realmente una solución.La penúltima línea se basa en el hecho no obvio de que dc,
0^x=0
para todos los que no sean cerox
(¡incluso negativosx
!) Pero0^0=1
.fuente
Python 3 ,
5348 bytesPruébalo en línea!
-3 bytes de Jo King
Devoluciones
-1
sin respuesta.Solo funciona hasta
n=997
con los límites de recursión predeterminados.Repetidamente toma cubos cada vez más grandes del volumen hasta que llega a cero (éxito, se devuelve el número de cubos eliminados) o un número negativo (sin respuesta).
Explicación:
fuente
and/or
o las listas son generalmente más cortas queif/else
. 50 bytesnot V
=>V==0
oV>-1
gvm (commit 2612106 ) bytecode,
7059 bytes(-11 bytes multiplicando en un bucle en lugar de escribir el código para multiplicar dos veces)
Hexdump:
Pruebas de funcionamiento:
Realmente no es un puntaje bajo, solo uso esta buena pregunta para probar
gvm
aquí;) El commit es más antiguo que la pregunta, por supuesto. Tenga en cuenta que esta es una máquina virtual de 8 bits, por lo que el uso de algunos códigos maneja solo el rango de números natural sin signo0-255
, los casos de prueba dados en la pregunta no funcionarán.Ensamblado manualmente de esto:
editar : acabo de corregir un error en
gvm
; sin esta solución,gvm
intenté leer programas binarios en modo de texto , lo que podría romperse (el código anterior no contiene0xd
bytes, por lo que no se romperá en Windows sin esta solución).fuente
K (oK) , 21 bytes
Pruébalo en línea!
La respuesta JS del puerto de Arnauld .
Cómo:
la función devolverá
(_r%2)
iff1!r == 0
, de lo contrario, devuelve null (0N
). Esto se debe a que el elemento único en la lista tiene índice 0, e intentar indexar esa lista con cualquier número que no sea 0 devolverá nulo.fuente