Слизи - это враги в форме куба в Minecraft, которые при убийстве разбиваются на несколько более мелких версий. Для целей этой задачи мы будем изображать их в виде изображения размером 8 × 8 пикселей с 3 цветами:
Точные цвета RGB:
0, 0, 0
для глаз и рта110, 170, 90
для центрального, темно-зеленый116, 196, 96
для внешнего, светло-зеленый
Вызов
Напишите программу или функцию, которая принимает положительное целое число N и выводит изображение N размеров слизи, упакованных в прямоугольник. Если смотреть слева направо, изображение должно соответствовать схеме:
- Стек из 2 (N-1) 8 × 8 слизей.
- Стек из 2 (N-2) 16 × 16 слизей.
- Стек из 2 (N-3) 32 × 32 слизи.
- И так до тех пор, пока в стеке не останется только одна слизь.
Изображения слизи, большие, чем версия 8 × 8 ( ), генерируются с помощью повышающей дискретизации ближайшего соседа (т.е. просто удваивая все пиксели). Обратите внимание, что вы должны использовать точный дизайн слизи и цвета, приведенные здесь.
Окончательное изображение будет содержать 2 N -1 слизи и иметь ширину 2 (N + 3) -8 пикселей и высоту 2 (N + 2) пикселей.
Изображение может быть выведено в любом общем формате файла изображения, сохранено в файл или напечатано / возвращено в виде потока необработанных данных, или непосредственно отображено во время выполнения.
Самый короткий код в байтах побеждает.
Примеры
Ваша программа должна дать эти точные результаты.
N = 1:
N = 2:
N = 3:
N = 4:
N = 5:
N = 6:
Больший N должен работать так же хорошо.
источник
Ответы:
MATL ,
777674 байтаКод работает в этом коммите , который раньше, чем вызов.
Вы можете попробовать это в MATL онлайн . Этот переводчик все еще экспериментален. Если это не работает, попробуйте обновить страницу и снова нажать «Выполнить».
Вот пример запуска в автономном интерпретаторе:
объяснение
источник
11
и он работает. В11
результате получается изображение 8192 × 16376. Ибо12
это будет 16384 × 32760 (536 мегапикселей), что потребует более 4 ГБ ОЗУ, что больше, чем может выдержать мой ноутбук.Dyalog APL,
118113 байтов('P3',⌽∘⍴,255,∊)(3↑(116 196 96)(110 170 90))[⊃,/i{⊃⍪/⍵⍴⊂⍺⌿⍺/8 8⍴∊22923813097005 926134669613412⊤¨⍨⊂32⍴3}¨⌽i←2*⍳⎕]
при условии,
⎕IO=0
Справа налево:
i←2*⍳⎕
полномочия 1 2 4 ... 2 н-1i{ }¨⌽i
перебирать полномочия (с⍺
) и обратные полномочия (⍵
)⊤¨⍨⊂32⍴3
декодировать каждое из чисел слева как 32 троичные цифры8 8⍴∊
выровнять и изменить до 8 × 8⍺⌿⍺/
репликации каждой строки и столбца⍺
раз⍵⍴⊂
взять⍵
копии⊃⍪/
и сложить их вертикально⊃,/
объединить все результаты по горизонтали3↑(116 196 96)(110 170 90)
цвета;3↑
расширяет их(0 0 0)
[ ]
индексировать цвета для каждого элемента матрицы; Результатом является матрица RGB('P3',⌽∘⍴,255,∊)
является «поездом» - функция, которая возвращает'P3'
за собой обратную форму аргумента255
, а аргумент выравнивается.источник
⎕IO←0
и просто указать ее как условие вне числа байтов. Многие системы APL используют это по умолчанию. (Включая ваш LOL)JavaScript (ES7), 326
327байтUngolfed ES6 Версия
Попробуй сам.
Единственная разница между версией ES7 и ES6 заключается в использовании
**
вместоMath.pow()
. Вы также можете увидеть, как вы можете вызвать функцию - в этом примере сn=4
.Результат
Правки
;
Это довольно медленно и может занять некоторое время для чисел больше 10.
источник
C 220 байтов
Я добавил бесполезные новые строки для удобства чтения, оценка без этих новых строк.
Определяет функцию,
f(n)
которая выводит простое изображение PPM на стандартный вывод.источник
Mathematica,
267255254225212 байтСохранено
2942 байта благодаря Мартину ЭндеруПриветствуются предложения по игре в гольф, особенно для строительства массива 8 на 8 (по 3)
s
. К сожалению,ArrayResize
аналога для " " нет "ImageResize
, поэтому массив необходимо преобразовать в image (Image
) перед изменением размера, а затем обратно в array (ImageData
) для выполненияJoin
операции.Ungolfed:
источник
b=0g
, Для генерацииs
может быть короче кодирование значений пикселей в виде числа 3, но я должен попытаться быть уверенным. В то же время, вы можете сохранить байты не определяяb
,g
,f
,e
,t
пока они вам не нужны, иs
не нужно имя на всех и ни делаетc
. Для2^(j-1)8
вас можно использовать4*2^j
. Применяя все это, я получаю 225 байт: pastebin.com/YnkUwvwVImage
,ImageResize
,ImageData
вещи. Этот бит взрывает массив в 2 раза:#&@@{##&@@{#,#}&//@x}
гдеx
находится массив. Таким образом, если вы сохраняете начальную сетку 8x8 в переменнойx
, а затем делаете этоx=#&@@{##&@@{#,#}&//@x}
после каждого использования, вы можете легко сгенерировать последующие плитки.#&[##&[#,#]&//@x]
##~Join~2
и б) ,f={g,a=##&[G,G,G],a,g}
а затем заменить все дальнейшее появлениеG,G,G
сa
а.Python 2.7:
424412405376357 байтЯ немного новичок в гольф .... здесь мы идем
Разряженный и проверенный на длину
edit1: удалено
sys.argv[1]
в пользуraw_input()
сохранения дополнительного оператора импортаedit2: сокращен импорт PIL: удалено
from Image
добавленоPIL.
edit3: Спасибо @ Sherlock9 за шестнадцатеричное кодирование шаблона слизи
edit4: не нужна функция def и используется
input()
вместоraw_input()
источник
'0000100001111110111211100111111102211220022112200111111000001000'
(ваш массив в обратном направлении) преобразован из базы 3 в базу 160x2df0777ca228b9c18447a6fb
. С этим числом используйте такой код,[0x2df0777ca228b9c18447a6fb//3**i%3 for i in range(64)]
чтобы получить целые числа в правильном порядке.[0x2df0777ca228b9c18447a6fb/3**i%3for i in range(64)]
может быть лучше.0x2df0777ca228b9c18447a6fb
. Это просто В более простом примере, чтобы получить0
th-у цифру01221100
, просто разделите на 30
раза, а затем возьмите последнюю цифру (используя мод 3), чтобы получить0
. Чтобы взять 2-ую цифру, разделите на 32
раза, затем мод 3, чтобы получить1
. Понимание списка просто делится в 364
раза, чтобы вернуть весь ваш массив. Если у вас есть еще вопросы, мы можем обсудить их в чате PPCG .R
378356346334 байтаСохраняет как файл png. С отступом, с переводом строки:
N = 2: N = 3: N = 4:
Некоторые объяснения:
Вот матрица, которая строится (0 представляют светло-зеленый, 1 темно-зеленый и 2 черный; матрица наклонена, потому что столбцы - это ось y, а строки - ось x):
Каждый вызов для
image
построения этой матрицы (каждое целое число соответствует цвету). Для N = 4 здесь L (матрица расположения, каждое уникальное число представляет один отдельный график), w (ширина столбцов матрицы) и h (высота строк матрицы):источник