Diberi angka dari 1 hingga 24, menampilkan angka berciuman sesuai pengetahuan terkini (beberapa angka akan memiliki lebih dari satu hasil yang dapat diterima). Pengetahuan tentang geometri tidak penting karena semua output tercantum di bawah ini.
Dari halaman Wikipedia pada Masalah Nomor Berciuman :
angka ciuman didefinisikan sebagai jumlah bola unit yang tidak tumpang tindih yang dapat diatur sedemikian rupa sehingga masing-masing menyentuh bola satuan yang diberikan lainnya
Yaitu, mengingat satu unit bola, berapa banyak bola unit yang bisa menyentuhnya tanpa ada yang tumpang tindih? Pertanyaan akan ditanyakan dalam ruang dimensi N, di mana bola dipahami sebagai bola dimensi N-1.
Sebagai contoh:
- dalam ruang 2 dimensi, sebuah lingkaran satuan dapat menyentuh 6 lingkaran satuan lainnya.
- dalam ruang 3 dimensi, sebuah unit bola dapat menyentuh 12 bola unit lainnya.
Halaman Wikipedia mencantumkan nilai untuk ruang 1 hingga 24 dimensi. Namun, beberapa di antaranya belum diketahui secara akurat, sehingga hanya batas bawah dan atas yang diberikan. Tabel direproduksi di sini sehingga akan tetap diperbaiki, terlepas dari masa depan penyempitan rentang karena bukti baru. Solusi dinilai berdasarkan tabel tetap ini, bahkan jika halaman Wikipedia diubah di masa mendatang.
Daftar batas
Dimension Lower bound Upper bound
1 2 2
2 6 6
3 12 12
4 24 24
5 40 44
6 72 78
7 126 134
8 240 240
9 306 364
10 500 554
11 582 870
12 840 1357
13 1154 2069
14 1606 3183
15 2564 4866
16 4320 7355
17 5346 11072
18 7398 16572
19 10668 24812
20 17400 36764
21 27720 54584
22 49896 82340
23 93150 124416
24 196560 196560
Memasukkan
Dimensi: Integer dari 1 hingga 24 (inklusif).
Di sini "integer" menunjukkan bahwa input tidak akan memiliki bagian fraksional - mungkin 2
atau 3
tetapi tidak pernah 2.5
. Solusi mungkin masih mengambil input sebagai float, atau string, misalnya.
Keluaran
Angka dalam rentang yang relevan, dari batas bawah ke batas atas untuk input tersebut (inklusif).
Outputnya harus deterministik (selalu sama untuk input yang sama).
Output harus bilangan bulat. Misalnya, untuk input 5
output yang valid yang mungkin adalah 40
, 41
, 42
, 43
, 44
. Perhatikan ini adalah batasan pada nilai, bukan tipe. Dapat diterima untuk mengembalikan pelampung, asalkan tidak ada bagian pecahan. Misalnya, 41.5
tidak valid, tetapi 41.0
valid.
Mencetak gol
Ini adalah kode-golf . Skor Anda adalah jumlah byte dalam kode Anda. Untuk setiap bahasa, pemenangnya adalah solusi dengan skor terendah.
sumber
Jawaban:
Julia 0,6 , 52 byte
Cobalah online!
Bagaimana?
Pembelajaran mesin! (Agak. Mungkin. Tidak juga. )
c
ceil
sumber
MLBase
!!! J / k, garis-garis di sekitar ML kabur seperti biasa, tapi ini mungkin adalah terlalu dasar untuk layak pembelajaran mesin label. Dan lagi, selalu berguna untuk memasukkan kata kunci!x86,
62595350 byteSolusi saya menggunakan tabel pencarian byte dan bergeser dengan 2 (tanpa perhitungan FP). Dimensi 9 hingga 23 memberikan peluang yang cukup untuk pemindahan gigi. Input masuk
eax
dan keluaran masukecx
.-3 dengan menukar
eax
danecx
karenacmp $imm, %al
lebih pendek daricmp $imm, %cl
.-4 dengan tidak memperlakukan N = 24 case secara terpisah tetapi menerapkan penyesuaian untuk semua kasus 1024.
-2 dengan tidak kembali lebih awal (bodoh)
-3 dengan menggunakan tabel sebagai offset dan
movzbl
bukannya nol denganxor
Hexdump (
.text
bukan tabel.data
)sumber
.rodata
, bukan.data
. (Atau pada Windows, tampaknya.rdata
). The.rodata
bagian akan dikaitkan sebagai bagian dari segmen teks.shl
, terutama ketika nomor Anda tidak ditandatangani (Anda biasamovzbl
memuatnya, bukanmovsbl
). Tentu sajasal
hanya nama lain untuk opcode yang sama. memancarkan gccsal
, tetapi sangat jarang melihatnya dalam kode tulisan tangan.JavaScript (ES6), 60 byte
Cobalah online!
Bagaimana?
Semua istilah lain dihitung secara rekursif, menggunakan:
mengarah ke rasio berikut:
Hasil akhirnya akhirnya lantai dan dikembalikan.
Ringkasan hasil
Hasil perkiraan diberikan dengan 2 tempat desimal.
sumber
Jelly ,
2926 byteCobalah online!
Bagaimana itu bekerja
sumber
JavaScript (Node.js) ,
12099 byteTurun 21 byte. Big pengurangan berkat saran TSH untuk menambah lubang ke awal dari array (tabungan dua byte pergi dari
n-1
ken
, dan bertujuan untuk angka bulat dalam lebih rendah untuk dan atas-batas, sehingga menyusut mereka dari notasi fixed-point seperti1154
untuk notasi eksponensial seperti2e3
.Sekali lagi, tujuan awal saya adalah menunjukkan betapa ringannya cara "bodoh" itu (misalnya, tidak menggunakan matematika nyata, seperti jawaban Arnauld. Sangat mengesankan bahwa masih ada ruang untuk mengecilkannya tanpa transformasi atau perhitungan.
Cobalah online!
Dua kali panjang jawaban Arnauld, 0 jumlah kerumitan.
JavaScript (Node.js) ,
129128 byte(-1 byte berkat saran untuk menggunakan bitshifting)
Cobalah online!
Untuk memenuhi tuntutan menjadi menarik, saya mencuri logika dari jawaban x86, dan membangun array dari itu. Membuatnya 9 byte lebih lama. Namun sedikit lebih menarik.
sumber
f=
, perubahan(x)
untukx
, menambah lubang dan perubahanx-1
untukx
. TIO ; dan mungkin mengumpulkannya TIO 99 byteRunic, 173 byte
(Perhatikan bahwa sudut kanan bawah harus dihitung untuk byte: mereka secara implisit diisi dengan spasi.)
Exe TIO membutuhkan pembaruan yang bergantung pada jawaban ini (dan saya sedang memperbaiki beberapa lubang lain sebelum meminta Dennis untuk membangun kembali). Tetapi memasukkan nilai dalam (pastikan untuk menambahkan spasi putih pada baris 2 dan 3 jika menggunakan lebih dari satu karakter untuk nilai pada baris pertama). Inilah cara termudah untuk menulis nilai yang dibutuhkan:
Cobalah online!
Secara fungsional ini adalah port jawaban Julia sundar (tetapi Runic tidak memiliki perintah untuk mendorong
e
ke stack (atau benar-benar, nilai desimal apa pun), sehingga diperlukan pendekatan). Perkiraan untuke
input kurang dari 8 lebih tepat, karena hilangnya presisi mengakibatkan nilai-nilai berada di luar kisaran output yang diijinkan (misalnya7
akan menghasilkan 125).Ceil()
dicapai dengan mengkonversi ke karakter dan kemudian kembali ke angka (ini gagal untuk nilai yang sangat besar, jadi pada 40k saya membaginya dengan 100, lakukan konversi ke dan kembali, lalu kalikan dengan 100 lagi).Mungkin ada beberapa ruang untuk menyederhanakan pengaturan (misalnya menjalankan titik masuk secara vertikal, di bawah, atau menemukan cara untuk mengompres perkiraan untuk
e
), tetapi saya senang dengan hanya dapat melakukan perhitungan.161 byte.
Pembaruan juru bahasa:
Dengan pembacaan input perbaikan dorong , Runic sekarang memiliki beberapa fungsi matematika dan kemampuan untuk mengurai string sebagai ganda. Itu akan sangat menyederhanakan jawaban ini, tetapi saya akan membiarkannya untuk memamerkan upaya yang saya lakukan ke dalamnya (saya menambahkan satu argumen fungsi Math dan string parsing segera setelah posting: Saya sudah memiliki Sin / Cos / Tan on daftar tugas saya, tetapi belum mempertimbangkan Exp, Abs, Log, dll. dan kehabisan karakter). TIO harus diperbarui dalam 24-48 jam ke depan, tergantung pada saat Dennis melihatnya.
212,+16,+1c2*,+1cX,+
akan mengurangi menjadi ->1'eA
dengan pembaruan juru bahasa ini.A
muncul karakter dan nilai dan melakukan operasi Matematika pada nilai berdasarkan karakter muncul (e
dalam hal ini adalahExp()
danExp(1)
mengembalikan e ).sumber