Накресліть трикутник зірочкою


57

Натхненний завданням для програмування 101 ось завдання, яке, сподіваємось, не надто просто або є дублікатом (начебто важко шукати подібні речі).

Вхід:

  • Позитивне ціле число n >= 1.

Вихід:

  • n рядки зірочок, де кожен новий рядок має одну зірочку більше, ніж рядок раніше, і починаючи з однієї зірочки в першому рядку.

Загальні правила:

  • Це код-гольф, тому найкоротша відповідь у байтах виграє.
  • Оскільки курс викладається на мові C ++, я хочу бачити рішення на C ++.

Тестовий випадок (n = 5):

*
**
***
****
*****

6
Не дублювати, просто підмножина Створити правильний трикутник .
манатура

2
На кожному рядку дозволено навчальні місця?
Луїс Мендо

2
Чи прийнятний новий рядок?
Фаталізувати

1
Чи дозволений провідний новий рядок?
Райлі

Я не бачу причини, чому ні.
Sickboy

Відповіді:


41

Vim, 8 байт

o <Esc><C-V>{r*J

Здійснює введення в буфер для читання головою, тому якщо вхід становить 15, ви введете це, а потім код вище. Це нерозумно правило, але , здається , буде дозволено . Якщо ви отримали внесок у такий реєстр "a, ви просто дотримуйтесь @aпопереду (10). Якщо ви отримали його зі стартового файлу, ви б D@"замість цього додали (11).

Покладається на зловживання :set autoindent, яке за замовчуванням застосовується у правилах vimgolf.com та за замовчуванням у Vim 8 (і всі користуються ним у будь-якому разі).

  • o <Esc>: Із його аргументом номер, якщо ваш текст починається з пробілу, а у вас є :set autoindent, Vim виблискує і створює каскад відступів.
  • <C-V>{r*: Перетворіть усі ці пробіли в *s. Я використовую блок візуального, так що навіть якщо ваші хитрі налаштування відступу мовчки згрупують ваші пробіли на вкладки, ви все одно отримаєте потрібну кількість *s.
  • J: Починаючи з, oна жаль, залишеного порожнього рядка вгорі. Це видаляє його.

1
Ця відповідь шалено вражає. Один з найкрутіших відповідей vim, який я бачив.
DJMcMayhem

1
Це схоже на рибу. Або ракетою.
Stephan Bijzitter

1
Я трохи посмикнувся і запустив Vim, -u NONEщоб переконатися у цьому ... Це не спрацювало, здається, autoindentвін у vimrc за замовчуванням , а не сам vim 8, тому мені довелося повернути його вручну. Але, капелюхи для винахідливості цієї відповіді! Але чому для нового рядка є лише один пробіл? Чому він працює лише з пробілами, але не з іншими символами? У мене ще є чому навчитися, як здається :)
Крістіан Рондо

Починати з O <Esc>не потрібно Jв кінці.
прим

1
@udioica, один єдиний новий рядок, як правило, вважається прийнятним.
прим

23

JavaScript (ES6), 31 байт

Цей включає як провідний, так і кінцевий розрив ліній.

Почнемо з рядка, sщо містить лише розрив рядка. Потім ми обробляємо nрекурсивні дзвінки, додаючи зірочку з лівої сторони цього рядка при кожній ітерації. Конкатенація всіх проміжних рядків призводить до очікуваного результату.

f=(n,s=`
`)=>n?s+f(n-1,'*'+s):s

Без зірочки, 36 байт

f=(n,s=`
`)=>n?s+f(n-1,atob`Kg`+s):s

Як це працює ?
Alexis_A

1
@Alexis_A - я додав короткий опис.
Арнольд

3
Приємна рекурсивна відповідь; Я ніколи б не подумав про техніку, якою ви користуєтесь s. Ви можете зробити це трохи менш крикливим n?s+f(n-1,'*'+s):s.
ETHproductions

19

05AB1E , 7 6 байт

Використовує кодування CP-1252 .

'*×.p»

8-байтна версія без зірочок:

žQTè×.p»

Спробуйте в Інтернеті!

Пояснення

Приклад за допомогою введення n = 5

'*      # push "*"
        # STACK: "*"
  ×     # repeat input number times
        # STACK: "*****"
   .p   # get prefixes of string
        # STACK: ['*', '**', '***', '****', '*****']
     »  # join by newlines
        # implicit print

@TheBitByte 10žQSè×.p»- це логічне розширення цієї відповіді, щоб отримати те, що ви хотіли для винагороди, і це лише 10 байт. Дайте Еміньї щедрості, якщо ніхто не б'є 10 байт ха-ха.
Magic Octopus Urn

1
@carusocomputing: TžQè×.p»це навіть 8 байт.
Емінья

Ще намагаючись вивчити мову, пропустив інструкцію Т; подумав, що це дивно, що є тонна Base2 штовхань, але немає бази 10. Мені все одно потрібно прочистити весь вміст info.txt, щоб мати змогу зробити що-небудь на цій мові.
Magic Octopus Urn

@carusocomputing деякі команди дуже легко пропустити, особливо якщо ви знаєте інший спосіб це зробити :)
Emigna

1
@carusocomputing: Не впевнений, про що йдеться. Єдина команда списку, яку я тут використовую », - це команда спеціально для об'єднання списків з роздільниками в рядок (і Sзнищила б це). Але багато команд 05AB1E векторизують, так.
Емінья

15

PowerShell, 21 байт

1..$args[0]|%{'*'*$_}

Цикли від 1введення $args[0], кожна ітерація використовує множення рядків для побудови рядка з багатьох $_зірочок. Поведінка за замовчуванням для неявного Write-Outputв кінці - це новий рядок для роздільника, тому ми отримуємо це безкоштовно.

PS C:\Tools\Scripts\golfing> .\draw-asterisk-pattern.ps1 5
*
**
***
****
*****

PS C:\Tools\Scripts\golfing> .\draw-asterisk-pattern.ps1 2
*
**

PS C:\Tools\Scripts\golfing> .\draw-asterisk-pattern.ps1 7
*
**
***
****
*****
******
*******

13

Python 2, 37 34 байт

i=1;exec"print'*'*i;i+=1;"*input()

Ідеон

iініціалізовано до 1;
потім execкоманди для виконання наступного рядка коду, тому він повинен бути побудований;
рядок є, "print'*'*i;i+=1;"але *наступна рядок має перевагу над execі вказує спочатку повторити input()строки; Тепер команда виконує довгий рядок , яка діє як петлі, Инж іншого рядка збільшення довжини, знову використовуючи повторити символ , а потім збільшується з .
execprint*'*'ii+=1

Python 3, 41 байт:
def f(n):i=1;exec("print('*'*i);i+=1;"*n) ; або
lambda n,i=1:exec("print('*'*i);i+=1;"*n)


13

Желе , 6 5 байт

”*ẋþY

TryItOnline

Як?

”*ẋþY - Main link: n
”*    - literal string "*"
   þ  - form outer product with the dyadic function:
  ẋ   -     repeat list (right input is an implicit range(n), Jelly defaults to 1-based)
            so the outer product is like:
            [[i*'*' for i in range(1,len("*")+1)] for x in range(1,n+1)]
    Y - join with line feeds
      - implicit print

Баунті:
Я не впевнений, що таке пункт про порядкові порядки, оскільки персонаж - це пошук порядкового.
Прямий пошук був би просто 42Ọẋþ³Yна 7 байт - там, де ³отримує нам введення)
Короткий трохи непрямий метод був би для 8 байт , “)’Ọẋþ³Y- де ми знаходимо ')'в кодовій сторінці желей, яка є 1-індексованою, тому “)’виходить 42.


щось цікаве трапляється, коли ви використовуєте провідний 0 у вводі, наприклад. спробуйте "0414141" як вхід. Я не знаю мов гольфу, тому не знаю, з чого почати намагатися пояснити це.
Лука

Я думаю, що вона оцінюється як рядок, і, отже, вона повторюється поперек неї, оскільки рядок є ітерабельним, і тоді кожен символ оцінюється до цілого числа, оскільки вони є усіма цифрами (це буде помилка, наприклад, "привіт")
Джонатан Аллан

11

C #, 42 байти

f=n=>n<1?"":f(n-1)+"\n"+new string('*',n);

Повна програма з тестовим кейсом:

using System;

namespace DrawAnAsteriskPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            Func<int,string>f= null;
            f=n=>n<1?"":f(n-1)+"\n"+new string('*',n);

            Console.WriteLine(f(5));
        }
    }
}

Вам це потрібно, оскільки це рекурсивна функція.
adrianmp

правильно. Не бачив цього
Кіос


9

GNU sed , 25 24 20 + 1 (n прапор) = 21 байт

Редагувати: 4 байти менше на основі коментарів Райлі

x;G;:;P;s:\n.:*\n:;t

Спробуйте в Інтернеті!

Приклад запуску: введення зроблено в одинарному форматі, що для sed дозволено на основі цього консенсусу

me@LCARS:/PPCG$ sed -nf draw_triangle.sed <<< "0000"

*
**
***
****

Провідний новий рядок присутній у висновку, але це дозволено ОП.

Пояснення:

x;G             # prepend a newline to unary string
:               # start loop
   P            # print first line only
   s:\n.:*\n:   # shift one unary char from 2nd line to 1st, converted to a '*'
t               # repeat

Якщо ви перейдете Pдо заміни та дозволена нова лінія, вам це не потрібно /0$/. Якщо новий рядок заборонений, ви можете зберегти байт за допомогою x;G;:;/*/P;s:\n.:*\n:;t. Я запитав про ведучий новий рядок, але ще не чув.
Райлі

8

Матлаб, 26 23 байти

Старий добрий Матлаб ...

@(n)tril(repmat('*',n))

Має відсталі пробіли. trilдає нижню трикутну матрицю.

редагувати: збережено 2 байти завдяки Луїсу Мендо


Ви маєте рацію - дякую - все ще не дуже конкурентоспроможно: P
mathause

8

C ++ - 92 96 байт

#include<string>
int main(){int n;std::string s;scanf("%d",&n);for(;n--;)puts((s+="*").data());}

Спробуйте в Інтернеті

Безголівки:

//this one hurts, but c++ strings are mutable
#include<string> 
int main(){
    int n;
    //this one hurts as well
    std::string s; 
    //read input to n
    //longer than 'std::cin>>n', but no #include<iostream> needed
    scanf("%d",&n); 
    // same as 'while(n--)', also characterwise, but way cooler
    for(;n--;) 
        //add a '*' the string
        //data() does the same as c_str()
        //puts automatically adds an '\n'
        puts((s+="*").data()); 
}

має бути 'int main () {}' на +4 байти.

правда, блін - настільки нестандартна поведінка gcc / ideone
Anedar

7

Медузи , 12 11 9 байт

\P$'*
  i

Спробуйте в Інтернеті!

Пояснення

Вищеописана програма еквівалентна наступному функціональному псевдокоду:

\            P      $       i        '*
map_prefixes(print, reshape(input(), '*'))

$(Reshape) створює рядок Nзірочок. \Pстворює функцію, яка приймає список (або рядок) і передає кожен його префікс P(print). Таким чином, це послідовно виводить рядки 1на Nзірочки.



6

Брахілог , 12 байт

yke:"*"rj@w\

Спробуйте в Інтернеті!

Це передбачає, що нова лінія є прийнятною

Пояснення

yk                The range [0, …, Input - 1]
  e               Take one element I of that range
   :"*"rj         Juxtapose "*" I times to itself
         @w       Write that string followed by a new line
           \      False: backtrack to another element of the range

Немає нового рядка, 15 байт

-:"*"rj:@[f~@nw

Спробуйте в Інтернеті!

Цей працює, приймаючи всі префікси "*" × Input.


6

Haskell, 35 38 байт

Перелічіть розуміння завдяки німі:

f x=unlines[[1..n]>>"*"|n<-[1..x]]

Стара версія:

f 0=""
f n=f(n-1)++([1..n]>>"*")++"\n"

Альтернативна версія:

g n=([1..n]>>"*")++"\n"
f n=[1..n]>>=g

Ви можете використовувати ([1..n]>>"*")замість, replicate n'*'щоб зберегти байт. Я також налічую лише 39 байт.
Лайконі

Хороша альтернативна версія! Однак я думаю, що кількість байтів все ще є одним і має становити 38. (Див., Наприклад, тут ) Проблемою може бути новий рядок, після f 0=""якого рахується як один байт, але відображається як два байти / символи в деяких текстових редакторах.
Лайконі

Дякую! Зараз я бачу, що я спочатку додавав останній рядок, коли рахував символи. Не буду робити цю помилку ще раз!
Крейг Рой

2
Ви можете перейти до списку розуміння: f x=unlines[[1..n]>>"*"|n<-[1..x]].
німі

6

Піт, 7 байт

VQ*\*hN

Збив байт завдяки @ETHproductions Спробуйте в Інтернеті

використовуючи техніку @ PIetu1998

6, байт

j*L*\*S

Гарна відповідь! Ви можете замінити "*"на \*.
ETHproductions

@ETHproductions Я ніколи про це не знав, дякую!
Dignissimus

Ви можете видалити ще один байт з картою. j*L\*S(включаючи Sive діапазон, помножте кожен *Lна "*" \*, join на новий рядок) Pyth в кінці вставляє неявний Q.
PurkkaKoodari

jm*\*hтакож 6 байт.
hakr14

6

2able , 24 11 байт

>G')Ç>çJN×,

Спробуйте в Інтернеті!

І жодних ознак жодних зірочок! Гольфували з 24 до 11 завдяки @Emigna .

Пояснення:

>G')Ç>çJN×,
>            Push input+1
 G           For N in range (1,input+1)
  ')Ç>çJ     Push '*' by getting ascii code for ')' and adding 1
        Nx,  Print '*' repeated N times

1
Кілька порад. õVYIне впливає на ваш код жодним чином і його можна видалити. 1+те саме, що >. Якщо ви створили зірочку в циклі, її також можна видалити UX. Використання ×замість внутрішньої петлі економить ще більше байтів. Без зміни методу ви можете звести це до 11 байт або менше.
Емінья

1
Приємно! Я скоро відредагую
Geno Racklin Asher

Чи можете ви додати пояснення?
Буфер над

Чудовий код, вітаємо з отриманням щедрості! Здається, бот спільноти присвоїв лише 25, а не оригінальних 50, я думаю, тому що забув нагородити нагороду до крайнього терміну, вибачте за це.
Буфер над

1
Не хвилюйся з цього приводу. Просто радий досягти позначки 100 повторень. @TheBitByte
Geno Racklin Asher

6

Мозок-Флак 75 байт

Включає +3 для -A

{(({})[()]<{({}[()]<(((((()()()){}()){})){}{})>)}{}((()()()()()){})>)}{}

Спробуйте в Інтернеті!


Пояснення:

{(({})[()]<                                                        >)}
#reduce the top element by one until it is 0 after doing the following
#Push this element back on to act as a counter for the next step.
#(counts down from input to 0 we'll call this counter)

           {({}[()]<                          >)}
           #reduce the top element by one until it is 0 after doing the following
           #(counts down from counter to 0)

                    (((((()()()){}()){})){}{})  
                    #push 42 (the ASCII code for *)

                                                 {}
                                                 #pop the counter used to push
                                                 #the right number of *s

                                                   ((()()()()()){})
                                                   #push a 10 (newline)

                                                                      {}
                                                                      #pop the null byte

це включає нульовий байт у виході? Я не думаю, що це дозволено ...
Руйнуючий лимон

Ні, я маю на увазі нульовий байт
руйнуючий лимон

@DestructibleWatermelon Так, я думаю, що так і є. Легко виправити, хоча. Дякую.
Райлі

6

Діалог APL , 8 байт

'*'⍴⍨¨⍳

матрифікувати список, що складається з

'*' рядок "*"

⍴⍨ перероблений

¨ кожен з

цілі числа 1 через аргумент.

СпробуйтеAPAP онлайн!


Схоже, мені 8 байт.
Ерік Аутгольфер

1
якщо може бути один байт:(,⍕⊢)⌸⍳
ngn

@ngn Це дуже розумно! Опублікуйте це як своє. Ви дійсно можете рахувати це як один байт, який ви пишете 7 bytes<sup>SBCS</sup>.
Адам

5

V , 8 байт

Àé*hòlÄx

Спробуйте в Інтернеті!


О так, так Àé hòlÄ!
Джонатан Аллан

2
@JonathanAllan Гей, принаймні, це читабельніше, ніж Jelly. (Для мене);)
DJMcMayhem

Кодова сторінка Джеллі, я думаю, досить добре організована. Ознайомтеся з переглядом сторінки вікі Atoms, зробленої нещодавно Лінн.
Джонатан Аллан

3
@JonathanAllan Так, я б повірив. Це може не виглядати так, але мнемоніка V дуже добре організована через клавіші, які ви використовуєте для введення їх у vim. Тож моє рішення у vim-key lingo є <M-@><M-i>*h<M-r>l<M-D>x(m означає мета, що означає alt). Усі вони досить хороші мнемоніки для того, що робить команда.
DJMcMayhem


5

Perl 6 , 23 байти

{.put for [\~] '*'xx$_}

(Якщо дозволено вивести список із "рядків" без нових рядків, .put for можна видалити)

Пояснення:

# bare block lambda with implicit parameter 「$_」
{
  .put            # print with trailing newline
    for           # for every one of the following
      [\~]        # produce using concatenation operator
        '*' xx $_ # list repeat '*' by the input
}

(Дивіться документацію, produceякщо ви не розумієте, що [\~] ...робиться)


5

Perl 5, 22 20 байт

say"*"x$_ for 1..pop

Запустіть його за допомогою -Eперемикача, щоб дістати say.

$ perl -E 'say"*"x$_ for 1..pop' 5
*
**
***
****
*****

Виписана як повна програма, це виглядатиме так:

use strict;
use feature 'say';

# get the argument
my $limit = pop @ARGV;

foreach my $i (1 .. $limit) { 
    say "*" x $i; 
}

Не впевнений, чи потрібні мені додаткові байти для комутатора командного рядка.
simbabque

Я вважаю, що -Eпрапор вважається одним додатковим байтом.
ETHproductions

Що з прийняттям числа як введення замість параметра? perl -E 'say"*"x$_ for 1..<>' <<< 5
манатура

@manatwork Так, це спрацювало б. Я не вмію рахувати, хоча. Не впевнений, чи це дозволено.
simbabque

1
-Eє безкоштовним (оскільки він замінює те, -eщо все одно було б потрібно). Якщо ви дійсно хочете взяти число з командного рядка (чому б ні, навіть якщо <>на 1 байт коротше і дозволено), вам слід використовувати popзамість shift(2 байти коротше)! У будь-якому випадку, ласкаво просимо на PPCG, раді бачити вас у гольф!
Дада

5

Perl, 19 байт

-4 байти завдяки @Ton Hospel та його переробці рішення!

eval"s//*/;say;"x<>

Для запуску потрібен безкоштовний -E(або -M5.010) прапор. Бере число з введення:

perl -E 'eval"s//*/;say;"x<>' <<< "5"

1
Ви можете зробити evalтаку ж довжину, що і forрішення (використовуючи <>замість цього pop) за допомогоюeval"s//*/;say;"x<>
Тона Євангелія

@TonHospel Ineed, приємно! Дякую!
Дада

5

J, 11 8 байт

Збережено 3 байти за милі!

]\@#&'*'

Ось декомпозиція:

(]\@#&'*') x
x (]\@#) '*'
]\ (x # '*')

Тепер цей останній читається як "префікси ( ]\) рядка, що складається з xкопій '*'". Дотримуйтесь:

   5 ]\@# '*'
*
**
***
****
*****
   ]\ 5# '*'
*
**
***
****
*****
   ]\ 5 # '*'
*
**
***
****
*****
   ]\@#&'*' 5
*
**
***
****
*****

Тестовий випадок

   f =: ]\@#&'*'
   f 3
*
**
***
   f 5
*
**
***
****
*****
   f 1
*
   f 2
*
**
   f &. > ;/1+i.10
+-+--+---+----+-----+------+-------+--------+---------+----------+
|*|* |*  |*   |*    |*     |*      |*       |*        |*         |
| |**|** |**  |**   |**    |**     |**      |**       |**        |
| |  |***|*** |***  |***   |***    |***     |***      |***       |
| |  |   |****|**** |****  |****   |****    |****     |****      |
| |  |   |    |*****|***** |*****  |*****   |*****    |*****     |
| |  |   |    |     |******|****** |******  |******   |******    |
| |  |   |    |     |      |*******|******* |*******  |*******   |
| |  |   |    |     |      |       |********|******** |********  |
| |  |   |    |     |      |       |        |*********|********* |
| |  |   |    |     |      |       |        |         |**********|
+-+--+---+----+-----+------+-------+--------+---------+----------+

Старіші, 11-байтові рішення

'*'#~"+1+i.

Це рівнозначно

'*' #~"0 1 + i.

1 + i.- дальність [1, x]. Потім, '*' #~"0застосовані до цього діапазону форми (елемент) копії '*'.

Бонусна програма:

[:#&'*'\#&1

Це обмежена вилка, #&'*'\застосована до результату #&1введення. #&1дає масив з xодиниць та #&'*'\форми '*'префіксів цього масиву.

Тестові кейси

   f1 =: '*'#~"+1+i.
   f2 =: [:#&'*'\#&1
   f1 1
*
   f2 2
*
**
   f1 3
*
**
***
   f2 4
*
**
***
****
   f2 5
*
**
***
****
*****
   f1 5
*
**
***
****
*****
   (f1;f2)3
+---+---+
|*  |*  |
|** |** |
|***|***|
+---+---+
   f1;f2
f1 ; f2
   (f1;f2)5
+-----+-----+
|*    |*    |
|**   |**   |
|***  |***  |
|**** |**** |
|*****|*****|
+-----+-----+
   (f1;f2)10
+----------+----------+
|*         |*         |
|**        |**        |
|***       |***       |
|****      |****      |
|*****     |*****     |
|******    |******    |
|*******   |*******   |
|********  |********  |
|********* |********* |
|**********|**********|
+----------+----------+

Ви можете також отримати префікси рядки з nкопій '*'на 8 байт з використанням]\@#&'*'
миль

@miles: і ще 9-байтна версія:'*'"0\@i.
Jonah,

5

Вім, 22 , 18 натискань клавіш

O <esc>J:h r<cr>lyEZZ<C-v>{@"

Величезна заслуга @Udioica за те, що я придумав дивовижну відповідь, яку я продовжив . Ця відповідь не містить жодних зірочок, сподіваючись виграти виграш.

Пояснення:

Введення вводиться перед рештою програми. Udioica придумала цей дивовижний трюк. Введення тексту <n>O <esc>створить піраміду пробілів та один порожній рядок, доки ви це :set autoindentввімкнули. Цей параметр увімкнено за замовчуванням у vim 8 та neovim, хоча не у старих версіях vim. Оскільки це також створює додатковий рядок, ми використовуємо Jдля приєднання цього рядка до наступного, який фактично просто видаляє рядок під нами.

Тепер на цьому етапі нам потрібно замінити всі ці пробіли зірочками. Якби я не переймався використанням зірочок у своєму коді, я б просто візуально вибрав всю справу <C-v>{та тип r*, який замінює кожен символ виділення зірочкою. Але я не можу цього зробити.

Тож ми відкриваємо довідкові сторінки для :h r. Цікавим є те, що у вікні вікно ця сторінка відображається як:

                            r
r{char}         Replace the character under the cursor with {char}.
                ...

За допомогою курсору на першому 'r'. Однак сам файл фактично містить цей текст:

                            *r*
r{char}         Replace the character under the cursor with {char}.
                ...

Досить зручно. Таким чином, ми переходимо на один символ за допомогою lта (витягуємо текст r*з yE([y] ank до [E] й цього слова).

Щоб закрити цей буфер, ми використовуємо ярлик для збереження файлу ZZ. Тепер ми візуально вибираємо наші пробіли і запускаємо витягнутий текст так, ніби ми його набрали @". Це працює, тому що "@" запускає наступний реєстр як натискання клавіш vim, і "є регістром за замовчуванням для yanking.


Хочете пояснити, як це працює?
corvus_192

@ corvus_192 Я додав більш широке пояснення, а також гольф ще трохи.
DJMcMayhem

Чи не слід розмір файлу даних додавати до кількості байтів?
aross

@розмір розміру файлу довідки? Ні, оскільки цей файл встановлено поряд із vim та є функцією за замовчуванням.
DJMcMayhem

5

C, 47 46 45 43 байт

Здійснює введення з командного рядка

f(n){for(n&&f(n-1);~n;putchar(n--?42:10));}

В основному, якщо n не 0, повторіть на n-1. вгорі рекурсії, де n дорівнює 0, вона просто друкує новий рядок, цикл for закінчується, коли n дорівнює -1 або ~ n дорівнює нулю, інакше він друкує ASCII 42, який є '*'. Спробуйте це на ideone

C ++ 58 байт + 19 для включення iostream дорівнює 77

#include<iostream>
int f(int n){for(n&&f(n-1);~n;std::cout<<(n--?"*":"\n"));}

main(c,v)char**v;
{
    f(atoi(v[1]));
}

a.exe 3
*
**
***

Мені здається, працює з &&: n?f(n-1):0n&&f(n-1).
манатство

@manatwork Дякую збереження ще одного байту
cleblanc

У ideone друку двох трикутників показують в кінці є одне '\ n' більше: * ** *** * ** *** **** ***** Я кажу, що справа 0 справа закінчення revursion, надрукуйте ще один \ n більше
RosLuP

@RosLup Так, це друк провідного та останнього нового рядка. Я думаю, що ОП заявила, що це нормально у своїх коментарях.
cleblanc

4

Сітківка , 14 байт

Кількість байтів передбачає кодування ISO 8859-1.

.+
$**
.
$`$&¶

Спробуйте в Інтернеті!

Пояснення

.+
$**

Перетворіть вхід Nу Nзірочки.

.
$`$&¶

Замініть кожну зірочку на все, що стосується, включаючи цю зірочку (це та $`$&) і передачу рядків (це ).



4

Cubix , 22 байти

?(.;I:^;/-.@o;(!\>'*oN

Перевірте це в Інтернеті! Виводить новий рядок.

Спочатку я не був впевнений, що зможу це помістити на 2-куб, але врешті-решт це вийшло чудово:

    ? (
    . ;
I : ^ ; / - . @
o ; ( ! \ > ' *
    o N
    . .

Я додам пояснення, коли встигну, сподіваюся, пізніше сьогодні.


Пояснення найближчим часом? : P
FlipTack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.