Latar belakang: angka Ramsey memberikan jumlah minimum simpul dalam grafik lengkap sehingga pewarnaan tepi merah / biru memiliki setidaknya satu merah atau satu biru . Batas untuk lebih besar sangat sulit untuk ditetapkan.v K v K v K r K s r , s
Tugas Anda adalah menampilkan angka untuk .1 ≤ r , s ≤ 5
Memasukkan
Dua bilangan bulat dengan dan .1 ≤ r ≤ 5 1 ≤ s ≤ 5
Keluaran
seperti yang diberikan dalam tabel ini:
s 1 2 3 4 5
r +--------------------------
1 | 1 1 1 1 1
2 | 1 2 3 4 5
3 | 1 3 6 9 14
4 | 1 4 9 18 25
5 | 1 5 14 25 43-48
Perhatikan bahwa dan dapat dipertukarkan: .s R ( r , s ) = R ( s , r )
Untuk Anda dapat mengeluarkan bilangan bulat apa pun antara dan , inklusif. Pada saat pertanyaan ini diposting, ini adalah batasan yang paling dikenal.43 48
5,5
) bahwa ini mungkin cocok di bawah kolmogorov-kompleksitas (atau apakah hanya input-non, input tetap cocok?)Jawaban:
JavaScript (ES6),
5149 byteMengambil input dalam sintaks currying
(r)(s)
.Cobalah online!
Bagaimana?
Sebagai perkiraan pertama, kami menggunakan rumus:
Jika kita memiliki , kita cukup menambahkan 1 :min ( r , s ) < 3 1
Jika tidak, kami menambahkan nilai yang diambil dari tabel pencarian yang key- nya didefinisikan oleh:k
sumber
JavaScript (Node.js) ,
5655 byteCobalah online! Saya perhatikan bahwa tabelnya menyerupai segitiga Pascal tetapi dengan faktor koreksi. Sunting: Disimpan 1 byte berkat @sundar.
sumber
x*y>19
denganx+y>8
.Jelly ,
1716 byteCobalah online! Atau lihat test-suite .
GantiR ( 5 , 5 ) 43 44 45 46 47 48
0
dengan+
,,
,-
,.
, atau/
untuk set sama dengan 43 , 44 , 45 , 46 , atau 47 masing-masing (bukan 48 di sini).Bagaimana?
Karena kita mungkin menemukan bahwa:R ( r , s ) ≤ R ( r - 1 , s ) + R ( r , s - 1 )
Ini
’ScḢƊ
dan akan menghasilkan:Jika kita kurangi satu untuk setiap kali sembilan masuk ke hasil, kita selaraskan tiga lagi dengan tujuan kita (ini dicapai dengan
_:¥9
):y
“ ı?0‘y
sumber
Python 2 , 62 byte
Cobalah online!
Python 2 , 63 byte
Cobalah online!
Ini konyol, saya akan segera menyesal memposting ini ... Tapi eh, ¯ \ _ (ツ) _ / ¯. Dicukur 1 byte berkat Jonathan Allan kami yang baik :). Mungkin akan kalah oleh sekitar 20 byte segera ...
sumber
Julia 0.6 ,
71615957 byteCobalah online!
Tidak digabungkan (well, sedikit lebih mudah dibaca):
Apa fungsinya?
Mengambil input sebagai larik yang
A
mengandung r dan s. Buka paket array ke r dan s dengan angka lebih kecil sebagai r, menggunakan(r,s)=sort(A)
.Jika r adalah 1, output harus 1. Jika r adalah 2, output harus menjadi apa pun s.
sr - 1 akan s0= 1 untuk r = 1, dan s1= s untuk r = 2.
Jadi,
r<3?s^(r-1)
atau lebih pendek,r<3?s^~-r
Untuk yang lain, saya mulai dengan memperhatikan bahwa outputnya adalah:
(Saya awalnya bekerja dengan f (5,5) = 45 untuk kenyamanan.)
Ini tampak seperti pola yang berpotensi digunakan - mereka semua memiliki
2r
kesamaan, 17 adalah 8 * 2 + 1, 35 adalah 17 * 2 + 1, 10 adalah 3 * 3 + 1. Saya mulai dengan mengekstraksi nilai dasar dari [0, 3, 8], karena[0 3 8][s-2]
(ini kemudian menjadi lebih pendek(s^2-4s+3)
).Mencoba untuk mendapatkan nilai yang benar untuk r = 3, 4, dan 5 dengan ini melewati banyak tahap, termasuk
dan
Memperluas yang terakhir dan menyederhanakannya menyebabkan kode yang diposting.
sumber
x86,
4937 byteTidak terlalu dioptimalkan, hanya mengeksploitasi properti dari tiga baris pertama tabel. Ketika saya sedang menulis ini, saya menyadari bahwa kode ini pada dasarnya adalah tabel lompat sehingga tabel lompat dapat menghemat banyak byte. Input
eax
danebx
, keluaraneax
.-12 dengan menggabungkan kasus
r >= 3
menjadi tabel pencarian (awalnya hanyar >= 4
) dan menggunakan saran Peter Cordes daricmp
/jae
/jne
dengan bendera masih diatur sehinggar1,r2,r3
hanya dibedakan oleh satucmp
! Juga mengindeks ke tabel dengan cerdas menggunakan offset konstan.Hexdump
sumber
r1: cmp $2, %al
Sayajae r2
akan mengatur flag sehingga Anda dapat menggunakannyar2: jne r3
tanpa yang laincmp
. Target lompat dir1
bisa beruparet
tempat lain, dan jatuh ker2
. (Membalikkan kondisinya). BTW, ini adalah pertanyaan kode-golf pertama yang saya lihat setelah menjawab pertanyaan pendek penggunaan tabel offset lompatan SO Anda. Saya kira saya memilih yang tepat dari HNQ :)r4
dapat menjadi salah satu instruksi:mov table-8(%ebx,%eax), %al
. IDK mengapa Anda menggunakan instruksi terpisah untuk memindahkan alamat tabel ke dalam register. Tetapi salah satu hal utama adalah bahwa offset konstan dari simbol tidak memerlukan biaya tambahan karena sudah berkumpul ke alamat absolut 32-bit. Format file objek dapat mewakili referensi simbol dengan offset ketika linker mengisi alamat akhir sehingga kompiler tidak harus meletakkan label terpisah pada setiap bidang struct, atau setiap elemen array ...ret
untuk r1 dan r2.mov %ebx, %eax
keexit
, jadi selalu berjalan setelah r3, dan r2 melompat ke sana atau jatuh ke r3? Kemudian r3 menghasilkan hasilnya dalam BL dengansub %bl, %al
/cmp $10, %al
/jne exit
/add $4, %bl
(perubahan ukuran netral: cmp vs add dapat menggunakan al, bentuk pendek imm8). Keuntungannya adalah ia menghapusret
r2 juga. Hmm tidak itu tidak berfungsi, mungkin mungkin jika Anda meniadakan entri tabel atau sesuatu? Dan itu mungkin sesuatu yang Anda butuhkan. Saya belum memikirkan hal ini dan sayangnya tidak punya waktu untuk melakukannya: /Python 2 , 70 byte
Cobalah online!
sumber
MATL,
2521 byteCobalah di MATL Online
Mencoba untuk mengirim jawaban Jelly Jonathan Allan ke MATL.
+2-lGqXn
- sama dengan jawaban itu: hitungt8/k
- Gandakan itu, bagi dengan 8 dan lantai-
- kurangi itu dari hasil sebelumnya (Kami kurangi berapa kali 8 masuk dalam angka, bukannya 9 dalam jawaban Jelly. Hasilnya sama untuk semua kecuali 35 dan 70, yang di sini berikan 31 dan 62.)t20/k
- duplikat hasil itu juga, bagi dengan 20 dan lantai (memberi 0 untuk hasil yang sudah benar, 1 untuk 31, 3 untuk 62)6*
- kalikan dengan 6-
- kurangi itu dari hasil (31 - 6 = 25, 62 - 18 = 44)Lebih tua:
Cobalah di MATL Online
sumber
Python 3 , 74 byte
Cobalah online!
sumber
Proton , 52 byte
Dekat-port jawaban Python saya .
Cobalah online!
sumber
Java 8, 62 byte
Fungsi Lambda, port dari jawaban JavaScript Arnauld . Cobalah online di sini .
Java, 83 byte
Fungsi rekursif, port dari jawaban JavaScript Neil . Cobalah online di sini .
sumber
C (gcc), 57 byte
Fungsi rekursif, port dari jawaban JavaScript Neil . Cobalah online di sini .
C (gcc), 63 byte
Port of Arnauld menjawab JavaScript . Cobalah online di sini .
sumber