Temukan perbedaan antara kuadrat dari jumlah dan jumlah kuadrat.
Ini adalah representasi matematis:
Program / metode Anda harus mengambil dua input, ini adalah batas bawah dan atas rentang Anda, dan inklusif. Batas akan seluruh bilangan bulat di atas 0.
Program / metode Anda harus mengembalikan jawabannya.
Anda dapat menggunakan basis mana saja yang Anda inginkan, tetapi mohon sebutkan jawaban Anda pada basis mana yang telah Anda gunakan.
Test case (Basis 10)
5,9 970
91,123 12087152
1,10 2640
Ini adalah golf kode biasa, jadi semakin pendek jawabannya semakin baik.
Jawaban:
Python 2, 43 byte
Uji di Ideone .
Bagaimana itu bekerja
Panggil fungsi yang ditentukan dalam spesifikasi g (a, b) . Kami memilikinya
Tentukan fungsi f (x, y, s) secara rekursif sebagai berikut.
Dengan menerapkan relasi rekurensi dari f (a, b, 0) total b - a kali, kita dapat menunjukkannya.
Ini adalah fungsi f pelaksanaan. Sementara
b/a
mengembalikan integer non-nol, kode berikutand
dijalankan, sehingga mengimplementasikan definisi rekursif dari f .Setelah
b/a
mencapai 0 , kita memiliki b> a dan lambda mengembalikan False = 0 , sehingga mengimplementasikan basis kasus dari definisi f .sumber
MATL , 9 byte
Cobalah online!
Penjelasan
Contoh
Ini adalah hasil parsial dari setiap baris untuk input
5
dan9
:&:
&:&*
&:&*XR
&:&*XRss
&:&*XRssE
sumber
Jelly,
98 byteCobalah online!
Terima kasih kepada FryAmTheEggman untuk satu byte!
sumber
Python 2, 45 byte
Solusi formulir tertutup - bukan yang terpendek, tapi saya pikir akan tetap layak untuk diposkan.
Penjelasan
Membiarkan
p(n)
menjadi angka piramidal persegi ke- n , dan menjadi angka segitiga ke- n . Kemudian, untuk n pada rentang a , ..., b :t(n)
t(b)-t(a-1)
, danp(b) - p(a-1)
(t(b)-t(a-1))² - (p(b) - p(a-1))
.Ungkapan ini mengurangi ke dalam kode.
sumber
p(n)
menjadi nomor piramidal kuadratn
ke-4 , dan menjadi bilangan segitiga ke - th . Maka ini adalah versi sederhana dari .t(n)
n
(t(b)-t(a-1))^2 - (p(b) - p(a-1))
(a-b-1)
faktor keluar(b*(b+1)*(2b+1)-a*(a-1)*(2a-1))/6
sendiri.05AB1E, 8 byte
Dijelaskan
Cobalah online
sumber
Mathematica, 21 byte
Fungsi yang tidak disebutkan namanya mengambil dua argumen dan mengembalikan perbedaan. Pemakaian:
Ada tiga trik golf kecil (dan cukup standar) di sini:
##
mewakili kedua argumen sekaligus, sehingga kita dapat menggunakan notasi awalan untukRange
.Range@##
adalah singkatanRange[##]
yang meluas keRange[a, b]
dan memberi kami jangkauan inklusif sebagaimana diperlukan.Tr
adalah untuk melacak tetapi menggunakannya pada vektor hanya menjumlahkan vektor itu, menghemat tiga byte lebihTotal
.x.x
adalah produk titik, menghemat lebih dari empat byteTr[x^2]
.sumber
Variance
membantu?Variance
ini dibagi dengann
yang lainn^2
dan saya tidak melihat cara mudah untuk membatalkannya secara terpisah.Tr@#^2-#.#&@*Range
hanya 18 byte.Labirin ,
2824 byteCobalah online!
Penjelasan
Karena loop cenderung mahal di Labyrinth, saya pikir rumus eksplisit harus paling pendek, karena dapat dinyatakan sebagai kode linier.
Penunjuk instruksi kemudian mencapai jalan buntu dan harus berbalik. Ketika sekarang bertemu
/
itu mencoba pembagian dengan nol (karena bagian bawah tumpukan secara implisit diisi dengan nol), yang mengakhiri program.sumber
Haskell, 34 byte
Contoh penggunaan:
91 # 123
->12087152
.Tidak ada yang bisa dijelaskan.
sumber
Matlab,
302928 byteMenggunakan ide Suever tentang
norm
memberi kita 2 byte lebih sedikitVersi lama (sederhana):
sumber
Oktaf,
2723 byteMenciptakan fungsi anonim bernama
ans
yang menerima dua input:ans(lower, upper)
Demo online
Penjelasan
Membuat vektor baris dari
x
hinggay
(inklusif) dan menyimpannya diz
. Kami kemudian menjumlahkan semua elemen menggunakansum
dan persegi itu (^2
). Untuk menghitung jumlah kuadrat, kita melakukan multplikasi matriks antara vektor baris dan transposnya. Ini akan secara efektif menguadratkan setiap elemen dan merangkum hasilnya. Kami kemudian kurangi keduanya.sumber
Java,
8477 karakter,8477 byte7 byte lebih kecil karena Martin Ender dan FryAmTheEggMan, terima kasih.
public int a(int b,int c){int e=0,f=0;for(;b<=c;e+=b,f+=b*b++);return e*e-f;}
Menggunakan tiga test case di pos asli: http://ideone.com/q9MZSZ
Tidak Disatukan:
Prosesnya cukup jelas. Saya mendeklarasikan dua variabel untuk mewakili kuadrat dari jumlah dan jumlah kuadrat dan berulang kali menambahkannya dengan tepat. Akhirnya, saya mengembalikan perbedaan yang dihitung.
sumber
++
dif+=b*b++
(sehingga Anda dapat meninggalkan slot ketigafor
kosong) dan Anda juga tidak perlu persegie
sebelum mengembalikannya (yaitu lakukan sajareturn e*e-f
).for
kosong, pindahkan bagianf+=b*b++
dalamnya, sehingga Anda dapat menghemat titik koma dan kawat gigi.JavaScript (ES6), 46 byte
sumber
JavaScript (ES6),
5037 byteSekarang port dari solusi Python @ Dennis ♦.
sumber
n=>m=>eval(`for(s=t=0;n<=m;t+=n++)s+=n*n;t*t-s`)
Faktor, 48 byte
Fungsi anonim.
sumber
Haskell, 36 byte
Catat itu
sumber
i+1
.Perl 6 ,
36 3231 byteMenguji
Penjelasan:
Uji:
sumber
{$_=$^a..$^b;.sum²-[+] $_»²}
{.sum²-[+] $_»²}o&[..]
Brachylog , 24 byte
Mengharapkan 2 angka dalam Input sebagai daftar, mis
[91:123]
.Penjelasan
sumber
APL,
2320 byteBekerja di NARS2000.
sumber
MATL, 11 byte
Cobalah online!
Penjelasan:
sumber
Pyth, 11 byte
Cobalah online!
sumber
s*M.P}FQ2
Japt, 10 byte
Cobalah
sumber
CJam, 17 byte
Uji di sini.
Penjelasan
Atau, kita bisa menjumlahkan produk dari semua pasangan yang berbeda (pada dasarnya mengalikan kuadrat dari jumlah, dan menghapus kotak), tapi itu satu byte lebih lama:
sumber
PowerShell v2 +, 47 byte
Dua variasi
Dalam kedua kasus tersebut, kami membuat kisaran dengan
..
operator, menyalurkannya ke loop|%{...}
. Setiap iterasi, kami mengakumulasikan$o
dan$p
sebagai jumlah atau jumlah kuadrat. Kami kemudian menghitung kuadrat-jumlah dengan$o*$o
dan mengurangi$p
. Keluaran ditinggalkan di saluran pipa dan pencetakan tersirat.sumber
JavaScript (ES6), 67 byte
Test Suite
sumber
J, 29 byte
Port of Doorknob's Jelly menjawab .
Pemakaian
Di mana
>>
STDIN,<<
adalah STDOUT, danx
untuk presisi yang diperluas.sumber
Pyke, 11 byte
Coba di sini!
sumber
Julia, 25 byte
Ini adalah fungsi yang menerima dua integer dan mengembalikan array integer 1x1.
Pendekatan sederhana: Buatlah
UnitRange
dari titik akhira
danb
dan menyebutnyax
, maka jumlahx
, persegi itu, dan kurangi norma, yang dihitung sebagaitranspose(x) * x
.Cobalah online! (termasuk semua kasus uji)
sumber
a\b=-(x=a:b)'x+sum(x)^2
menghemat beberapa byte.TI-BASIC, 19 byte
randIntNoRep
mendapat kisaran (dikocok). Sisanya cukup jelas.sumber
Fith , 52 byte
Ini adalah fungsi anonim yang mengambil dua angka di tumpukan dan meninggalkan satu nomor.
Penjelasan:
sumber
GeoGebra, 91 byte
Menentukan fungsi (mungkin
e(x,y)
) yang menghitung perbedaan yang diinginkan.a(x)
menghitung jumlah bilangan asli antara0
danx
.b(x)
menghitung jumlah kuadrat dari bilangan asli antara0
danx
.c(x,y)
pertama menghitung jumlah bilangan asli antarax
dany
, lalu kuadratkan jumlah itu.d(x,y)
menghitung jumlah kuadrat antarab(x)
danb(y)
.Baris terakhir mendefinisikan fungsi multi-variabel yang menyelesaikan perhitungan. Fungsi secara otomatis diberi nama, menyimpan beberapa byte.
sumber
e(x,y)=
untuk memberinya nama, tetapi untuk menyimpan byte, kita tidak di sini. GeoGebra secara otomatis memberikan ekspresi sebuah nama (mungkin e, karena itulah huruf yang tersedia berikutnya) Saya tidak memiliki lingkungan yang tersedia saat ini, tetapi saya tidak akan menggunakan panel CAS. Panel aljabar dan bilah masukan harus melakukan pekerjaan dengan benar. (Sudah lama sejak saya menggunakan GGb online; gambar mental saya mungkin sudah ketinggalan zaman.)