Сапер - популярна комп’ютерна гра, яку ви, ймовірно, витратили на час, де ви намагаєтесь розкрити клітини, які є мінами, у прямокутній сітці на основі підказів, скільки сусідніх мін має кожна клітина, яка не має шахти. І якщо ви його не зіграли, зробіть це тут .
Чудовим математичним фактом про сітку шахтника (він же дошка) є те, що:
Дошка та її доповнення мають однакову загальну кількість шахт . ( Доказ )
Тобто, якщо у вас повністю виявлена сітка шахтного трактора, сума всіх чисел на цій сітці, тобто загальна сума шахти , буде дорівнює загальній сумі шахти комплектації сітки, яка є сіткою, на якій замінено кожну шахту. з немінною і кожен немінник замінюється міною.
Наприклад, для сітки шахт
**1..
34321
*2**1
загальна сума шахти - 1 + 3 + 4 + 3 + 2 + 1 + 2 + 1 = 17.
Доповненням сітки є
24***
*****
3*44*
який знову має 2 + 4 + 3 + 4 + 4 = 17.
Напишіть програму, яка займає довільну сітку шахтника в текстовій формі, де *
представляє шахту, і 1
через 8
репрезентуйте кількість мін, що прилягають до немінної комірки. Ви можете використовувати .
або ( 0
або
пробіл) для представлення комірок без мінних сусідів на ваш вибір. Можна припустити, що вхідна сітка буде правильно позначена, тобто кожна немінна комірка точно позначатиме загальну кількість мін, що безпосередньо примикають до неї ортогонально або по діагоналі.
Ваша програма повинна надрукувати доповнення сітки в тому ж форматі ( з використанням тих же .
, 0
або ,
як ви очікували на вході).
Виграє найкоротший код у байтах.
- Замість програми ви можете написати функцію, яка приймає вхідну сітку як рядок та друкує або повертає сітку доповнення.
- Новий рядок у вході або виході є нормальним, але не повинно бути інших символів, крім тих, що утворюють сітку.
- Можна припустити, що сітка 1 × 1 буде найменшим входом.
Випробування
Всі входи та виходи можуть бути замінені, оскільки доповненням доповнення є оригінальна сітка. Сітки можна також обертати для подальших тестових випадків.
Вхід:
111
1*1
111
Вихід:
***
*8*
***
Вхід:
.
Вихід:
*
Вхід:
*11*1.1**1...1***1.....1*****1..........
Вихід:
1**2***11*****1.1*******1...1***********
Вхід: ( Приклад вирізання вузла )
**212*32
333*33**
1*22*333
222222*1
*33*2232
2**22*2*
Вихід:
24***4**
***7**64
*8**7***
******8*
4**7****
*33**5*3
?
допустимо використання кінцевого роздільника (наприклад ) на рядку після остаточного рядка дошки, або я можу взяти кількість вхідних рядків через командний рядок?