Хорошо, мой первый вопрос по гольфу. Пожалуйста, будьте нежны :) Я знаю, что есть слишком много загадок ascii: P, но мы здесь.
Задача проста, используйте ваш любимый язык программирования, чтобы напечатать треугольную рябь. На входе должен быть размер пульсации.
Каждый треугольник равномерно распределен. По сути, вы продолжаете добавлять треугольники, пока не будет достаточно места для самого маленького треугольника.
Вам разрешают пробелы в любом месте, где вы хотите, если рябь такая же, как в примере с правильным размером.
пример
q)g 1
__
\/
q)g 2
____
\ /
\/
q)g 3
______
\ /
\ /
\/
q)g 4
________
\ __ /
\ \/ /
\ /
\/
q)g 5
__________
\ ____ /
\ \ / /
\ \/ /
\ /
\/
q)g 6
____________
\ ______ /
\ \ / /
\ \ / /
\ \/ /
\ /
\/
q)g 7
______________
\ ________ /
\ \ __ / /
\ \ \/ / /
\ \ / /
\ \/ /
\ /
\/
q)g 8
________________
\ __________ /
\ \ ____ / /
\ \ \ / / /
\ \ \/ / /
\ \ / /
\ \/ /
\ /
\/
Как обычно, самый короткий код выигрывает :)
Ответы:
Pyth, 31 байт
Демонстрация.
Объяснение:
источник
GNU sed -nr, 210
Начало:
Ввод является положительным унарным целым числом через STDIN, согласно этому мета-вопросу .
Выход:
источник
C 165 байт
Перед этапами игры в гольф, которые разрушают читабельность:
Это перебирает все символы в прямоугольнике, содержащем фигуру, и оценивает линейные уравнения, которые отделяют внутреннюю часть треугольника от внешней, а также те, которые разделяют различные части треугольника.
источник
n,x,y,b,c;main(c,v)char**v;{for(n=atoi(v[1]);y<=n;++y)for(x=-n;x<=n;putchar(x++-n?b>6*y?95:b<6*y-4&c>0&c%4==1?"/\\"[x<1]:32:10))c=(b=2*n-abs(2*x+1))-2*y+2;}
Сетчатка , 182 байта
Принимает ввод как унарный.
Каждая строка должна идти в свой собственный файл и
#
должна быть заменена на новую строку в файлах. Это нецелесообразно, но вы можете запускать код как один файл с-s
флагом, сохраняя#
маркеры. При желании вы можете изменить#
символы на новые строки в выходных данных. Например:Код не слишком удачный (пока).
источник
C - 206 байтов
i,j,m,k,a,b;main(i,v)char**v;{m=atoi(v[1])*2;while(k<m*(m/2+1)){i=k/m;j=k%m;a=i*3,b=(i+j)%2;putchar("_\\/ "[j>=a&&j<m-a?0:j>i-2&&b&&j<i*3-1&&j<m/2?1:j<=m-i&&!b&&j>m-a&&j>=m/2?2:3]);if(j==m-1)puts("");k++;};}
Пример вывода
источник
int
. Кроме того, если вы объявляете их в глобальной области видимости, они автоматически инициализируются равными 0. Вместо несколькихputchar()
вызовов в разных ветвях вы можете использовать один вызов и заменитьif
операторы на троичные операторы. Конечно, это становится трудно читать таким образом, но полностью в духе этого сайта писать некрасивый код, если он короче. :)JavaScript ( ES6 ) 165
180 204Запустите сниппет в Firefox для проверки. Если возврата строки недостаточно, использование оповещения для вывода - это еще 2 символа.
источник