Вызов
Напишите программу, которая принимает массив целых чисел 11x11 и строит построение блоков 3D ASCII, где каждое значение в массиве представляет высоту столбца блоков в координатах, соответствующих позиции массива. Отрицательная высота - это «плавающий» столбец - виден только верхний блок.
пример
__________________
___ /\__\__\__\__\__\__\
3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\__\ /\/\__\__\__\__\__\__\
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/__/ /\/\/__/__/__/__/__/__/
2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /\/\__\ /\/\/\__\ /\/\/__/
1, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/\__\ /\/\/\/__/ /\/\/__/
0, 0, 0, 7,-7,-7,-7,-7, 7, 0, 0, \/\/__/ /\/\/\/\__\ /\/\/__/
0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, \/\__\ /\/\/\/\/__/ /\/\/__/
0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, \/__/ \/\/\/\/\__\_ \/\/__/
1, 0, 0, 4, 3, 2, 1, 0, 0, 0, 1, \/\/\/\/__/_\_ \/__/
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, ___ \/\/\/__/__/_\_ ___
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, /\__\ \/\/__/__/__/_\ /\__\
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, \/\__\ \/__/__/__/__/ \/\__\
\/\__\_________ ______\/\__\
\/\__\__\__\__\ /\__\__\__\__\
\/__/__/__/__/ \/__/__/__/__/
вход
Входными данными будет список из 121 целого числа, либо считанный из стандартного ввода (выбор разделителя на ваше усмотрение), либо переданный в виде массива (может быть 1D или 2D).
Высоты будут в диапазоне от -11 до 11.
Выход
Сгенерированное здание может быть записано в стандартный вывод, отображено непосредственно на экране или возвращено в виде строки, разделенной новой строкой.
Лидирующие и конечные пробелы разрешены.
Строительные Правила
Форма отдельного трехмерного блока выглядит следующим образом:
___
/\__\
\/__/
И куб блоков 2х2х2 выглядит так:
______
/\__\__\
/\/\__\__\
\/\/__/__/
\/__/__/
Когда блоки перекрываются, более высокий блок имеет приоритет над более низким, блоки впереди имеют приоритет над теми, что дальше сзади, а блоки слева имеют приоритет над правыми. Единственный особый случай заключается в том, что верхняя строка блока никогда не должна перезаписывать никакие непробельные символы позади него.
Интерпретация высоты столбцов может быть лучше всего объяснена, если посмотреть на 2D-представление сбоку.
HEIGHT: 1 2 3 -3 -2 -1
__ __
__ |__| |__| __
__ |__| |__| |__| __
|__| |__| |__| |__|
Тестовые случаи
Если вы хотите опробовать свое решение на нескольких входах, я собрал пару тестовых примеров здесь .
выигрыш
Это код-гольф , поэтому выигрывает самое короткое представление (в байтах).
Ответы:
Древесный уголь ,
706968 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Прочитайте массив, разбейте каждую строку на запятые и приведите к целому числу, но также переверните каждую строку, поскольку мы хотим рисовать справа налево, чтобы левые столбцы перезаписывали правые столбцы. (Другие измерения уже имеют желаемое поведение при перезаписи.)
Переберите i) верхние линии и тела k) высота l) ряды m) столбцы. (Цикл по первым верхним строкам, а затем по телам позволяет избежать перезаписи тел верхними строками.)
Прыгните в положение куба.
Получить высоту в текущей строке и столбце.
Проверьте, следует ли рисовать куб на этой высоте для этой строки и столбца.
Нарисуйте тело или вершину куба.
источник
3
на a33
, я получаю только 11 блоков в башне. В общем, башни, кажется, ограничены в 11. Как это происходит?F¹¹F¹¹F¹¹
не было подсказкой ...C
376350313309285 байтСпасибо @Jonathan Frech за сохранение четырех байтов!
Попробуйте онлайн!
раскатали:
источник
26*66
может быть1716
?*s==32
->*s<33
.for(e=k=1;e;++k)for(e=
->for(k=1;e;++k)for(e=
.#define B b(...)&++e
->#define B++e&b(...)
(при условииb
, не зависит от тогоe
, что я думаю, это не так).JavaScript (ES6),
277251 байтПоказать фрагмент кода
Сохранено 26 байт по предложению @ Neil .
Ungolfed
источник
,$(w=>$(z=>$(y=>$(x=>(Z=a[y][x=10-x,X=x*3+y+z,Y=y-z+n,x])<=z&&Z+z+1?0:w?['/\\__\\','\\/__/'].map(s=>S[++Y].splice(X,5,...s)):S[Y].splice(X+1,3,...'___'))))),
кажется, чтобы сохранить 26 байтов.Python 2 , 243 байта
Попробуйте онлайн!
Python перевод подхода Нейла на уголь.
источник
+1+k
->-~k
.APL (Dyalog Unicode) ,
117116112 байтов SBCSПопробуйте онлайн!
источник
Tcl, 380
409байтовПользователь sergiol очень старался разобраться в этом:
Попробуйте онлайн!
Оригинальный контент
Попробуйте онлайн!
Увы, это то, что есть. Это немного легче для глаз, когда «не в гольфе»
Строит строку в соответствии с требованиями. Принимает массив из стандартного ввода. Идет снизу вверх, спереди назад, справа налево поверх строковых данных. Делает это в два прохода, один раз для верхнего края и снова для остальной части тела каждого куба.
Я пытался уменьшить его, используя сладкое функциональное лямбда-моджо, но, увы, это увеличило его.
источник