Первый завершенный предшественником куб Ascii (PAC 1) представляет собой простой куб с длиной стороны 1 и выглядит следующим образом:
/////\
///// \
\\\\\ /
\\\\\/
ПКК 2 представляет собой геометрическую форму таким образом, что его сочетания с его предшественником (The PAC 1 ) завершает длина стороны куба 2:
front back
/////////\ /////////\
///////// \ ///////// \
/////\\\\\ \ ///////// \
///// \\\\\ \ ///////// \
\\\\\ ///// / \\\\\\\\\ /
\\\\\///// / \\\\\\\\\ /
\\\\\\\\\ / \\\\\\\\\ /
\\\\\\\\\/ \\\\\\\\\/
Поскольку вид сзади довольно скучен, нас интересует только вид сзади .
То же самое касается PAC 3 : с некоторым визуальным мышлением PAC 2 можно развернуть и подключить к PAC 3, чтобы сформировать куб со сплошной стороной 3:
/////////////\
///////////// \
/////\\\\\\\\\ \
///// \\\\\\\\\ \
///// /////\\\\\ \
///// ///// \\\\\ \
\\\\\ \\\\\ ///// /
\\\\\ \\\\\///// /
\\\\\ ///////// /
\\\\\///////// /
\\\\\\\\\\\\\ /
\\\\\\\\\\\\\/
И так далее с PAC 4 :
/////////////////\
///////////////// \
/////\\\\\\\\\\\\\ \
///// \\\\\\\\\\\\\ \
///// /////////\\\\\ \
///// ///////// \\\\\ \
///// /////\\\\\ \\\\\ \
///// ///// \\\\\ \\\\\ \
\\\\\ \\\\\ ///// ///// /
\\\\\ \\\\\///// ///// /
\\\\\ \\\\\\\\\ ///// /
\\\\\ \\\\\\\\\///// /
\\\\\ ///////////// /
\\\\\///////////// /
\\\\\\\\\\\\\\\\\ /
\\\\\\\\\\\\\\\\\/
Задача:
Напишите полную программу или функцию, которая принимает положительное целое число n в качестве входных данных и возвращает или печатает соответствующий вид спереди PAC n точно так, как показано выше. Допускается дополнительный конечный пробел.
Это код-гольф , поэтому старайтесь использовать как можно меньше байтов на выбранном вами языке.
Ответы:
JavaScript (ES6), 229 байт
источник
Пакет,
559432400 байтПояснение: Нижняя половина куба нарисована, отражая верхнюю половину. Половинки далее разделены на
семьшеститрех частейполос, согласно этой диаграмме, показывающей верхнюю половину:Изменить: Экономия более 20% за счет улучшения кода, который отражает верхнюю часть к нижней половине. Экономия почти 10% благодаря объединению двух левых и трех средних полос.
источник
Холст , 36 байт
Попробуй это здесь!
источник
SOGL V0.12 , 32 байта
Попробуй это здесь!
Простое объяснение:
1. итерируйте для каждого из 1..x
2. создайте
⌐
фигуру с ширинойi*4+1
и высотой =(0-indexed)i // 2
3.
⦧
добавьте ее так, чтобы она выглядела как 4. добавьте фигуру "\" к горизонтали
5. вставьте предыдущий шаг внутри, что наоборот 6. после всего, зеркало вертикально
полная программа:
источник
Haskell ,
232227224187183180175 байтАнонимная функция в последней строке принимает целочисленный аргумент и возвращает строки, которые будут напечатаны для куба этого размера.
Идея состоит в том, чтобы использовать рекурсию для рисования больших кубов из меньших. Давайте посмотрим на верхнюю половину куба размера 1. Затем мы получим верхнюю половину куба размера 2, отразив предыдущую половину и добавив фиксированный узор косых черт и пробелов вокруг нее:
Таким образом, алгоритм рисовать куб из размера п является
/
s и\
s), а также pad////
и\
вокруг.////
n плюс/\
и/ \
.источник
g=
.(\l->r l++k(k m)l)
такой же, какliftM2 (++) r (k(k m))
, который снова может быть сокращен до(++).r<*>k(k m)
. Попробуйте онлайн!Рубин ,
174 167 169167 байтПопробуйте онлайн!
создает массив
n*4
строк, заполненных пробелами, а затем перезаписывает его последовательно меньшими кубами.Код комментария
источник
Python 2 ,
254234226203201199 байтНаконец саб 200!
Трюки:
Эта функция используется для обмена все
\
с/
и наоборотнемного долго в python2 - работает только с юникод
Выезд это за то, как он работает
Создает новые две верхние строки для каждой итерации.
Пока я не могу найти компактный способ получить эти строки из предыдущей итерации.
Переверните все строки предыдущей итерации и поменяйте местами слэш
Скопировать верхнюю половину, поменять местами, поменять местами
Аккуратный метод для центральной строки
Попробуйте онлайн!
источник
Stax , 36 байт
Запустите и отладьте его
Этот подход строит верхнюю половину вывода итеративно. Он выполняет основной блок указанное количество раз. В этом блоке каждая строка зеркально отражается и к ней добавляются префикс и суффикс. Верхние две новые строки добавляются отдельно. Когда все ряды построены, они центрируются, а затем нижняя часть зеркально отражается вертикально.
Вот программа распакована, разархивирована и прокомментирована.
Запустите этот
источник
Haskell, 193 байта
Дольше чем победитель, но подход может быть интересным - использует даже
cos
иpi
:)Код:
Запустите это так:
Эта программа в основном "рисует" много бриллиантов, как этот:
Функция
i s e f
«рисует» один ромб размеромs
, гдеe, f
есть(abs$z-y)(abs$z+y-1)
.Функция
w
перемещает алмазыi
в правильные места.head
используется в его определении, отвечает только за просмотр самого верхнего слоя.Попробуй здесь
источник
Древесный уголь , 42 байта
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нарисуйте кубики от самых маленьких до самых больших. (Рисование от самого большого до самого маленького означало, что я получил зеркальное отображение нечетных чисел, которые стоили слишком много байтов, чтобы их исправить.)
Распечатать строку
/
с. (Это станет\
символом справа, но рисунок сделан зеркальным, потому что в конце цикла лучше играть в зеркало.)Выведите два верхних ряда
\
s. (Рисование всех\
символов в одном многоугольнике означало, что курсор оказался в неловком положении, которое стоило слишком много байтов для исправления.)Выведите четыре левых строки
\
s. (Пятый ряд взят из предыдущего куба.)Перейти к началу следующего куба.
Отражение по горизонтали готово к следующему кубу.
Зеркально отразите все вертикально, чтобы завершить куб.
источник