Diberikan bilangan bulat, menghasilkan lima kubus sempurna yang jumlahnya adalah bilangan bulat itu. Perhatikan bahwa kubus bisa positif, negatif, atau nol. Sebagai contoh,
-10 == -64 - 64 + 64 + 27 + 27
jadi untuk input -10
Anda bisa mengeluarkan [-64, -64, 64, 27, 27]
, meskipun solusi lain mungkin. Perhatikan bahwa Anda harus mengeluarkan kubus, bukan angka yang dipotong dadu.
Sebuah solusi selalu ada - Anda mungkin menikmati kebingungan untuk diri sendiri. Lebih jauh dugaan bahwa empat kubus sudah cukup.
-10
solusi lain yang mungkin bisa-1000+4574296+4410944-4492125-4492125
misalnya. Dan apakah itu diperbolehkan untuk menghasilkan--
atau+-
bukannya+
/-
masing-masing (yaitu3 = 27+-27+-125--64--64
bukannya3 = 27-27-135+64+64
)?--5
, saya akan mengatakan tidak, seperti aturan biasa untuk menghasilkan ekspresi .+
tanda, cukup angka.-10 = -64 - 64 + 64 + 27 + 27
atau-10 = -343 + 0 -8 +125 +216
Jawaban:
Brachylog , 18 byte
Cobalah online!
Penjelasan
Kami pada dasarnya menggambarkan masalahnya, dengan kendala tambahan yang kami inginkan agar daftar keluaran tidak bertambah dalam hal besaran: ini memaksa Brachylog untuk mundur dengan benar semua kombinasi 5 nilai yang mungkin, alih-alih menelusuri kembali secara tak terbatas nilai yang terakhir elemen daftar.
Menemukan solusi yang berbeda
Dengan menambahkan a
≜
, dimungkinkan untuk menggunakan predikat ini untuk menemukan semua solusi dengan besaran yang meningkat: misalnya, berikut adalah 10 solusi pertama untuk42
sumber
Brachylog , 11 byte
Terima kasih Fatalize untuk menghemat satu byte
Cobalah online!
Pertama
~+
menegaskan bahwa output (.
) harus dijumlahkan ke input.l₅
lagi membatasi output, mendikte bahwa itu harus memiliki panjang 5.≥₁
menyatakan bahwa daftar harus dalam urutan menurun (saya percaya bahwa ini diperlukan untuk menghentikan program memasuki infinite loop)Kami secara eksplisit menyatukan daftar ini dengan
.
, variabel output, karena predikat kami berikutnya akan "mengubah" nilai-nilai di dalam daftar. Kami kemudian mengambil akar pangkat tiga dari setiap nilai dalam daftar√₃ᵐ
. Karena Brachylog secara inheren berbasis integer, ini menentukan bahwa semua angka dalam daftar adalah angka kubus.Akhirnya, kami menggunakan
∧
karena ada implisit yang.
ditambahkan ke akhir setiap baris. Karena kami tidak ingin.
disatukan dengan daftar akar pangkat tiga, kami menyatukannya sebelumnya dan menggunakannya∧
untuk menghentikannya pada akhir.sumber
Python 2 ,
585754 byteCobalah online!
sumber
k=-(n-n**3)/6;[v**3for v in~k,1-k,n,k,k]
-(n-n**3)
bisakah Anda tidak menggunakan(n**3-n)
?Python 3 , 65 byte
Cobalah online!
Maksudku, formula eksplisit bahkan ada di sini (meskipun dia mengabstraksikan konstruksi di balik eksistensial)
sumber
k
dan menulis ulang persamaan Anda. Cobalah online!Java 8,
17887737165 byte-6 byte terima kasih kepada @ OlivierGrégoire .
Penjelasan yang sama di bagian bawah, tetapi menggunakan persamaan dasar alih-alih yang diturunkan yang saya gunakan sebelumnya (terima kasih kepada jawaban Python 3 dari @LeakyNun untuk tip tersirat):
k = (n - n 3 ) / 6
n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3
Cobalah online.
Jawaban lama 178 byte:
Cobalah online.
Penjelasan:
Saya loop
k
dari 0 ke atas sampai solusi ditemukan. Dalam setiap iterasi, ia akan memeriksa dua persamaan ini:k
: n == n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3k
: n == n 3 - (k + 1) 3 - (k-1) 3 + k 3 + k 3Mengapa?
Karena n - n 3 = n * (1-n) * (1 + n) dan kemudian 6 | (nn 3 ) , dapat ditulis sebagai n - n 3 = 6k .
6k = (k + 1) 3 + (k-1) 3 - k 3 - k 3 .
Dan karena itu n = n 3 + (k + 1) 3 + (k-1) 3 - k 3 - k 3 untuk beberapa k .
Sumber.
sumber
n->new long[]{n*n*n,(n=(n-n*n*n)/6+1)*n*n--,--n*n*n,n=-++n*n*n,n}
(atau 64 menggunakan ints untuk hasil yang kurang tepat)Jelly , 13 byte
Cobalah online!
Cari tahu rumusnya secara mandiri. (x + 1) 3 + (x-1) 3 - 2 × x 3 == 6 × x.
Alternatif 13 byte: Cobalah online!
sumber
‘c3µ³;;;C;~*3
harus menyimpan byte sejak (n ^ 3-n) / 6 = C (n +1, 3)Oktaf ,
474033 byteCobalah online!
Disimpan 6 byte berkat Giuseppe, karena saya lupa menghapus beberapa tanda kurung lama. Disimpan byte lain dengan mengubah tanda-tanda, terima kasih kepada rafa11111.
Menggunakan rumus dalam pos math.se yang ditautkan :
Tampaknya lebih lama jika saya mencoba menyelesaikan persamaan: (nn ^ 3) = (k + 1) ^ 3 + (k-1) ^ 3 - k ^ 3 - k ^ 3 berkaitan dengan k , bukan hanya menggunakan persamaan.
sumber
Fungsi Minecraft (18w11a, 1,13 foto), 813 byte
Menggunakan enam fungsi:
Sebuah
b
c
d
e
f
"Mengambil input" dari tujuan papan skor bernama
n
, buat dengan/scoreboard objectives add n dummy
, lalu setel menggunakan/scoreboard players set x n 5
. Kemudian panggil fungsi menggunakan/function a
Gunakan rumus dari jawaban math.se ini
sumber
JavaScript (Node.js) ,
4845 byteCobalah online!
sumber
|0
?n**3-n
harus merupakan kelipatan 6 untuk integern
.MATL , 21 byte
Ini mencoba semua 5-tupel angka dari set
(-abs(n))^3, (-abs(n)+1)^3, ..., abs(n)^3
. Jadi sangat tidak efisien.Cobalah online!
sumber
Haskell ,
4342 byteHanya jawaban yang populer, diterjemahkan ke Haskell. Terima kasih kepada @ rafa11111 karena telah menghemat satu byte!
Cobalah online!
sumber
k
penugasan ...Sekam , 12 byte
Cobalah online!
Mencoba semua daftar kemungkinan 5 kubus, dan mengembalikan yang pertama dengan jumlah yang benar.
Penjelasan
sumber
C (gcc) ,
858175 byteDisimpan 4 byte dan kemudian 6 byte berkat re-order tugas dari ceilingcat
Cobalah online!
sumber
Fortran (GFortran) , 53 byte
Cobalah online!
Fortran mengalahkan Python? Apa yang terjadi di sini?
sumber
Python 3,
656160 byteEdit: hilangkan beberapa ruang yang tidak perlu.
Sunting: terima kasih atas penataan ulang cerdas rafa11111.
Terinspirasi oleh ini .
Cobalah online!
sumber
(N**3-N)
dan[N,1-k,-1-k,k,k]
R ,
4038 byteManfaatkan rumus dalam pos math.SE yang ditautkan. Turun ke 2 byte berkat Giuseppe.
Cobalah online!
sumber
APL (Dyalog Unicode) ,
3026 byteCobalah online!
Terjemahan APL dari jawaban LeakyNun .
Terima kasih kepada Adám selama 4 byte dengan menjadi diam-diam.
Bagaimana?
sumber
Sekam , 20 byte
Cobalah online!
Menggunakan rumus dari pos ini .
Penjelasan
sumber
x86,
4139 byteSebagian besar implementasi langsung dari formula dengan input
ecx
dan output pada stack.Yang menarik adalah saya menggunakan fungsi cubing, tetapi karena
call label
5 byte , saya menyimpan alamat label dan menggunakan 2 bytecall reg
. Juga, karena saya mendorong nilai dalam fungsi saya, saya menggunakanjmp
bukanret
. Sangat mungkin bahwa menjadi pandai dengan loop dan stack dapat menghindari panggilan sepenuhnya.Saya tidak melakukan trik mewah dengan cubing, seperti menggunakan
(k+1)^3 = k^3 + 3k^2 + 3k + 1
.Changelog:
Perbaiki jumlah byte menggunakan
not
bukanneg
/dec
.-2 byte dengan tidak
xor
ingedx
karena mungkin 0 dariimul
.Objdump:
Inilah versi pengujian saya yang melakukan semua cubing pada akhirnya. Setelah nilai didorong pada stack, loop kubus menimpa nilai stack. Saat ini
4240 byte tetapi harus ada beberapa perbaikan di suatu tempat.sumber
Secara kubik , 51 karakter, 55 byte
Cobalah online!
Rupanya MDXF lupa untuk mengimplementasikan SBCS ...
sumber
Membatalkan 98 , 35 byte
Cobalah online!
Ini menggunakan rumus populer dari jawaban math.se ini .
sumber
Perl 5
-nE
, 48 byteujung topi
sumber
PowerShell Core , 52 byte
Cobalah online!
Gunakan persamaan
o=o^3 + (1-k)^3 + (-k-1)^3 + k^3 + k^3
, di manak=o^3 - o
; ini adalah refactoring minor dari yang populerl=o-o^3
(dengank=-l
).Sebagai catatan, ekspresi itu
l=o-o^3
terlihat seperti kucing dengan telinga yang terluka.sumber
Ruby , 43 byte
Cobalah online!
sumber