Это то, что я думал, что этот вопрос будет, прежде чем я полностью прочитал его.
Группа игроков в гольф с кодами заходит в пиццерию «Девятнадцатый укус» и заказывает пиццу. Он имеет неправильную форму и состоит из единичных квадратов. Ваша задача - помочь им нарезать его на одинаковые кусочки. То есть ломтики должны иметь одинаковую форму и размер; они могут вращаться, но не переворачиваться / отражаться. Например, если это фигуры тетриса, они должны быть одного типа, вы не можете использовать как фигуру L, так и фигуру J.
вход
Вам будет указано количество человек в группе в первой строке (всегда целое число от 2 до 10 включительно), за которым следует прямоугольная матрица символов '' (пробел) и "#", представляющих пиццу. Все символы «#» связаны через свои края. Количество символов «#» гарантированно будет кратным количеству людей.
Выход
Вы должны напечатать ту же матрицу, где каждый символ «#» заменяется цифрой от 0 до n-1 (n - количество человек). Каждая цифра должна отмечать срез. Форма среза должна быть соединена через квадратные края. Нумерация срезов не должна быть в каком-то определенном порядке. Если есть несколько способов нарезки пиццы, любой из них приемлем.
Если вы не можете разрезать пиццу так, как требуется, вы должны напечатать строку «Нет пиццы для вас!» вместо.
счет
Это код гольф. Ваша оценка будет количество байтов в программе. Символы будут учитываться в кодировке UTF-8. Самый низкий балл побеждает.
Примеры
Входные данные:
3
#
###
####
#
Выход:
0
100
1122
2
Входные данные:
4
###
# #
###
Выход:
001
2 1
233
Входные данные:
2
# #
######
Выход:
No pizza for you!
Входные данные:
5
#
####
#####
#####
#####
####
#
Выход:
0
1000
21110
32221
43332
4443
4
Входные данные:
4
#
####
######
#####
####
Выход:
0
1000
111203
12233
2233
Требования
- Вы должны написать полную программу, которая читает из стандартного ввода и записывает в стандартный вывод.
- Программа должна быть запущена в Linux с использованием свободно доступного программного обеспечения.
- Ваша программа должна завершить каждый из приведенных выше примеров менее чем за 1 минуту на современном компьютере.
- Нет стандартных лазеек.
источник
Ответы:
Код PHP,
1808971 байтБыстрая и грязная реализация в PHP. Сначала перебор всех возможных форм срезов, затем перебор всех положений и ориентаций срезов.
Использование:
cat pizza.txt | php pizza.php
Редактирование: уменьшил размер кода более чем на 45%, переписав алгоритм с использованием рекурсии, а не вложенных циклов. Тем не менее, это ест память (и пиццу ;-)). Пицца больше 8х8, вероятно, не хватит памяти. Вариант с вложенным циклом может легко обрабатывать любой размер, но в два раза больше размера кода.
Незакрытый документированный код
Ниже приведен документированный, оригинальный код. Чтобы сохранить здравомыслие, я работал с полным исходным кодом и написал простой скрипт-минификатор, чтобы убрать такие выражения, как
assert()
иerror_reporting()
, удалить ненужные скобки, переименовать переменные, функции и константы, чтобы сгенерировать вышеприведенный код.источник
define('_',98)
, разве это не конфликтует сfunction _
? Я не знаю php, поэтому не могу сказать ...