Створіть програму, щоб правильно пронумерувати сітку кросворду.
Вхідні дані
Вхідним буде ім'я файлу, що представляє сітку кросворду. Ім'я вхідного файлу може передаватися як аргумент на стандартному вході або іншими звичайними засобами, крім жорсткого кодування.
Формат файлу сітки: текстовий файл. Перший рядок складається з двох цілих констант, розділених пробілом, M
і N
. За цим рядком розташовані M
рядки, кожен з яких складається із N
символів (плюс новий рядок), обраних із [#A-Z ]
. Ці символи трактуються таким чином, що '#'
вказують на заблокований квадрат, ' '
відкритий квадрат у головоломці без відомого вмісту та будь-яку букву на відкритий квадрат, який містить цю букву.
Вихідні дані
Вихід буде файлом нумерації і може бути надісланий до стандартного виводу, до файлу, ім'я якого походить від імені вхідного файлу, до вказаного користувачем файлу або до якогось іншого умовного призначення.
Формат файлу нумерації Текстовий файл. Рядки, що починаються з "#", ігноруються і можуть використовуватися для коментарів. Всі інші рядки містять триплет i
, розділений на вкладку m
, n
де i
представлено число, яке слід надрукувати на сітці, m
і n
являють собою рядок і стовпець квадрата, де він повинен бути надрукований. Кількість рядків і стовпців починається з 1.
Схема нумерації
Правильно пронумерована сітка має такі властивості:
- Нумерація починається з 1.
- Жоден стовпчик або проміжок відкритих квадратів не нумерується. (Ви можете припустити, що відповіді в одній символі в проблемі не буде.)
- Числа будуть знайдені в порядку підрахунку, скануючи від верхнього ряду до нижнього, беручи кожен рядок зліва направо. (Отже, кожен горизонтальний проміжок пронумерований на його лівому лівому квадраті, а кожен стовпець пронумерований в його верхньому квадраті.)
Тестовий вхід та очікуваний вихід
Вхід:
5 5
# ##
#
#
#
## #
Вихід (нехтуючи рядками коментарів):
1 1 2
2 1 3
3 2 2
4 2 4
5 2 5
6 3 1
7 3 4
8 4 1
9 4 3
10 5 3
Убік
Це перше, з чого, сподіваємось, буде кілька викликів, пов’язаних із кросвордом. Я планую використовувати послідовний набір форматів файлів протягом усього часу та створити респектабельний набір утиліт, пов’язаних із кросвордами. Наприклад, наступна головоломка вимагатиме друку ASCII-версії кросворду на основі введення та виведення цієї головоломки.
'\n'
у c на всіх платформах. Припущення полягає в тому, що вхідний файл був створений у тій же системі, яка його буде обробляти, тому це питання повинно бути прозорим. Загальна примітка про код-гольф: якщо ви працюєте на чужій мові або на чужій платформі, просто запишіть все, що може здивувати читача. Люди зроблять це на увазі, судячи з ваших даних.