Создайте программу для правильной нумерации сетки кроссвордов.
вход
Входными данными будет имя файла, представляющего сетку кроссвордов. Имя файла ввода может быть передано в качестве аргумента на стандартном вводе или другими обычными способами, кроме жесткого кодирования.
Формат файла сетки: текстовый файл. Первая строка состоит из двух целочисленных констант, разделенных пробелами, 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 на всех платформах. Предполагается, что входной файл был создан в той же системе, в которой он будет обрабатываться, поэтому эта проблема должна быть прозрачной. Общее примечание о код-гольфе: если вы работаете на странном языке или на странной платформе, просто запишите все, что может удивить читателя. Люди будут учитывать это при оценке вашего представления.