Сегодня мы собираемся сделать шестиугольник ASCII. Вы должны написать программу или функцию, которая принимает положительное целое число n и выводит шестиугольную сетку размера n , состоящую из звездочек. Например, шестиугольник размера 2 выглядит так:
* *
* * *
* *
В то время как шестиугольник размера 3 выглядит так:
* * *
* * * *
* * * * *
* * * *
* * *
Вы можете использовать любой из методов ввода и вывода по умолчанию , например, STDIO / STDOUT, аргументы функций и возвращаемые значения или чтение / запись файла.
Вы можете предположить, что ввод всегда действителен, поэтому, если он не является положительным целым числом, ваша программа может делать все, что вы хотите. Вы действительно однако должны обрабатывать особый случай размера 1 шестиугольник, который бывает один звездочка:
*
Допускаются начальные и конечные пробелы, если результат визуально одинаков.
Примеры:
1:
*
2:
* *
* * *
* *
3:
* * *
* * * *
* * * * *
* * * *
* * *
4:
* * * *
* * * * *
* * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
5:
* * * * *
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
6:
* * * * * *
* * * * * * *
* * * * * * * *
* * * * * * * * *
* * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
12:
* * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
Как обычно, это код-гольф , поэтому применяются стандартные лазейки , и вы должны попытаться написать максимально короткую программу, измеряемую в байтах. Конечно, некоторые языки по своей природе короче или длиннее других, поэтому помните, что цель состоит не в том, чтобы иметь самое короткое общее число байтов, а в том, чтобы превзойти представления на тех же или похожих языках.
Пусть победит лучший гольфист!
источник
Ответы:
Hexagony + Bash Coreutils, 0 + 3 + 8 = 11 байт
Включает +3 для
-g
флага и +8 для|tr . \*
нестандартного вызова (см. Этот мета-пост )Входные данные приведены в качестве аргумента в гексагонии. Когда интерпретатор Hexagony вызывается с
-g N
опцией, он печатает шестиугольник.
s. Затем мы используем tr, чтобы заменить те на*
s.источник
hexagony -g $1|tr . \*
, если предположить, что интерпретатор шестиугольника назван таким образом.ruby ./interpreter.rb -g 5|tr . \*
Python 2, 61 байт
Печатает завершающий пробел в конце каждой строки.
Спасибо Эрику Аутгольферу за сохранение байта.
источник
int(input())
вместоinput()
обычнойprint(' '*j+'* '*(2*n+~j))
заменыprint' '*j+'* '*(2*n+~j)
- крутой код между прочим ;-)JavaScript (ES6), 77
81 84@Upvoters: не пропустите ответ @ETHproductions, то есть 76 байтов
Редактировать Пересмотрено после изменения в спецификации, допускается завершающий пробел
Только для шляпы ... эй! Нет шляпы?
Контрольная работа
источник
Гексагония ,
918786 байтПопробуйте онлайн!
Наконец-то сделал это.
Изначально (до того, как понять, насколько дорогие петли), я ожидаю, что это может соответствовать длине стороны 5, но теперь достаточно сложно вписать ее в длину стороны 6.
Чтобы получить это, мне нужно немного изменить линейный код. На самом деле, написание этого заставляет меня реализовать способ уменьшить линейный код на
12 байта.источник
JavaScript (ES6),
7776 байтЯ сказал себе, что не буду спать, пока не установлю новый рекорд ES6, не глядя на другие ответы, так что вот оно ...
Тестовый фрагмент
источник
C
91898074 байтаЯ в значительной степени подправил, чтобы получить правильные формулы, а затем смешал все это.
Позвоните
f
по номеру n , и он выведет шестиугольник на стандартный вывод.Разоблаченный и объясненный (80-байтовая версия):
Посмотрите это в прямом эфире на Coliru
Примечания:
printf
может обрабатывать отрицательные отступы, что приводит к выравниванию по левому краю с отступом справа. Таким образом, я попытался что-то сделать,w = printf("%*c*", y, ' ')
чтобы оно позаботилось об абсолютном значении, и я мог извлечь его из возвращаемого значения. К сожалению, нулевая и одна ширина отступа печатают символ самостоятельно, поэтому три центральные линии были идентичны.Обновление: Jasen нашел способ сделать это, печатая пустую строку вместо символа - 6 байтов сбрасывается!
Coliru неправильно обрабатывает символ возврата на одну позицию - выполнение этого кода на локальном терминале приводит к удалению начального пробела в каждой строке.
источник
w=printf("\n%*s",abs(y),"");++w<s*printf(" *");
05AB1E ,
1413 байтКод:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
Желе , 24 байта
Попробуйте онлайн!
Желе стыдно за то, что у него нет атома централизации, поэтому он побит 05AB1E и V. На 11 и 7 байтов соответственно!
Если вы найдете способ играть в гольф, пожалуйста, прокомментируйте. Любая помощь приветствуется.
Пояснение :
Бонус: чтобы узнать, сколько звезд в шестиугольнике, используйте это:
источник
Октава,
6258 байтПредыдущий ответ:
это можно назвать
Попробуйте (вставьте) это в Octave Online
Например , базовая изображение для
n=5
являетсякоторый может быть создан с
dilation morphological operator
Использованы 4 раз на изображении , используя следующую соседнюю маску:который может быть создан с
[k='01010'-48;~k;k]
Результат расширения:
затем замените 0 и 1 на '' и '*' соответственно
источник
postgresql9.6, 290 байт
отформатированный sql здесь:
выход:
источник
lpad
может быть в состоянии сэкономить вам несколько байтов. Я также назвал бы язык pl / pgsql, но это вызывает вопросы о том, нужно ли считатьdo language plpgsql $$
и закрытие$$;
. Это было бы лучше всего решать на мета, если они не пришли раньше.DECLARE
с? Разве ни один не сработает?V , 17 байт
Попробуйте онлайн!
Как обычно, здесь есть hexdump, поскольку он содержит непечатаемые символы:
источник
APL (Dyalog Unicode) ,
403635332725 байтПредполагает
⎕IO←0
, то есть индексация с нуля. Выходные данные содержат один начальный и один завершающий пробел в каждой строке.Большое спасибо @FrownyFrog и @ngn за много игры в гольф.
Попробуйте онлайн!
Как это устроено
источник
JavaScript (ES6),
8381 байтЭто мой первый (код гольф) ответ. Надеюсь я все правильно отформатировал.
В отличие от двух текущих ответов ES6, я не рекурсивно вызываю функцию, а использую консоль для вывода.
источник
alert
если вы укажете браузер JS?alert
его редактировал, он бы предупреждал построчно, а не все.Haskell,
999779 байтОбъяснение: Эта программа основана на наблюдении, что каждая строка n-шестиугольника содержит (nk) пробелы, за которыми следуют (n + k-1) звездочки, для некоторых k, зависящих от номера строки.
Редактировать: переключено на mapM_. Я не знал, что было доступно без использования импорта
источник
Python 2 ,
100978988878179 байт-1 из @ Flp.Tkc
-6 снова из @Flp
-2 с благодарностью @ nedla2004. Я пытался найти способ избавиться от второго кусочка, но не думал об этом :)
Попробуйте онлайн!
Создает массив для верхней половины, затем добавляет перевернутый массив минус среднюю строку и затем печатает. Печатает точно «как есть», за исключением того,
1
что печатает с начальным пробелом (я полагаю, что допускается как*
визуально то же самое, что и*
с начальным пробелом или без него).источник
Пакет, 161 байт
Примечание: завершающий пробел в строке 2. Ungolfed:
источник
JavaScript (ES6), 83 байта
источник
Холст , 9 байт
Попробуй это здесь!
Избиение встроенное: D
Объяснение:
Понятия не имею, почему есть огромные отступы, но это разрешено, и я скоро это исправлю.исправлено? Надеюсь, я ничего не сломалисточник
Perl 6 , 49 байт
Попробуйте онлайн!
Как это устроено
источник
Powershell,
91897868635248 байтТестовый скрипт:
Выход (дополнительный пробел):
Объяснение:
источник
gu
.PHP,
8379 байтЗапустите как трубу с
-nR
или попробуйте онлайн .Это близко к ответу Кодоса ; но
str_pad
корочеstr_repeat
даже когда в гольфе.И
++
в голове петли экономит еще немного.источник
Рубин, 54 байта
Лямбда-функция принимает n в качестве аргумента и возвращает строку, разделенную переводами строки. (
$/
переменная, содержащая разделитель строк по умолчанию.)в тестовой программе
источник
puts
) в число символов. Но перечитывая определение, оно говорит только о том, что ваша функция должна «вывести» результат, который можно прочитать как «вернуть» результат. Классное решение.Чарли, 125 байт
Страница Чарли GitHub: https://github.com/KCreate/charly-lang
источник
SmileBASIC, 74 байта
Добавляет ведущий и завершающий пробел.
Эти "шестиугольники" выглядят ужасно, когда персонажи имеют одинаковую ширину и высоту ...
источник
ракетка / схема
тестирование:
источник
Python 2, 111 байт
Скучная, простая реализация (и полная программа). Выводит пробел в каждой строке.
Testcases:
источник
Javascript (ES6), 143 байта
Наконец-то наступил рождественский перерыв (счастливого Рождества!), Поэтому у меня есть немного времени для игры в гольф.
И мальчик, это было какое-то время - отсюда большое количество байтов.
Поехали:
источник
for(j=c.length-2;j>-1;j--)c.push(c[j])
можно написать какfor(j=a-1;j;c.push(c[--j]))
иfor(i=0;i<a;i++){c.push(" ".repeat(a-i-1)+"* ".repeat(i+a-1)+"*")}
можноfor(i=0;i<a;c.push(" ".repeat(a-i-1)+"* ".repeat(a-1+i++));
. Оператор возврата может быть сокращен доreturn a-1?c.join
\ n.:"*"
В целом, эти изменения сохраняют 18B (11 + 7 + 1).Java,
157149129127 байтПопробуйте онлайн!
источник
String#repeat(int)
, но TIO по-прежнему JDK 10, следовательно, эмулируемыйrepeat(String,int)
метод (с тем же количеством байтов). Фактический код в Java 11 будет:s->{for(int j=~--s,t;++j<=s;System.out.println(" ".repeat(t)+"* ".repeat(s-~s-t)))t=j<0?-j:j;}
Гексагония (линейная),
128127,126 байт.Обратите внимание, что это не гексагония, а только (мета) язык, поддерживаемый Тимви в Esoteric IDE, поэтому он не подходит для получения награды.
Однако это может быть преобразовано в решение Hexagony
(и я думаю, что оно будет меньше, чем это решение), я могу сделать это позже. Требуется больше усилий,я сделал это здесь .Начальный
❢
занимает 3 байта (e2 9d a2
). Каждая новая строка занимает 1 байт (0a
).Нет Попробуйте онлайн! Это работает только в Esoteric IDE.
Аннотированный код:
источник
Japt
-R
,1110 байтПопробуйте (или используйте TIO для запуска нескольких тестов)
объяснение
источник