Minesweeper là một trò chơi máy tính phổ biến mà bạn có thể đã lãng phí thời gian để chơi, khi bạn cố gắng tiết lộ các ô là các mỏ trong một lưới hình chữ nhật dựa trên gợi ý về số lượng mỏ mà mỗi ô không phải của tôi có. Và trong trường hợp bạn chưa chơi nó, hãy làm như vậy ở đây .
Một thực tế toán học tiện lợi về lưới Minesweeper (còn gọi là bảng) là:
Một bảng và bổ sung của nó có cùng tổng số mỏ . ( Bằng chứng )
Điều đó có nghĩa là nếu bạn có lưới Minesweeper hoàn toàn được tiết lộ, tổng tất cả các số trên lưới đó, tức là tổng của mỏ , sẽ bằng tổng số của phần bù của lưới, là lưới nơi mọi mỏ đã được thay thế với một cái không phải của tôi và mỗi cái không của tôi được thay thế bằng một cái mỏ.
Ví dụ: đối với lưới Minesweeper
**1..
34321
*2**1
tổng số mỏ là 1 + 3 + 4 + 3 + 2 + 1 + 2 + 1 = 17.
Phần bù của lưới là
24***
*****
3*44*
trong đó có tổng cộng 2 + 4 + 3 + 4 + 4 = 17 một lần nữa.
Viết chương trình lấy lưới Minesweeper tùy ý ở dạng văn bản, trong đó *
đại diện cho một mỏ và 1
thông qua 8
đại diện cho số lượng mỏ nằm cạnh một ô không phải của tôi. Bạn có thể sử dụng .
hoặc 0
hoặc
(dấu cách) để biểu diễn các ô không có hàng xóm của tôi, tùy bạn chọn. Bạn có thể giả định rằng lưới đầu vào sẽ được đánh dấu chính xác, tức là mỗi ô không phải của tôi sẽ biểu thị chính xác tổng số mỏ ngay lập tức liền kề với nó theo đường trực giao hoặc theo đường chéo.
Chương trình của bạn cần phải in bổ sung của lưới điện trong các định dạng tương tự (sử dụng cùng một .
, 0
hoặc
như bạn mong đợi trong dữ liệu).
Mã ngắn nhất tính bằng byte thắng.
- Thay vì một chương trình, bạn có thể viết một hàm lấy lưới đầu vào dưới dạng chuỗi và in hoặc trả về lưới bổ sung.
- Một dòng mới ở đầu vào hoặc đầu ra là tốt, nhưng không nên có các ký tự khác ngoài các ký tự tạo thành lưới.
- Bạn có thể giả sử lưới 1 × 1 sẽ là đầu vào nhỏ nhất.
Các trường hợp thử nghiệm
Tất cả các đầu vào và đầu ra có thể được hoán đổi vì phần bù của phần bù là lưới ban đầu. Các lưới có thể được xoay cũng như cho các trường hợp thử nghiệm thêm.
Đầu vào:
111
1*1
111
Đầu ra:
***
*8*
***
Đầu vào:
.
Đầu ra:
*
Đầu vào:
*11*1.1**1...1***1.....1*****1..........
Đầu ra:
1**2***11*****1.1*******1...1***********
Đầu vào: ( Ví dụ về nút thắt )
**212*32
333*33**
1*22*333
222222*1
*33*2232
2**22*2*
Đầu ra:
24***4**
***7**64
*8**7***
******8*
4**7****
*33**5*3
?
) trên dòng sau khi dòng cuối cùng của bảng có thể chấp nhận được hay tôi có thể lấy số lượng dòng đầu vào thông qua dòng lệnh?