tarefa
Sua tarefa é construir uma estrutura com cubos. O volume de cubos segue a seguinte sequência (inferior -> superior)
entrada
O volume total da estrutura ( ).
saída
valor de ( ), ou seja: O número total de cubos.
notas
- A entrada sempre será um número inteiro.
- Às vezes, não é possível seguir a sequência, ou seja: não representa um valor específico para n . Nesse caso, retorne -1 ou um valor falso de sua escolha (embora seja necessária consistência).
- Este é o código-golfe, pelo que a resposta mais curta em bytes para cada idioma vence.
- Nenhuma resposta será marcada como aceita pelo motivo acima mencionado.
solicitações de
- Este é o meu primeiro desafio no site, então tenha paciência comigo e perdoe (e conte-me) os erros que cometi.
- Forneça um link para que seu código possa ser testado.
- Se puder, escreva uma explicação sobre como seu código funciona, para que outras pessoas possam entender e apreciar seu trabalho.
exemplos
input : 4183059834009
output : 2022
input : 2391239120391902
output : -1
input : 40539911473216
output : 3568
Obrigado a @Arnauld pelo link para isso:
Isso não é legal?
Link para orignial: Link
4183059834009
fornece saída2022
?Respostas:
JavaScript (ES7), 31 bytes
Uma fórmula direta. Retorna
0
se não houver solução.Experimente online!
Quão?
A soma dos primeiros n cubos é dada por:Sn n
(Isso é A000537 . Essa fórmula pode ser facilmente comprovada por indução. Aqui está uma bela representação gráfica de )S5
Reciprocamente, se é a soma dos primeiros x cubos, a seguinte equação admite uma solução inteira positiva:v x
Como é positivo, isso leva a:(x2+x)/2
Cuja solução positiva é dada por:
Se é um número inteiro, é garantido um número ímpar, porqueΔ emsi é ímpar. Portanto, a solução pode ser expressa como:r=Δ−−√ Δ
Comentado
Versão recursiva,
3635 bytesRetorna
NaN
se não houver solução.Experimente online!
Comentado
fonte
05AB1E , 6 bytes
Experimente online!
Resposta do porto de Jelly's Jonathan. Tomai a soma cumulativa de [0 ... n] , quadrados cada e encontrar o índice de V .
05AB1E , 7 bytes
Experimente online!
Como funciona
Alternativa de 8 bytes:
ÝÝÅΔ3mOQ
.fonte
3mO
enO
trabalho ... Provavelmente também mencione -1 é o valor falso.R ,
42bytes 40-2 bytes graças a Giuseppe
Experimente online!
Resposta JavaScript do Port of Arnauld . Também retorna 0 se não houver solução.
fonte
Geléia ,
54 bytesUm link monádico produz
0
se não for possível.Experimente online! muito ineficiente para os casos de teste! (O (V) espaço: p)
Aqui está uma versão de 8 bytes que executa uma raiz cúbica de V primeiro para torná-lo O (V ^ (1/3)). Usando essa versão de 8 bytes aqui está uma suíte de testes
Quão?
fonte
36
IJi
se comporta como²⁼
(Ị
em outras palavras).Elixir , 53 bytes
Experimente online!
Resposta do porto de Jelly's Jonathan.
Elixir , 74 bytes
Experimente online!
Definitivamente abaixo do ideal. Mas eu sou apenas um novato em Elixir! :) Retorna
nil
para valores "inválidos" deV
.fonte
Japonês, 7 bytes
Tente
Explicação
Alternativo
Tente
fonte
Cubix , 27 bytes (ou volume 27?)
Parece o lugar certo para esse idioma.
Experimente online!
Isso envolve um cubo 3x3x3 da seguinte maneira
Assista correr
É essencial as forças brutas afastando os cubos crescentes da entrada. Se resultar em zero, produza uma saída;
n
caso contrário, imprima 0 e saia.fonte
Perl 6 ,
302926 bytes-4 bytes graças a Jo King
Experimente online!
Solução de força bruta para n <10000. Usa a equação da resposta de Jonathan Allan.
3737 bytes de solução para n maior ( -1 bytes graças a Jo King ):Experimente online!
Retorna
False
se não houver solução.Explicação
fonte
0..$_
para ser válido para todos os números, mesmo que o tempo limite seja maior. Para o golfe normal, você pode remover o.
do primeiro e mudar o segundo de0>=*
para1>*
JavaScript (Node.js) , 28 bytes
Experimente online!
Eu sei que é a minha própria pergunta e tudo, mas eu tinha uma resposta melhor (para essa lang) que está presente, então eu postei. Espero que esteja tudo bem
fonte
APL (Dyalog) , 18 bytes
Experimente online!
fonte
Matlab, 27 bytes
Retorna o
n
se existe ou uma matriz vazia, se não.Como funciona
Experimente Online!
Nota Falha grande
v
devido a limitações de memória.fonte
Python 3 , 60 bytes
Experimente online!
-6 graças ao Sr. Xcoder .
Se pudermos lançar um erro, caso não hajan para um particular V , podemos reduzir isso para 51 bytes:
Experimente online!
fonte
Perl 6 , 33 bytes
Experimente online!
Isso usa o método de Arnauld . Retorna um objeto Vazio se o número não for válido.
fonte
dc , 19 bytes
A entrada e a saída são da pilha, retornam 0 se não houver solução.
Experimente online!
Explicação
Se houver uma solução n, a entrada é
((n^2+n)^2)/4
. Então, vamos calcular uma solução julgamento comon=sqrt(sqrt(4*input))
, usando padrão 0 decimal de precisão o lugar de dc para raízes quadradas, e depois comparar(n^2+n)^2
a4*input
ver se é realmente uma solução.A penúltima linha se baseia no fato não óbvio de que dc,
0^x=0
para todos os que não são zerox
(até negativosx
!), Mas0^0=1
.fonte
Python 3 ,
5348 bytesExperimente online!
-3 bytes de Jo King
Devoluções
-1
sem resposta.Funciona apenas
n=997
com os limites de recursão padrão.Pega repetidamente cubos cada vez maiores do volume até chegar a zero (êxito, número de retorno removido) ou um número negativo (sem resposta).
Explicação:
fonte
and/or
ou listas são geralmente menores queif/else
. 50 bytesnot V
=>V==0
ouV>-1
gvm (commit 2612106 ) bytecode,
7059 bytes(-11 bytes multiplicando um loop em vez de escrever o código para multiplicar duas vezes)
Hexdump:
Execuções de teste:
Não é realmente uma pontuação baixa, basta usar esta boa pergunta para testar
gvm
aqui;) O commit é mais antigo que a questão, é claro.Observe que essa é uma máquina virtual de 8 bits; portanto, usando algum código que manipule apenas o intervalo de números não assinados naturais0-255
, os casos de teste fornecidos na pergunta não funcionarão.Montado manualmente a partir disso:
edit : Eu apenas consertei um bug no
gvm
; sem essa correção,gvm
tentei ler programas binários no modo de texto , que podem ser interrompidos (o código acima não contém0xd
bytes, portanto, não será interrompido no Windows sem essa correção).fonte
K (oK) , 21 bytes
Experimente online!
Resposta JS do Porto de Arnauld .
Quão:
a função retornará
(_r%2)
iff1!r == 0
, caso contrário, retornará null (0N
). Isso ocorre porque o elemento único na lista possui o índice 0, e a tentativa de indexar essa lista com qualquer número diferente de 0 retornará nulo.fonte