Một hội đồng quản trị


8

Bạn muốn tạo một bàn cờ vuông. Các ô liền kề phải xen kẽ đen trắng như bàn cờ tiêu chuẩn và góc dưới bên trái có thể là đen hoặc trắng.

Chương trình của bạn sẽ có hai số nguyên dương, số lượng màu đen và số lượng gạch trắng. Chúng sẽ luôn nhỏ hơn 1024. Bạn không phải sử dụng tất cả các ô.

Xuất chiều dài mặt tối đa của mẫu bàn cờ có thể được xây dựng bằng cách sử dụng số lượng gạch đã cho.

Các trường hợp thử nghiệm:

12, 15 -> 5
8, 8 -> 4    
4, 0 -> 1

Chào! Tôi đã chỉnh sửa câu hỏi của bạn để nói những gì tôi nghĩ bạn muốn nói. Nếu không, bạn có thể chỉnh sửa lại. Chào mừng đến với PPCG!
CG One Handed

2
Tôi nghĩ rằng đây là một câu hỏi hay, nhưng thật không may, tuyên bố kém. OP có nghĩa là bằng cách cung cấp cho bạn một số gạch đen và một số gạch trắng (0 đến 1000 cho mỗi màu) tìm ra kích thước của bàn cờ lớn nhất mà bạn có thể tạo ra từ chúng. Các trường hợp thử nghiệm thú vị: Nhập [10,15] và Đầu ra [ 4] và cả Đầu vào [12,12] và Đầu ra [4]
J42161217

4
Bạn cũng đã đăng bài này vào tuần trước , nơi bạn được chuyển đến hộp cát
xnor

8
Trường hợp thử nghiệm cuối cùng phải là 1.
Nick Kennedy

2
@ SriotchilismO'Z cổ, đôi khi chúng tôi cũng chấp nhận giải pháp ngắn nhất bằng một ngôn ngữ cụ thể. "Giải thích tốt nhất", tuy nhiên, không phải là một tiêu chí hợp lệ để chấp nhận một giải pháp.
Shaggy

Câu trả lời:


10

JavaScript (ES7), 30 byte

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

Hãy thử trực tuyến!

Cho số ô vuông đen b và số ô vuông trắng w , phép tính này:

S= =2×tối thiểu(b,w)+k
với:
k= ={0nếu b= =w1nếu bw

Đối với ngay cả các kích cỡ S , chúng ta cần S2/2 ô vuông của từng loại (ví dụ cho S= =số 8 : 32 ô vuông màu đen và 32 ô vuông trắng).

Đối với kích thước lẻ S , chúng ta cần S2/2 vuông của một loại và S2/2 vuông của các loại khác (ví dụ cho S= =5 : 12 ô vuông màu đen và 13 ô vuông trắng, hoặc cách khác xung quanh) . Tham số k được thiết lập để 1 nếu mmộtx(b,w)mTôin(b,w)+1, đại diện cho hình vuông thêm này ở một bên.



5

Haskell , 35 byte

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

Hãy thử trực tuyến!

Giải trình

Câu trả lời này tính toán công thức sau:

tối thiểu(một+b,2tối thiểu(một,b)+1)

Tại sao công thức này hoạt động? Hãy bắt đầu bằng cách lưu ý những điều sau:

Mỗi hình vuông có chiều dài cạnh chẵn có thể được lát bằng gạch 2×1 .

1×12×1

2×12tối thiểu(một,b)+12tối thiểu(một,b)+1một= =bmột+b

Vì vậy, chúng tôi chỉ mất ít hơn trong hai lựa chọn.

tối thiểu(một+b,2tối thiểu(một,b)+1)

một= =b2tối thiểu(một,b)một+b


3

Ruby , 36 byte

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

Hãy thử trực tuyến!

x-~xlà một phiên bản golf của 2*x+1; chúng tôi đang trừ đi phủ định twos của x - từ chính nó. Sau đó, tôi chỉ sử dụng công thức của câu trả lời này , nhưng thu gọn hai mins lồng thành một, sau đó sử dụng định dạng chuỗi để cắt thành một số nguyên.


2

Võng mạc 0.8.2 , 50 byte

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

Hãy thử trực tuyến! Liên kết bao gồm các trường hợp thử nghiệm. Giải trình:

O#`\d+

Sắp xếp các số theo thứ tự tăng dần. Hãy gọi cho họ lh.

\d+
$*

Chuyển đổi sang unary.

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

Tính toán l + max(h, l + 1). Điều này tương đương với 2 * min(b, w) + (b != w). Xem câu trả lời của @ Arnauld để biết lý do tại sao điều này hoạt động.

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

Tìm căn bậc hai số nguyên cao nhất.


2

05AB1E , 8 7 byte

Ë≠+ß·tï

Hãy thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Ngoại lệ:

Sử dụng một dẫn xuất tầm thường của công thức @Arnauld được sử dụng trong câu trả lời JavaScript của mình để lưu một byte:

S= =2×tối thiểu(b+k,w+k)
k= ={0nếu b= =w1nếu 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

1

Japt , 11 byte

Giải pháp JS của cảng Arnauld. Đưa đầu vào như một mảng.

ñÍÌÑ+Ur¦)¬f

Thử nó

ñÍÌÑ+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



0

Japt , 10 byte

Giải pháp JS của cảng Arnauld.

mV Ñ|U¦V ¬

Hãy thử trực tuyến!


Chào mừng bạn đến với PPCG và chào mừng bạn đến với Japt! :) Lưu ý, mặc dù, bạn cần sàn kết quả của căn bậc hai. Nếu không, điều này sẽ thất bại cho những người thích 12, 12.
Xù xì
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.