Mari kita bicara tentang pembagi ...
Meninggalkan kotak yang sempurna (untuk sesaat), semua bilangan bulat positif dapat dinyatakan sebagai produk dari 2 pembagi mereka. Contoh cepat untuk 126
: Berikut adalah semua pembagi dari126
Seperti yang Anda lihat, semua pembagi dapat dipasangkan. Inilah yang akan kita sebut Pasangan Pembagi :
[1, 126], [2, 63], [3, 42], [6, 21], [7, 18], [9, 14]
Untuk tantangan ini, kita hanya perlu pasangan terakhir dari daftar ini (yang merupakan pasangan tengah dari gambar):.
[9,14]
Kita akan menyebut pasangan ini MaxMin Divisor Pair .
The Perbedaan MAXMIN Divisor Pair (DMDP) adalah perbedaan dari dua elemen dari pasangan yang [9,14]=5
Satu contoh lagi untuk 544
. Pembagi adalah:
[1, 2, 4, 8, 16, 17, 32 , 34, 68, 136, 272, 544]
dan DMDP (544) = 15 karena32-17=15
Bagaimana dengan kotak yang sempurna ? Semua kotak sempurna memiliki DMDP = 0
Mari kita ambil contoh 64
dengan pembagi
{1, 2, 4, 8 , 16, 32, 64}
Seperti yang dapat Anda lihat dalam hal ini, MaxMin Divisor Pair adalah [8,8]
yang telah DMDP=0
hampir kita selesaikan.
Tantangan
Diberikan bilangan bulat n>0
, keluaran berapa bilangan bulat kurang dari atau sama dengan 10000
, memiliki DMDP kurang dari n
Uji Kasus
input -> output
1->100 (those are all the perfect squares)
5->492
13->1201
369->6175
777->7264
2000->8478
5000->9440
9000->9888
10000->10000
20000->10000
Ini adalah kode-golf. Jawaban terpendek dalam byte menang .
10000
input kedua, variabel,?Jawaban:
JavaScript (ES7), 60 byte
Mungkin melebihi batas rekursi Anda, jadi Anda mungkin lebih suka versi berulang untuk 70 byte:
sumber
Jelly , 13 byte
Terima kasih 1 byte untuk Jonathan Allan.
Cobalah online!
sumber
ÆDạ"Ṛ$Ṃ
menghemat satu byte lebihÆDạ:@¥⁸Ṃ
(saya punyaạ"ṚṂ
...ȷ4RÆDÇ€<⁸S
untuk 15 - terlalu mirip - EDIT: hmm atau tidak, tidak:
terlibat ... bagaimana menurut Anda?)Java 8,
151111110101 byte-10 byte berkat @Nevay .
Penjelasan:
Coba di sini.
sumber
for(i=1,i+=Math.sqrt(x);--i>0;)if(...
untuk menghemat 1 byte.n->{int r=0,x=10000,i;for(;x-->0;r-=i-n>>-1)for(i=x;i-->1;)if(x>=i*i&x%i<1){i=x/i-i;break;}return r;}
x>=i*i
sebagai alternatif untuk digunakanMath.sqrt
, karena ini adalah kedua kalinya Anda bermain golf dalam kode saya.R , 73
77byteTerima kasih kepada @Guiseppe untuk 4 byte
Cobalah online!
Telah kehilangan fungsi vectorize untuk menghitung DMDP dan sekarang menggunakan sapply atas fungsi tersebut. Kebenaran untuk item yang kurang dari input dijumlahkan untuk hasilnya.
sumber
sum(sapply(1:1e4,function(x)min(abs((w=which(x%%1:x<1))-rev(w))))<scan())
sedikit lebih pendekMathematica, 64 byte
Cobalah di Wolfram Sandbox
Pemakaian
Penjelasan
Buat daftar pembagi, dari
1
hingga10000
. (daftar pembagi diurutkan secara otomatis)Hitung kemunculan elemen
a
, sehingga ...(input) + (left one of the middle element(s)) > (right one of the middle element(s))
Jika hanya ada satu elemen tengah, kiri = kanan.sumber
05AB1E ,
191817161512 byteCobalah online!
Penjelasan
sumber
MATL , 20 byte
Kode habis waktu dalam TIO. Berikut ini contoh dijalankan dengan kompiler offline:
sumber
R , 91 byte
Mengambil pendekatan berbeda (lebih buruk) untuk menghitung DMDP daripada solusi MickyT dengan menggunakan pengindeksan array dan
diff
untuk menghitungnya. Sayang.Cobalah online!
sumber
Mathematica,
119115 byteAkhirnya saya berhasil dan saya telah mencoba selama setengah jam terakhir. ._.
Contoh dijalankan
sumber
Cases
adalah4
byte pendek:Tr[1^Cases[Last@#-First@#&/@(Take[Divisors@#,Round[{-.1,.1}+(1+Length@Divisors@#)/2]]&/@Range@10000),n_/;n<#]]&
. Lihat tip ini .Count
lebih pendek dariCases
.Count[Last@#-First@#&/@(Take[Divisors@#,Round[{-.1,.1}+(1+Length@Divisors@#)/2]]&/@Range@10000),n_/;n<#]&
10^4
atau1*^4
lebih pendek dari10000
, dan/@Range@
sama dengan~Array~
.Mathematica, 78 byte
sumber
Cases
adalah4
byte pendek:Tr[1^Cases[Table[#2-#&@@Quantile[Divisors@i,{.5,.51}],{i,10^4}],s_/;s<#]]&
. Lihat tip ini .Count
bahkan lebih pendek:Count[Table[#2-#&@@Quantile[Divisors@i,{.5,.51}],{i,10^4}],s_/;s<#]&
Sekam , 19 byte
Tidak ada tautan TIO, karena sudah habis masa berlakunya. Versi ini menggunakan 100 di tempat 10.000 dan selesai dalam beberapa detik.
Penjelasan
Husk belum memiliki pembagi bawaan atau dukungan untuk notasi ilmiah.
sumber
Japt ,
251917 byteMenguji
Penjelasan
Input bilangan bulat implisit
U
.Buat array bilangan bulat (
õ
) dari 1 hingga 100 (L
) kuadrat.Lewati setiap fungsi (di mana
X
elemen saat ini) yang menghasilkan array dari pembagi (â
) dariX
.Memetakan di atas array pembagi, di mana
Z
elemen saat ini.Dapatkan perbedaan absolut (
a
) dariZ
danX
dibagi denganZ
.Apakah ada elemen (
d
) di array yang dihasilkan kurang dariU
?Hitung elemen kebenaran dan secara implisit mengeluarkan hasilnya.
sumber
Ruby, 62 byte
Cobalah online.
sumber
TI-BASIC, 46 byte
Perhatikan bahwa TI-BASIC adalah bahasa tokenized. Juga, E pada baris 2 adalah modal kecil E, ditemukan dengan menekan 2ND +,.
Hasilnya akan di D, dan Ans segera setelah eksekusi program. Jika ingin ditampilkan, menambahkan dua byte lagi (baris baru dan
Ans
) sudah cukup.sumber
Python 2 , 134 byte
Cobalah online!
Eugh ... perlu melakukan yang lebih baik.
sumber
len(filter(lambda n:n<i,...))
dengansum(n<i for n in ....)
Python 2 , 83 byte
Sedikit di sisi lambat, menggunakan 5 detik per test case
Cobalah online!
sumber
PHP, 94 +1 byte
Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
VB.NET (.NET 4.5)
116115 bytePenjelasan:
Sebuah fungsi yang dibutuhkan
n
sebagai parameter, dan mengembalikan hasilnya.Mulai dari akar kuadrat, dan mencari bilangan bulat terdekat yang membagi secara merata (akan menjadi lebih kecil dari
MaxMin Divisor Pair
). Kemudian dapatkan yang lebih besar dari pasangan (i/s
), temukan perbedaannya, dan bandingkan dengan input.Strategi bermain golf yang digunakan:
Dim
itu mahal, jadi semakin sedikit variabel yang saya nyatakan lebih baik.s
sebagai tipe integral, itu dilemparkan ke lantai untuk saya.^
sebagai eksponen. Jadi sementara10000
5 karakter,10^4
hanya 4.return
, nilai variabel fungsi akan dikembalikan sebagai gantinya. Jadi saya menyimpan karakter dengan tidak mendeklarasikan variabel yang terpisah dan tidak menggunakan pernyataan pengembalian.i
diasumsikanInteger
karena saya menetapkan literal integer.A
diasumsikanObject
tetapi segera setelah saya menambahkan bilangan bulat, itu berperilaku sepertiInteger
.if
memeriksa apakah perbedaannya memuaskan, tambahkan langsung ke hasil dengan melemparkan boolean ke integer. Namun, VB menggunakan-1
untukTrue
, jadi kurangi untuk mendapatkan tanda yang benar.Mod
tidak ingin0
. Mengambil modulus dari angka negatif di VB.NET akan memberikan hasil negatif. Tapi, semuanya positif jadi saya bisa menyimpan byte dengan mengubahnya<>
menjadi>
.Byte
menyimpannya, menghemat byte dalam deklarasi dengan menggunakan jenis yang lebih pendek.Cobalah online!
sumber
C # (.NET Core) , 104 byte
Cobalah online!
sumber