Напишите программу , которая считывает массив двоичных значений , которые представляют собой куб, который состоит из меньших кубов. Каждое значение говорит, есть ли в данной позиции воксел (маленький куб) или нет. Программа должна выводить данный массив в виде ASCII-графики (это означает вывод через консоль или запись в файл).
Примеры
Рассмотрим следующие массивы :
[
[[0,0],
[1,0]]
[[1,1],
[1,0]],
]
[
[[0,0],
[0,0]]
[[1,1],
[1,1]],
]
В этом случае вывод должен выглядеть следующим образом (он выглядит не так хорошо, как в редакторах / консолях кода с меньшим вертикальным пространством):
+----+
/ /|-+----+
+----+ | /|
| | +----+ |
| | | | +
+ + | |/
| | +----+
| |/
+----+
+----+----+
/ /|
+ + |
/ / +
+----+----+ /
| | +
| |/
+----+----+
Технические характеристики ASCII
Каждый угол вокселя представлен символом до +
тех пор, пока к нему есть какое-либо ребро. Они +
также рисуются, когда есть прямой край длиной более одной единицы. Существует три типа ребер: горизонтальное слева направо ----
, горизонтальное сзади вперед /
и вертикальное
|
|
Каждый из них должен заканчиваться на +
(как долго видно). Края не будут нарисованы, когда они подразделяют одну плоскую плоскость на две или более частей (в отличие +
от краев, как указано выше). Структуры, которые скрыты за другими, не должны быть нарисованы.
«Чертеж» - это, по сути, параллельная проекция, поэтому видны только верхняя, правая и передняя стороны - всегда под одним углом.
Детали
- 1-е измерение: слой за слоем от самого верхнего до самого нижнего
- 2-е измерение: строка за строкой сзади (дальше всего) вперед (ближе)
- 3-е измерение: вокселы в каждом ряду слева направо
Используете ли вы консоль или читаете файлы как ввод и вывод, зависит только от вас. Пожалуйста, расскажите нам о своем коде / как вы подошли к нему.
судейство
Это Codegolf, поэтому выигрывает наименьшее количество байтов. Это включает в себя ТОЛЬКО ту часть, которая фактически выполняет эту работу - при подсчете байтов вы можете считать входные данные уже проанализированными и сохраненными в переменной, и вы должны сохранить выходную строку в переменной, готовой к печати. Разбор и сам вывод не в счет.
(И я буду одобрять представления с творческими примерами =)
Это было вдохновлено страницей головоломки Роба .
Луа (1442 байта)
Бонусные анимации! :)
Если у вас есть какой-нибудь крутой воксель в том же формате, что и в примерах, свяжите его в комментариях, и я сделаю из него
анимацию
7x7x7 12x12x12
Это мой первый гольф-код, поэтому он довольно грязный, и я планирую улучшить это или портирование на другой язык.
Вот то, что у меня есть, прямо сейчас, чуть меньше 2,5 кБ, только для гольфа (только что удалил пробелы в этом месте, я продолжу больше позже)
Вот версия для гольфа и минимизированная версия ~ 1,4 КБ (обратите внимание, что таблица «a» в первой строке является заполнителем для матрицы вокселей):
Редактировать : вот оригинальная (более 3 КБ) версия без гольфа, включая мои правки для создания анимации (если вы запускаете ее сами и хотите анимацию, измените
false
нижнюю часть кода наtrue
.Вот пример кода, который будет заполнять матрицу вокселей из строки для матрицы вокселей 3x3x3. (Будет принята любая строка в аналогичном формате, но убедитесь, что это куб, иначе все может сломаться.)
Чтобы использовать это, вставьте этот чанк сразу после первой строки
local v = {}
Вот вывод из данного шаблона вокселя 12x12x12 : (и да, он выглядит лучше на обычной консоли / устройстве просмотра текста, здесь слишком большой вертикальный интервал)
Вот вывод из примера 7x7x7 здесь
источник