Возведение квадратов в квадрат - это процесс разбиения квадрата, используя только другие квадраты. Если эта мозаика использует только квадраты разных размеров, то она считается идеальной . Минимально возможный идеальный квадрат квадрат является 112x112 квадратом черепицы с использованием 21 различных квадратов.
Я создал арт-версию этого квадрата ascii ниже:
################################################################################################################
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ############################
# ## ############################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ############################################# #
# ############################################# #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###############################
# ## ## ###############################
# ## ## ## ## #
# ## ## ## ## #
################################################################## ## ## #
################################################################## ## ## #
# ## ## ########################### #
# ## ## ########################### #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ## ## ## ## #
# ## ################## ## #
# ## ################## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ## ## #
# ## ## ###########################################
# ## ## ###########################################
# ## ## ## #
# ## ## ## #
# ## ## ## #
# ########################################### #
# ########################################### #
# ## ## ## #
# ## ## ## #
################################## ## #
################################## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
# ## ## #
################################################################################################################
Ваша заявка должна распечатать вышеуказанный квадрат. Вы можете распечатать отражение и / или вращение вышеуказанного квадрата, если хотите. Трейлинг-перевод строки в последней строке разрешен. Это код-гольф , поэтому выигрывает самая маленькая подача!
code-golf
kolmogorov-complexity
Натан Меррилл
источник
источник
#
вместоX
Ответы:
CJam,
888483 байтаПроверьте это здесь.
объяснение
Вот основная идея: начать с «пустого» квадрата 112x112. Теперь пройдитесь по квадратам в порядке чтения (слева направо, сверху вниз). Добавьте каждый квадрат в первую доступную позицию. После этого выведите все завершенные строки - это гарантирует, что нам нужно проверить только первую (оставшуюся) строку, чтобы выяснить, куда идет следующий квадрат.
Пустая сетка инициализируется как
p
s, потому что мне нужен был символ с кодом символа больше, чем пробел и#
, и потому что я мог повторно использовать его собственный код символа112
для размера начальной сетки. Я использовал некоторые из художественных трюков Дениса ASCII, чтобы заполнить маленькие квадраты в сетке.источник
Mathematica
360426Код работает, сначала рисуя идеальный квадрат квадратов, растеризуя и оцифровывая изображение, а затем преобразуя 0 в «#» и 1 в «».
Выходные данные возвращаются в виде обычных символов ASCII в таблице.
Я предпочитаю этот рендеринг, полученный путем удаления
Thickness[.015]
источник
#
«s». Он сталкивается с другими квадратами справа и снизу, которые нарисованы аналогичным образом. Там, где встречаются два квадрата со#
всех сторон снаружи, вы получаете двойной#
для внутренних линий. И квадраты действительно квадратные, имеют одинаковое количество символов по вертикали и горизонтали. Проблема в шрифте. Этот ответ не соответствует спецификации. Если он будет принят, вопрос будет закрыт для не объективной победы.Рубин, 180 байт
Версия для игры в гольф, основанная на версии без игры в гольф ниже. Мы используем тот факт, что
y
для верхнего левого угла обычно есть 2 или 3 квадрата с одинаковыми координатами.Первая магическая строка содержит коды ASCII для
square sidelength+70
иy increment +40
. При встрече с длиной стороны квадрата (код Ascii> 67) мы предполагаем, что следующий квадрат находится в той же координате y, а координату x можно получить, увеличив текущую координату x наsidelength+2
. При обнаружении увеличения y (код Ascii <67) мы соответственно увеличиваем координату y и возвращаем координату x к значению, закодированному во второй магической строке.Оригинальная версия
Это (полностью безголовое) решение содержит 315 байтов, исключая ненужные пустые строки и отступы. Он просто создает массив из 112 строк из 112
#
, а затем заменяет внутренние части квадратов пробелами.источник
C 198 байтов
(Ungolfed)
Все, что это делает - это сканирует массив из 112 × 112 байтов (инициализируется нулем). Всякий раз, когда он сталкивается с нулевым байтом, он выбирает значение из массива
i
и добавляет блок соответствующего размера. Дополнительный байт в каждой строке действует как терминатор строки, поэтому мы можем использоватьputs()
для вывода целых строк вместо использованияputchar()
для вывода символов по отдельности.Возможно, это еще немного удастся, но я не думаю, что у него много шансов обыграть ответ Стивериллера .
(ссылка идеально)
источник
#
когда!(p%(n-1)&&q%(n-1))
я также рассмотрю вопрос о сокращении числаfor
циклов с четырех до двух, используяx=i%113
и y =i/113 etc
.R
293291287282 байтаПосле этого я понял, что сделал почти такой же процесс, как @steveverrill. Массив '#' и пустые квадратные интерьеры. Может, вероятно, выжать еще немного из этого. Возврат каретки для 3-й строки значителен. Спасибо Алексею за несколько.
источник
s
один раз, так что вы не могли бы сделать,for(g in list(...))
вместо того, чтобы указатьs
отдельно заранее? Я думаю, это сэкономит вам 2-3 байта.MS-DOS Binary, 137
Следующий код будет работать в MS-DOS, если вы запишете его в файл square.com, дальнейшая компиляция не требуется (но, поскольку он дан в шестнадцатеричном формате, сначала нужно его «разжать»):
Вывод будет неузнаваем в большинстве терминалов, но вы можете перенаправить его в файл (
square.com > output.txt
) и посмотреть его в текстовом редакторе. Если вам нужно что-то более читаемое, следующий код создаст работающий square.com, если он будет загружен в debug.exe (debug.exe < square.asm
):источник
Matlab / Octave, 258
Как всегда, Матрицы. Я жестко закодировал строки и индексы столбцов каждого квадрата и размер. Я могу использовать их, чтобы заполнить большой «пустой» квадрат
#
s.источник
Баш, 252
Каждый Codegolfer должен быть в состоянии побить алгоритм сжатия общего назначения:
Спасибо Тоби Спейту за подсказку использовать более короткий ввод (глупый я использовал
gzip
вместоgzip -9
сжатия) и здесь-строку.источник
base64 -d<<<H4sIAP9YuVUAA+3XQQrDIBAF0H1PUfD+d+yq0FA7GirGie/vdEZfkCy0lLl5lOfJlPaKoAUIBAKBQCAQCLwzOP3mfdFVv9IKBM4BTyQpGA0PE0AgcB8wzC3A6vS7egH4d5YH64WPtVGh/zvygj8agcCvQuufzA+2GoFA4AZgd9KCwS7Hzu3B7qQFO09rbXDEaa0NjtgLCAQCgUAgEAgEAoHz34dj8wLKvMUNbzEAAA==|gunzip
base64 -d<<<H4sIADyFv1UCA+3ZOw6EMAwFwH5PgeT735EOUSyfQAgOmVeCxUgusAkRbfOLqTARd0qAQCAQCAQCgcAvg80375dW/T+lQGAbsCCdgvsdXl0AAoHjgM8e7mUA92bKG+DtpAevDPflRsko7BXcKAQCD9+X3wOPCoFA4ABgnZ/OmcHTS+bw4PXzkV7Ak93KDdboVm6wxrOAQCAQCAQCgUAgENj++7BuZsq8xQ1vMQAA|gunzip
gunzip: command not found
. Я могу заставить это работать, используя subshell:,(base64 -d|gunzip)<<<...
но это все еще использует 258 байтов.