Adam7 - это алгоритм чередования растровых изображений, например PNG. Он называется алгоритмом «Адам7», потому что он был изобретен Адамом М. Костелло, и его генерируют, следуя определенной схеме 7 раз. Одна из замечательных особенностей алгоритма Adam7, которая делает его действительно увлекательным для гольф-кода, состоит в том, что шаблон можно повторять произвольное количество раз, если он нечетный. Когда в 1996 году PNG
был разработан стандарт, использование только 7 итераций считалось достаточным, поскольку 9 итераций были слишком сложными, а 5 итераций не столь эффективны.
Вот первая итерация плитки:
a
Довольно просто Это плитка "Adam1". Вот как мы можем перейти к следующей итерации, плитке «Adam3».
Так как наш последний тайл был 1x1
, мы удваиваем высоту и ширину, и следующий будет 2x2
. Сначала мы начнем с буквы «а» в верхнем левом углу.
a-
--
Шаг 2, скопируйте этот шаблон справа и увеличьте букву, на которой мы находимся, на единицу.
ab
--
Шаг 3, такой же, как шаг 2, но скопируйте вместо правой.
ab
cc
Boom. Плитка "Адам3". Давайте также выполним «Adam5», чтобы вы могли увидеть, как работает алгоритм. Эта плитка, опять же, будет вдвое больше, поэтому 4x4
. Опять же, мы начинаем с a
в верхнем левом углу:
a---
----
----
----
Удвойте этот шаблон, увеличьте букву и переместите ее вправо:
a-b-
----
----
----
Опять на этот раз вниз.
a-b-
----
c-c-
----
Опять на этот раз направо.
adbd
----
cdcd
----
Опять на этот раз вниз.
adbd
eeee
cdcd
eeee
Это плитка "Adam5". Вот ASCII-представление плитки Adam7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
И пока мы на этом, вот забавная анимация каждого шага плитки Adam7 (хотя она делает несколько плиток рядом):
Соревнование
Учитывая положительное нечетное число N , выведите плитку "Адам N ". Вы можете использовать любой метод ввода / вывода по умолчанию . Поскольку вместо цифр мы используем алфавит, вам нужно обрабатывать ввод только до 25. Вы можете выбрать вывод символов нижнего или верхнего регистра, если вы укажете, и это будет согласованно.
Образец ввода-вывода
1:
a
3:
ab
cc
5:
adbd
eeee
cdcd
eeee
7:
afdfbfdf
gggggggg
efefefef
gggggggg
cfdfcfdf
gggggggg
efefefef
gggggggg
9:
ahfhdhfhbhfhdhfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
ehfhehfhehfhehfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
chfhdhfhchfhdhfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
ehfhehfhehfhehfh
iiiiiiiiiiiiiiii
ghghghghghghghgh
iiiiiiiiiiiiiiii
Как обычно, это код-гольф, поэтому применяются стандартные лазейки, и выигрывает самый короткий ответ в байтах!
c
в тесте для9
?Ответы:
CJam, 20 байтов
Попробуйте онлайн .
20/21-байтовые альтернативы:
источник
MATL , 23 байта
Попробуйте онлайн!
Это использует повторное тензорное произведение Кронекера для расширения массива с последующей транспозицией. На каждой итерации новые столбцы, содержащие нули, чередуются со старыми; эти нули затем заменяются соответствующим новым значением (которое увеличивается на каждой итерации); и матрица транспонируется.
(Один байт потрачен впустую, потому что продукт Octave Kronecker не позволяет вводить символы. Это будет исправлено в следующем выпуске).
объяснение
источник
Perl
11010410099918987 + 1 (-p
флаг) = 88 байтС помощью:
Ungolfed:
Ideone .
источник
-l
Флаг присваивает$\
переменной значение со значением восьмеричного кода0141
(символ ASCIIa
). Иl141
короче чем$\="a";
.Pyth, 38 байт
Попробуй это здесь!
Я ожидаю, что это будет легко играть в гольф.
источник
JavaScript (ES6), 114 байт
источник