Papan Megachess

8

Anda ingin membuat papan catur persegi. Ubin yang berdekatan harus bergantian hitam dan putih seperti papan catur standar, dan sudut kiri bawah dapat berupa hitam atau putih.

Program Anda akan menerima dua bilangan bulat positif, jumlah ubin hitam dan jumlah ubin putih. Ini akan selalu kurang dari 1024. Anda tidak harus menggunakan semua ubin.

Keluarkan panjang sisi maksimum dari pola papan catur yang dapat dibangun menggunakan jumlah ubin yang diberikan.

Kasus uji:

12, 15 -> 5
8, 8 -> 4    
4, 0 -> 1
Ad Hoc Garf Hunter
sumber
Hei! Saya telah mengedit pertanyaan Anda untuk mengatakan apa yang saya pikir Anda maksudkan. Jika tidak, Anda dapat mengeditnya lagi. Selamat datang di PPCG!
CG One Handed
2
Saya pikir ini adalah pertanyaan yang bagus tetapi, sayangnya, dinyatakan dengan buruk. OP berarti bahwa dengan memberi Anda beberapa ubin hitam dan beberapa ubin putih (0 hingga 1000 untuk setiap warna) temukan dimensi papan catur terbesar yang bisa Anda buat. 4] dan juga Input [12,12] dan Output [4]
J42161217
4
Anda juga memposting ini minggu lalu , di mana Anda diarahkan ke kotak pasir
xnor
8
Test case terakhir harus 1.
Nick Kennedy
2
@ SriotchilismO'Zaic, kami juga terkadang menerima solusi terpendek dalam satu bahasa tertentu. "Penjelasan terbaik", bukanlah kriteria yang valid untuk menerima solusi.
Shaggy

Jawaban:

10

JavaScript (ES7), 30 byte

b=>w=>((b<w?b:w)*2|b!=w)**.5|0

Cobalah online!

Mengingat jumlah kotak hitam b dan jumlah kotak putih w , ini menghitung:

s=2×min(b,w)+k
dengan:
k={0jika b=w1jika bw

Untuk bahkan ukuran s , kita perlu s2/2 kotak dari masing-masing jenis (misalnya untuk s=8 : 32 kotak hitam dan 32 kotak putih).

Untuk aneh ukuran s , kita perlu s2/2 kuadrat satu jenis dan s2/2 kotak dengan jenis lain (misalnya untuk s=5 : 12 kotak hitam dan 13 kotak putih, atau sebaliknya) . Parameter k diatur ke 1 jika mSebuahx(b,w)msayan(b,w)+1, yang mewakili kotak ekstra ini di satu sisi.

Arnauld
sumber
6

Jelly , 6 byte

«Ḥ+nƽ

Cobalah online!

Tautan diad yang mengembalikan ukuran papan maksimum.

Test suite untuk semua permutasi angka ke 20

Penjelasan

«      | Minimum
 Ḥ     | Doubled
  +n   | Plus 1 if inputs not equal
    ƽ | Integer square root

Jawaban Arnauld memiliki penjelasan yang bagus mengapa ini berhasil; tolong pertimbangkan untuk mengangkatnya juga!

Nick Kennedy
sumber
5

Haskell , 35 byte

x#y=floor$sqrt$min(x+y)$1+2*min x y

Cobalah online!

Penjelasan

Jawaban ini menghitung rumus berikut:

min(Sebuah+b,2min(Sebuah,b)+1)

Mengapa rumus ini berfungsi? Baiklah mari kita mulai dengan memperhatikan hal berikut:

Setiap bujur sangkar dengan panjang sisi rata bisa 2×1 .

dan

Setiap kotak dengan panjang ganjil dapat berupa ubin, sisipkan 1×1 kotak, dengan 2×1 .

Sekarang kita perhatikan bahwa jika kita menempatkan 2×1 ubin ini di papan catur masing-masing akan diletakkan di atas satu kotak hitam dan di kotak putih. Jadi jika kita membuat papan catur yang rata setiap ubin harus memiliki sepasang warna yang lain, dan jika kita membuat papan catur yang aneh setiap ubin, tetapi yang satu membutuhkan sepasang warna yang lain. Ini memberitahu kita bahwa jawabannya tidak pernah lebih dari 2min(Sebuah,b)+1. 2min(Sebuah,b)adalah jumlah maksimum pasang kita dapat membuat dan+1adalah untuk persegi terakhir yang doesnt' membutuhkan sepasang. Masalah dengan ini adalah bahwa jikaSebuah=bkita tidak akan memiliki kuadrat tambahan untuk kasus aneh. Jadi kami menambahkan kondisi lain: Hasil kami tidak boleh lebih dariSebuah+b . Itu adalah kita tidak bisa membuat kotak yang memiliki lebih banyak ubin daripada yang kita miliki.

Jadi kami hanya mengambil yang lebih rendah dari dua opsi.

min(Sebuah+b,2min(Sebuah,b)+1)

Sebuah=b2min(Sebuah,b)Sebuah+b

Ad Hoc Garf Hunter
sumber
3

Ruby , 36 byte

->x,y{'%i'%[x+y,x-~x,y-~y].min**0.5}

Cobalah online!

x-~xadalah versi golf dari 2*x+1; kita mengurangi negasi dua-komplemen x dari dirinya sendiri. Setelah itu saya hanya menggunakan rumus jawaban ini , tetapi menciutkan dua bersarang minmenjadi satu, kemudian menggunakan pemformatan string untuk memotong ke integer.

histokrat
sumber
2

Retina 0.8.2 , 50 byte

O#`\d+
\d+
$*
(1*),(1?\1)1*
$1$2
^(^1|11\1)*1*
$#1

Cobalah online! Tautan termasuk kasus uji. Penjelasan:

O#`\d+

Sortir angka dalam urutan menaik. Mari kita panggil mereka ldan h.

\d+
$*

Konversikan ke unary.

(1*),(1?\1)1*
$1$2

Hitung l + max(h, l + 1). Ini setara dengan 2 * min(b, w) + (b != w). Lihat jawaban @ Arnauld untuk alasan ini berhasil.

^(^1|11\1)*1*
$#1

Temukan akar kuadrat integer tertinggi.

Neil
sumber
2

05AB1E , 8 7 byte

Ë≠+ß·tï

Cobalah secara online atau verifikasi semua kasus uji .

Perluasan:

Menggunakan turunan sepele dari rumus @Arnauld yang digunakan dalam jawaban JavaScript untuk menyimpan byte:

s=2×min(b+k,w+k)
dengan masih:
k={0jika b=w1jika bw

Ë        # Check if the two values of the (implicit) input-pair are the same
         #  (1 if truthy; 0 if falsey)
        # Falsify (!= 1), so 1 becomes 0 and vice-versa
  +      # Add that to each of the (implicit) input-values
   ß     # Only leave the minimum of that
    ·    # Double it
     t   # Take the square root
      ï  # And truncate/floor it by casting to an integer
Kevin Cruijssen
sumber
1

Japt , 11 byte

Port solusi JS Arnauld. Mengambil input sebagai array.

ñÍÌÑ+Ur¦)¬f

Cobalah

ñÍÌÑ+Ur¦)¬f     :Implicit input of array U
ñ               :Sort by
 Í              :  Subtracting from 2
  Ì             :Last element (Yes, there are more straightforward ways of getting the minimum but I like this method and it doesn't cost any bytes)
   Ñ+           :Multiply by 2 and add
     Ur         :U reduced by
       ¦        :  Testing for inequality
        )       :End reduce
         ¬      :Square root
          f     :Floor
Shaggy
sumber
1

R , 32 byte

min(sum(n<-scan()),2*n+1)^.5%/%1

Cobalah online!

Mengambil bdan wdari stdin.

Menggunakan rumus dari jawaban ini , tetapi meningkatkan perilaku minuntuk mengambil minimum dari semua argumennya.

Giuseppe
sumber
1

Perl 6 , 29 26 byte

{0+|sqrt 2*@_.min+[!=] @_}

Terima kasih kepada Jo King untuk -3 byte.

Cobalah online!

bb94
sumber
[min] @_dapat @_.mindan Anda dapat memindahkan [!=]ke ujung untuk menghemat tanda kurung. 26 byte
Jo King
0

Japt , 10 byte

Port solusi JS Arnauld.

mV Ñ|U¦V ¬

Cobalah online!

alexz02
sumber
Selamat datang di PPCG dan selamat datang di Japt! :) Namun, perlu diketahui bahwa Anda perlu meng-lantai hasil dari akar kuadrat. Kalau tidak, ini akan gagal untuk suka 12, 12.
Shaggy