Создайте программу для правильной нумерации сетки кроссвордов.
вход
Входными данными будет имя файла, представляющего сетку кроссвордов. Имя файла ввода может быть передано в качестве аргумента на стандартном вводе или другими обычными способами, кроме жесткого кодирования.
Формат файла сетки: текстовый файл. Первая строка состоит из двух целочисленных констант, разделенных пробелами, 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 на всех платформах. Предполагается, что входной файл был создан в той же системе, в которой он будет обрабатываться, поэтому эта проблема должна быть прозрачной. Общее примечание о код-гольфе: если вы работаете на странном языке или на странной платформе, просто запишите все, что может удивить читателя. Люди будут учитывать это при оценке вашего представления.Ответы:
Рубин -
210139 символовПротестировано с ruby 1.9.
источник
./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
.ruby1.9 test.rb
.PHP - 175 символов
источник
Питон,
194177176172 символовисточник
h.join(f)
я думаюnext(f)
вместо того,f.readline()
если вы> = 2,6 иначеf.next()
echo test_input_file_name | python golf.py
, это неправильно?C ++
270264260256253 charИспользовать:
Красиво отформатирован:
Я попытался прочитать весь кроссворд за один раз и использовать один цикл.
Но стоимость компенсации персонажа '\ n перевесила любую выгоду:
Сжатый: 260 символов
источник
C
184189 символовНе так много, чтобы сказать здесь; логика довольно проста. Программа берет имя файла на стандартный ввод во время выполнения. (Это так раздражает, что программа должна работать с именем файла и не может просто читать содержимое файла напрямую из стандартного ввода. Но тот, кто платит пайперу, вызывает мелодию!)
Странный
fscanf()
шаблон - моя попытка отсканировать всю первую строку, включая новую строку, но не включая начальные пробелы в следующей строке. Есть причина, почему никто не используетscanf()
.источник
5 5
, вы берете первые 5 в качестве ширины, когда вы должны были взять вторую (что, конечно, не имеет значения в этом примере).Эталонная реализация:
c99 ungolfed и более 2000 персонажей, включая различные отладочные лягушки, все еще там.
источник
PerlTeX : 1143 символа (но я еще не играл в гольф)
Нужен файл, вызванный
grid.txt
с помощью спецификации, затем скомпилируйте систочник
Скала 252:
компиляция и вызов:
источник
ОБОЛОЧКА
образец ввода / вывода:
./numberCrossWord.sh crosswordGrid.txt
источник
/bin/sh
жалобы на строку 11. Не могли бы вы сказать, какую оболочку вы используете (включая номер версии)?ANSI C 694 символа
Это версия на C, которая ищет горизонтальные или вертикальные участки двух пробелов, которые либо примыкают к краю, либо к символу «#».
Входной файл взят из stdin и должен быть:
Любые советы по уплотнению этого будут с благодарностью приняты.
Выходные данные для предоставленного примера
источник