Giới thiệu
Quy tắc của câu đố:
Câu đố nhị phân (còn được gọi là Takuzu hoặc Subiku) rất đơn giản để hiểu và chỉ có một vài quy tắc:
Vì tên của trò chơi là nhị phân nên khá rõ ràng, nhưng bạn chỉ có thể điền vào số không và số không.
- Không quá hai chữ số giống nhau có thể nằm cạnh nhau theo chiều dọc hoặc chiều ngang với nhau
- Mỗi hàng và mỗi cột phải chứa một số không và số bằng nhau (điều này có nghĩa là mọi trò chơi nhị phân sẽ luôn có các số chẵn).
- Có thể không có hàng trùng lặp và không có cột trùng lặp (với thứ tự chính xác của số không và số không).
Bạn có thể chơi trò chơi tại www.binarypuheads.com nếu bạn muốn.
Chiến thuật:
Do quy tắc 1, chúng ta luôn có thể điền một chữ số nếu:
- Đã có hai chữ số giống nhau theo chiều dọc hoặc chiều ngang với nhau, trong trường hợp đó chúng ta có thể điền chữ số ngược lại ở cả hai bên. Tức là .11...
→ 0110..
.
- Có hai chữ số giống nhau theo chiều dọc hoặc chiều ngang chỉ có một khoảng cách ở giữa chúng. Tức là .1.1..
→.101..
Do quy tắc 1, khi ba khoảng trống còn lại và chúng ta không thể có ba khoảng liền kề của cùng một chữ số, chúng ta có thể điền vào một trong các khoảng trống. Tức là .0.1.0
→ 10.1.0
(Chúng ta vẫn phải điền vào hai cái và chúng ta không thể có ba cái liền kề ở giữa, vì vậy khoảng cách đầu tiên phải là a 1
.)
Do quy tắc 2, chúng ta luôn có thể điền vào các khoảng trống còn lại trong một hàng hoặc cột nếu một nửa trong số chúng đã được điền bằng chữ số ngược lại. Tức là .1.011
→010011
Do quy tắc 3, chúng ta luôn có thể điền các chữ số ngược nhau nếu chỉ còn hai chữ số để giải trên một dòng có thứ tự như nhau. Tức là 101100 & 1..100
→101100 & 110100
Do quy tắc 3, đôi khi chúng ta có thể điền vào một khoảng trống khi ba khoảng trống còn lại trên một dòng có thứ tự như nhau. Tức là 010011 & .1.01.
→ 010011 & .1.010
(Ở đây chúng ta không thể điền vào 1
cuối, bởi vì điều đó có nghĩa là chúng ta phải điền vào các số không ở hai khoảng trống khác, làm cho cả hai dòng bằng nhau theo thứ tự.)
Thí dụ:
Chúng tôi bắt đầu với lưới 6x6 sau đây với một số số và số không được điền vào (và các dấu chấm là những khoảng trống chúng tôi chưa điền vào):
.1....
.10.0.
1.11..
.1....
...1.0
......
Do quy tắc 1 & 2, chúng tôi có thể điền vào các chữ số này:
.1.01.
.1010.
101100
010011
.0.1.0
.010..
Do quy tắc 1, chúng tôi có thể điền vào 1 ở hàng 5, cột 1:
.1.01.
.1010.
101100
010011
10.1.0
.010..
Do quy tắc 3, chúng tôi có thể điền 0 vào hàng 1, cột 6 (khi nhìn vào hàng 4):
.1.010
.1010.
101100
010011
10.1.0
.010..
Bây giờ chúng ta có thể tiếp tục lấp đầy các khoảng trống bằng các chữ số do quy tắc 1 & 2:
.1.010
010101
101100
010011
10.1.0
.010.1
Bây giờ chúng ta có thể kết thúc hàng 5 do quy tắc 3 (khi nhìn vào hàng 3):
.1.010
010101
101100
010011
100110
.010.1
Và sau đó chúng ta có thể hoàn thành câu đố do quy tắc 1 & 2:
011010
010101
101100
010011
100110
101001
Thử thách:
Thách thức chỉ đơn giản là: đưa ra lưới bắt đầu, đưa ra câu đố đã giải.
LƯU Ý: Bạn không phải thực hiện các quy tắc trên. Tất nhiên là bạn có thể, và nó sẽ cho bạn gợi ý về cách thực hiện thử thách này, nhưng việc củng cố giải pháp với các quy tắc trong tâm trí là hoàn toàn tốt.
Làm thế nào bạn giải quyết nó là tùy thuộc vào bạn, nhưng thách thức là đưa ra câu đố đã giải.
Quy tắc thử thách:
- Định dạng đầu vào và đầu ra cho lưới là linh hoạt, nhưng vui lòng cho biết những gì bạn sử dụng. (Tức là mảng byte 2D; Chuỗi có dòng mới; v.v.)
- Điều này ở trên cũng áp dụng cho các ký tự được sử dụng. Trong ví dụ tôi đã sử dụng
01.
, nhưng nếu bạn muốn, bạn có thể sử dụngABx
thay thế. Vui lòng cho biết định dạng đầu vào / đầu ra và ký tự bạn đã sử dụng. - Bạn chỉ có thể giả sử các kích thước lưới sau sẽ được sử dụng :
6x6
;8x8
;10x10
;12x12
;14x14
;16x16
.
Quy tắc chung:
- Đây là môn đánh gôn , vì vậy câu trả lời ngắn nhất bằng byte thắng.
Đừng để ngôn ngữ mã-golf ngăn cản bạn đăng câu trả lời với các ngôn ngữ không mã hóa. Cố gắng đưa ra một câu trả lời càng ngắn càng tốt cho ngôn ngữ lập trình 'bất kỳ'. - Các quy tắc chuẩn áp dụng cho câu trả lời của bạn, vì vậy bạn được phép sử dụng STDIN / STDOUT, các hàm / phương thức với các tham số thích hợp, các chương trình đầy đủ. Cuộc gọi của bạn.
- Lỗ hổng mặc định bị cấm.
- Nếu có thể, vui lòng thêm một liên kết với một bài kiểm tra cho mã của bạn.
- Ngoài ra, xin vui lòng thêm một lời giải thích nếu cần thiết.
Các trường hợp thử nghiệm:
Các dấu chấm chỉ được thêm vào để dễ đọc, thay vào đó hãy sử dụng khoảng trắng hoặc bất cứ thứ gì bạn thích cho các khoảng trống. Cả định dạng trong và đầu ra đều linh hoạt.
Input:
1..0..
..00.1
.00..1
......
00.1..
.1..00
Output:
101010
010011
100101
011010
001101
110100
Input:
.1....
.10.0.
1.11..
.1....
...1.0
......
Output:
011010
010101
101100
010011
100110
101001
Input:
.......1..
.00..0..1.
.0..1..0.0
..1...1...
1.1......1
.......1..
.0..1...0.
....11...0
.0.0..1..0
0...0...1.
Output:
0110010101
1001100110
1001101010
0110011001
1010100101
0101010110
1001101001
0110110100
1010011010
0101001011