Ваша задача: сделать шестиугольный треугольник с длиной стороны n
, где n
положительное целое число или 0.
Сначала позвольте мне определить шестиугольник:
/ \
| |
\ /
(Удивительное искусство ASCII, верно?)
Шестиугольники могут быть связаны друг с другом, разделяя стороны:
/ \ / \
| | |
\ / \ /
/ \
| |
/ \ /
| |
\ /
Гексагональный треугольник имеет следующий вид:
/ \
| |
/ \ / \
| | |
\ / \ /
Этот шестиугольный треугольник имеет длину стороны 2-- 2 шестиугольника необходимы, чтобы сделать одну сторону. Шестиугольный треугольник с длиной стороны 1 - это просто один шестиугольник, а шестиугольник с длиной стороны 0 пуст.
Более формально, шестиугольный треугольник - это треугольник, состоящий из шестиугольников, соединенных их сторонами. Верхний шестигранник соединяется с двумя под ним с двух нижних сторон. Треугольник в нижнем левом углу связан с одним справа и сверху справа, а нижний правый - с левым и верхним левым. Есть шестиугольники между ними угловых единиц, соединенных своими противоположными сторонами, и их число n-2
. Треугольники не заполнены.
Больше примеров:
Side length 3:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
\ / \ / \ /
Side length 4:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \
| | | | |
\ / \ / \ / \ /
(This triangle isn't really filled, the borders make it look like there is a hexagon in the middle, but there is not.)
Side length 5:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \
| | | | | |
\ / \ / \ / \ / \ /
Side length 6:
/ \
| |
/ \ / \
| | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \
| | | |
/ \ / \ / \ / \ / \ / \
| | | | | | |
\ / \ / \ / \ / \ / \ /
источник
Ответы:
Древесный уголь ,
624339 байтПопробуйте онлайн! Редактировать: Сохранено несколько байтов благодаря @ ASCII-only (точно не знаю, сколько я также сохранил еще
610 байтов, но затем нужно было потратить 4 байта на исправление). Теперь используем вложенные циклы, что и должно было быть все это время.источник
A / \¶| |¶ \ /αNβFβ«α←←»Fβ«α↖↖M⁶←»Fβ«αM⁴↑←←
(между прочим, уголь»
Assign(hexagon_with_space_to_left, a);InputNumber(b);for(b){Print(a);Move(:Left);Move(:Left);}for(b){Print(a);Move(:UpLeft);Move(:UpLeft);Move(6, :Left);}for(b){Print(a);Move(4, :Up);Move(:Left);Move(:Left);}
, каждая петля for рисует одну сторонуPython 2,
184177174164 байтаПопробуйте онлайн!
-7 байт благодаря Орджану Йохансену
источник
|
s в верхних трех и нижнем шестигранном ряду.p[:4]*(i+2)
вместо тогоp[:4]*(i+1)
, чтобы исправить это.b
в одном месте, так что в сочетании с вашим~
трюком наw=' '*2*~(i-n)
7 байт короче.JavaScript (ES6), 243 байта
источник
JavaScript (ES6),
133129128126 байтСоздает выходной символ за символом с двумя циклами for .
Как это устроено
Во внешнем цикле y выполняет итерации от n * 2-1 до -1 . Во внутреннем цикле x переходит от n * 4-1 к -1 . Мы устанавливаем k = (x + y) & 3 , который является основным шаблоном, который используется для генерации шестиугольников.
Ниже приведена результирующая сетка для n = 4 :
В четных строках ячейка заполняется символом трубы, когда k = 3 , и пробел в противном случае. Канал является 5-м символом в нашей ссылочной строке
" \ /|"
, поэтому правильный индекс задается как (k + 1) & 4 .В нечетных строках каждая ячейка заполняется непосредственно соответствующим символом в строке ссылки:
Ниже приведен наш обновленный пример (пробелы заменены точками):
В следующих формулах мы определяем N = n * 4 для удобства чтения (хотя та же самая переменная используется в коде).
Треугольную форму получают путем тестирования:
И внутренняя часть удаляется путем тестирования:
демонстрация
Показать фрагмент кода
источник
[x>y-2&x<n-y&(x>n-y-6|x<y+4|y<2)&&y&1?x+y&3:x-~y&4]
?(x+y+1)&4
не то же самое, что и(((x+y)&3)+1)&4
.Желе ,
6261 байтВ настоящее время содержит шесть шестерок.
Попробуйте онлайн!
Как?
источник
>
объяснении отсутствует (<space
)ẋ
смещение в объяснении", дайте мне знать.Pyth , 82 байта
Попробуйте онлайн!
источник
Mathematica, 155 байт
с
\n
заменены на новую строку.Более читабельно:
Создает массив символов, индексированный по i от 1 до 4 n + 1 по горизонтали и j от 1 до 2 n + 1 по вертикали. Сначала
Switch[Mod[i+d+{j,-j},4],{1,3},"/",{3,1},"\\",{1,1},"|",_," "]
заполняет гексагональную сетку:затем
If[i+j<d||i-j>d+1||i+j>d+5&&i-j<d-3&&j<d-1," ",...]
заменяет это" "
за пределами незаполненного треугольника.источник