Tro choi
Gần đây, phần lớn thời gian của tôi đã bị chiếm bởi một trò chơi gây nghiện trên điện thoại của tôi, được gọi là Logic Dots, đã truyền cảm hứng cho tôi để viết thử thách này. Sẽ dễ dàng hơn để giải thích các quy tắc nếu tôi cho bạn xem màn hình trò chơi, vì vậy đây là một ảnh chụp màn hình của một câu đố chưa giải quyết và đã giải quyết:
Bây giờ ở đây, có ba điều chính cần chú ý.
- Bảng trò chơi (lưới ô vuông 4 x 4 ở trung tâm)
- Các hình dạng bắt buộc (các dấu chấm được liên kết trong thanh thứ hai từ trên xuống, dưới điểm số và menu, v.v.), đó là tất cả các dòng hoặc
a
bằng 1 hình chữ nhật - Các số trên các hàng và cột, biểu thị số lượng chấm cần có trong cột, cho một giải pháp
Mục tiêu của trò chơi là để phù hợp với các hình dạng cần thiết vào lưới. Bạn có thể xoay các hình dạng, nhưng chúng không thể đi theo đường chéo.
Trong giải pháp, lưu ý rằng tất cả các hình dạng được tạo chính xác một lần (vì chúng chỉ trong các hình dạng được yêu cầu một lần) và trong trường hợp này chúng đều nằm ngang nhưng chúng cũng có thể thẳng đứng. Màu hồng điền vào hình vuông biểu thị hình vuông không được sử dụng.
Đây là một lưới lớn hơn và phức tạp hơn một chút:
Lưu ý rằng trong câu đố chưa được giải quyết, đã có một vài ô vuông được điền vào Các ô vuông màu xám biểu thị các ô vuông bị chặn mà bạn KHÔNG THỂ đặt một dấu chấm lên. Các chấm có đuôi cho bạn biết rằng một chấm nằm ở vị trí đó và nó liên kết với ít nhất một dấu chấm nữa theo hướng đuôi, nhưng không theo bất kỳ hướng nào khác (kể cả hướng ngược lại).
Ký hiệu
Đối với phần còn lại của bài đăng này, tôi sẽ đề cập đến bảng bằng cách sử dụng các biểu tượng sau:
- <,>, ^, v - Biểu thị một dấu chấm được đặt sẵn với đuôi mở rộng theo hướng của điểm
- * - Biểu thị một dấu chấm. Nếu được đưa ra trên một lưới chưa được giải quyết (đầu vào), nó là một hình dạng riêng lẻ. Nếu ở đầu ra, thì nó được kết nối với các chấm xung quanh nó.
- # - Biểu thị một ô vuông bị chặn (nơi bạn không thể đặt dấu chấm)
- -, | (dấu gạch ngang và thanh) - Biểu thị một dấu chấm với đuôi phải và trái và một dấu chấm có đuôi lên và xuống tương ứng
- ** (ký tự khoảng trắng) - ** Biểu thị một khoảng trống
Sử dụng các ký hiệu này, trường hợp ví dụ sau (chưa giải quyết) có thể được trình bày như sau:
<
#
^ #
Và giải pháp có thể được trình bày dưới dạng:
*< * *
*
*
* *
* *#*
^ # *
Lưu ý rằng không có hai hình dạng có thể chạm theo chiều ngang, chiều dọc hoặc đường chéo , vì vậy trường hợp sau đây không hợp lệ:
***
**
**
Thử thách
Thách thức của bạn là giải quyết bất kỳ câu đố logic logic nào, bao gồm từ 4 đến 9x9. Bạn sẽ nhận được bốn dòng đầu vào, sau đó là bảng trò chơi. Các dòng sẽ như sau:
- Dòng thứ nhất, Hình dạng - Các hình dạng cần tìm, mỗi hình được cho dưới dạng
sizexquantity
(ví dụ:3x2
cho hai hình có chiều dài ba) và cách nhau bởi một khoảng trắng. Dòng ví dụ:3x1 2x1 1x1
- Dòng thứ 2, Cột - Một danh sách được phân tách bằng dấu cách của số lượng chấm cần thiết cho mỗi cột. Dòng ví dụ:
1 1 2 2
- Dòng thứ 3, Hàng - Một danh sách được phân tách bằng dấu cách của số lượng chấm cần thiết cho mỗi hàng. Dòng ví dụ:
3 0 3 0
- Dòng thứ 4, Kích thước bảng - Một số nguyên duy nhất, kích thước bảng,
B
Sau đó, bảng được đưa ra và là B
các dòng đầu vào đại diện cho bảng bằng cách sử dụng ký hiệu được đề cập ở trên. Ví dụ, đầu vào hoàn chỉnh cho trường hợp ví dụ sau như sau:
4x1 3x1 2x2 1x2
1 4 0 3 0 5
4 1 1 2 3 2
6
<
#
^ #
Chương trình của bạn sau đó sẽ xuất bảng đã giải quyết, trong cùng một ký hiệu. Đầu ra khớp với đầu vào trên như sau:
** * *
*
*
* *
* *#*
* # *
Lưu ý rằng một bảng trò chơi có thể có nhiều giải pháp. Trong trường hợp này, chỉ cần xuất một giải pháp hợp lệ. Ngoài ra, chương trình của bạn phải xuất ra một giải pháp chính xác trong vòng 10 giây trên một máy tính để bàn hợp lý cho lưới 10 x10 phức tạp.
Đây là mã golf, vì vậy ít byte nhất sẽ thắng.
Các trường hợp thử nghiệm
Đầu vào 1
3x2 1x4
2 2 3 1 2
4 0 3 0 3
5
#
#
*
Đầu ra 1
*** *
***#
#
* * *
Đầu vào 2
3x1 1x6
2 0 4 0 3
3 1 2 1 2
5
*
#
Đầu ra 2
* * *
*
* *
* #
* *
Đầu vào 3
5x1 4x1 2x1 1x2
1 2 3 3 2 2
0 5 0 4 0 4
6
#
-
#
<
Đầu ra 3
#
*****
****
#
* ** *
t no two shapes can touch horizontally, vertically or diagonally
(cái này nên ở đầu, không bị mất gần như cuối, nhưng dù sao thì ...)