Напишите кратчайший код, измеряемый счетчиком байтов, чтобы сгенерировать сетку ASCII, состоящую из ромбов, учитывая следующие параметры:
- m - количество полных ромбов в одном ряду
- n - количество рядов
- s - сторона самого маленького ромба
- r - уровень вложенности - сколько ромбов внутри "базовых" (которые являются фоном между пересечениями сетки)
Примеры
1. Input: 5 3 1 0
Output:
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
/\/\/\/\/\
\/\/\/\/\/
A 5x3 grid of rhombi with side 1, no nesting
2. Input: 3 2 2 0
Output:
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
/\ /\ /\
/ \/ \/ \
\ /\ /\ /
\/ \/ \/
A 3x2 grid of rhombi with side 2, no nesting
3. Input: 5 2 1 2
Output:
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
///\\\///\\\///\\\///\\\///\\\
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
\\\///\\\///\\\///\\\///\\\///
A 5x2 grid of rhombi with side 1 (the smallest rhombus), level of nesting is 2
4. Input: 4 2 2 1
Output:
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
//\\ //\\ //\\ //\\
///\\\///\\\///\\\///\\\
// \\// \\// \\// \\
\\ //\\ //\\ //\\ //
\\\///\\\///\\\///\\\///
\\// \\// \\// \\//
A 4x2 grid of rhombi with side 2 with level of nesting 1
5. Input: 4 2 3 3
Output:
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
////\\\\ ////\\\\ ////\\\\ ////\\\\
/////\\\\\ /////\\\\\ /////\\\\\ /////\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
//////\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\
///// \\\\\///// \\\\\///// \\\\\///// \\\\\
//// \\\\//// \\\\//// \\\\//// \\\\
\\\\ ////\\\\ ////\\\\ ////\\\\ ////
\\\\\ /////\\\\\ /////\\\\\ /////\\\\\ /////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\\//////\\\\\\//////\\\\\\//////\\\\\\//////
\\\\\///// \\\\\///// \\\\\///// \\\\\/////
\\\\//// \\\\//// \\\\//// \\\\////
A 4x2 grid of rhombi with side 3, level of nesting 3
Не забудьте отобразить частично видимые ромбы по краям и углам, где это необходимо.
Ответы:
SOGL V0.12 , 20 байтов
Попробуй здесь! Принимает входные данные в обратном порядке того, что они есть в примерах - r, s, n, m.
Объяснение:
источник
∙*
Древесный уголь ,
483937 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Нарисуйте квадрат размера
r + 1
. Это четверть вложенного алмаза размером 1.Скопируйте квадрат 1 квадрат вправо и вниз,
s - 1
чтобы получить правильный размер.Отразите это, чтобы стать полным вложенным алмазом.
Вычислите размер этого вложенного алмаза.
Скопируйте алмаз в нужное
m - 1
время.Скопируйте алмаз вниз
n - 1
раз.источник
Python 2 ,
160159158 байт-1 байт благодаря Джонатану Фреху
Попробуйте онлайн!
При этом используется тот факт, что дном ромба является инвертированная вершина (
[::-1]
), повторяющаясяrange(n*2)
и использующая~x%2*2-1
для контроля, является ли она верхней или нижней.Для верхней (и нижней) правой стороны просто левая сторона инвертирована и заменена
/
на\
->.l.replace(*'/\\')..[::-1]
Для создания шаблона / вложения
~-s*' '+'/'*(1+r*2)+~-s*' '
используется для создания такой строки,///
которая будет повторяться и нарезаться:источник
(1+r*2)
может быть(r-~r)
.Юлия 0,60 , 190 байт
Это функциональное решение, которое вычисляет для каждой пары индексов,
i,j
какой символ должен отображаться.Попробуйте онлайн!
иллюстрация
Начните с сетки
r > 0
означает более толстые линииОбрабатывать углы, проверяя, какая линия на исходной сетке является ближайшей
Фея говорит нам убрать каждую
s-1
строчкуТраверс по диагонали и сделано
источник
JavaScript (ES6), 154 байта
Непосредственно вычисляет символ в каждой ячейке вывода.
источник
CJam, 44
Попробуйте онлайн
Объяснение:
источник
C # (.NET Core) , 167 байт
Попробуйте онлайн!
Я удивлен размером, которым я управлял; Я изначально ожидал более долгого решения. Сказав это, я уверен, что есть другие уловки, которые я пропустил.
DeGolfed
источник
Python 2 ,
201189 байтПопробуйте онлайн!
Используется тот факт, что нижняя часть совпадает с верхней, но смещена:
Сохранено 22 байта благодаря Джонатану Фреху
источник
s-i-1
может бытьs+~i
, сохраняя два байта.r+1+min(...
может бытьr-~min(...
, сохраняя еще один.L=[(...)*m for
может бытьL=[m*(...)for
, сохраняя еще один байт.L+=[...];print'\n'.join(L*n)
можноprint'\n'.join((L+[...])*n)
сохранить еще один байт, в результате чего получается 196 байт .s+r-i-1
наs+~i+r
.exec
форматирования строки.Perl 5, 159 + 3 (-anl) байтов
Попробуйте онлайн
источник