Вам нужно построить пирамиду из кубиков. Кубики можно смотреть с 2 углов:
_____ _____
/\ \ / /\
/ \____\ /____/ \
\ / / \ \ /
\/____/ \____\/
Это пример для двухразмерных кубов с двух возможных углов. Высота кубов - $size
косая черта (или обратная косая черта), а ширина куба - 2 * $size
подчеркивание. Ширина верхнего уровня должна содержать дополнительный символ подчеркивания.
Входные данные будут представлены в виде строки, содержащей число (размер кубиков), косую черту или обратную косую черту (для указания направления / угла) и другое число (высота пирамиды).
Примеры:
Входные данные:
1/1
Выход:
___
/\__\
\/__/
Входные данные:
1\1
Выход:
___
/__/\
\__\/
Входные данные:
2/1
Выход:
_____
/\ \
/ \____\
\ / /
\/____/
Входные данные:
1/2
Выход:
___
___/\__\
/\__\/__/
\/__/\__\
\/__/
Входные данные:
2\2
Выход:
_____
/ /\
/____/ \_____
\ \ / /\
\____\/____/ \
/ /\ \ /
/____/ \____\/
\ \ /
\____\/
Входные данные:
1/3
Выход:
___
___/\__\
___/\__\/__/
/\__\/__/\__\
\/__/\__\/__/
\/__/\__\
\/__/
- Конечные / ведущие пробелы в порядке.
- Стандартные лазейки запрещены.
- Вы можете предположить, что ввод всегда будет действительным.
- Вы можете предположить, что ввод не вызовет слишком большой вывод, то есть: нет переноса строк при выводе вывода на терминал.
- Размер куба и высота пирамиды положительны (т.е. ≥ 1)
- Это код-гольф, поэтому выигрывает самый короткий код в байтах.
Текущий победитель:
Глен О с 270 байтами в юлии
вызов остается открытым. если ты побьешь текущий лучше, я обновлю принятый ответ.
Ответы:
Юлия -
503455369346313270 байтUngolfed:
Использование:
или
источник
Perl, 343 байта
Многострочный с комментариями:
Пример вывода:
Я также попытался реализовать ее как функцию C с использованием того же алгоритма, надеясь спасти байты от роскоши имен односимвольных переменных, но в итоге получилось на 15 байт больше, на 358 байт (необходимо скомпилировать с помощью
-std=c89
gcc, чтобы исключитьvoid
в заголовке функции):источник
printf("%c" --> putchar(
,printf("\n") --> puts("")
переместите все объявления INT вне функции, то вы можете устранитьint
(см meta.codegolf.stackexchange.com/q/5532/15599 ), измените все символьные литералы для их кодов ascii, например' ' --> 32
. Рефакторинг циклов for, например,for(k+1;z--;)
также может помочь, но сложнее.e
может быть int, если вы инициализируете его в ноль.sscanf
будет перезаписывать только наименее значащий байт и может оставить любой существующий мусор в остальных трех байтах.main
вместо,j
но вам не нужно передавать параметрs
, и вы можете воспользоваться автоматической инициализацией глобальных переменных.Рубин, 332
Пока что выполняется только игра в гольф - это удаление комментариев и отступов. Я буду в гольф позже.
Я установил массив пробелов и вставил в него отдельные символы. Существует достаточно много перерисовок как одного куба поверх другого (работа снизу вверх), так и внутри самого куба, чтобы избежать лишнего кода. Я делаю пирамиду, рисуя ромб (аналогично /codegolf//a/54297/15599 ) и выделяя верхнюю половину.
Трудной частью было рисование масштабируемого куба. Я начал с шестиугольника по периметру с 2n + 1
_
символами по горизонтали. У меня также было 2n + 1/
и\
, таким образом, у меня было слишком много, но, нанося_
последние, я перезаписывал их.Внутренние линии - единственные, которые изменяются в зависимости от направления, к которому обращен куб. Я строю все
/
и\
с одного задания.abs
помогает изменить направление иi>>9&1
добавляет 1 к отрицательным значениям i, что понижает верхнюю часть вниз. дляi
= 0 один из обязательных_
переполнен, поэтому строка выбора'\_/'
содержит все три символа, выбранных в соответствии со знакомi
.Пробелы вокруг вывода достаточно, но не чрезмерны: 4 * p * n в высоту и 8 * p * n в ширину (последний позволяет кубу вершины всегда быть в центре вывода.) Я понимаю "трейлинг / ведущий" пробелы ", чтобы включить целые строки, но может пересмотреть при необходимости.
Код без правил
источник