Нарисуйте звездочку треугольника


57

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

Входные данные:

  • Целое положительное число n >= 1.

Выход:

  • n строки звездочек, где каждая новая строка имеет на одну звездочку больше, чем предыдущая строка, и начинается с одной звездочки в первой строке.

Основные правила:

  • Это код-гольф, поэтому выигрывает самый короткий ответ в байтах.
  • Поскольку курс преподается на C ++, мне не терпится увидеть решения на C ++.

Тестовый пример (n = 5):

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

6
Не дублировать, просто подмножество Генерировать прямоугольный треугольник .
manatwork

2
Тренировочные места разрешены на каждой линии?
Луис Мендо

2
Является ли трейлинг новой строки приемлемым?
Фатализировать

1
Разрешен ли ведущий символ новой строки?
Райли

Я не вижу причины, почему нет.
Sickboy

Ответы:


41

Vim, 8 байт

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

Принимает ввод в буфере readahead, поэтому если input равен 15, вы должны ввести его, а затем код выше. Это глупое правило, но, похоже, это разрешено . Если бы вы получили ввод в регистр, как "a, вы бы просто вставить @aвперед (10). Если вы получили его из стартового файла, D@"вместо этого вы добавили бы (11).

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

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

1
Этот ответ безумно впечатляет. Один из самых крутых ответов vim, которые я видел.
DJMcMayhem

1
Это похоже на рыбу. Или ракета.
Стефан Бийзиттер

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 байтов, ха-ха.
Волшебная Урна Осьминога

1
@carusocomputing: TžQè×.p»даже 8 байтов.
Emigna

Все еще пытаясь выучить язык, пропустил инструкцию T; Я подумал, что это странно, что есть тонна толчков Base2, но нет базы 10. Мне все еще нужно просмотреть все содержимое файла info.txt, чтобы иметь возможность что-либо делать на этом языке, хе.
Волшебная Урна Осьминога

@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()

Ideone

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

правильно. Не видел этого
Cyoce


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"

*
**
***
****

В выводе присутствует начальный символ новой строки, но это разрешено OP.

Объяснение:

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

Matlab, 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());}

Попробуйте онлайн

Ungolfed:

//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(), '*'))

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


7

R, 45 байт

Для петлевого подхода:

for(i in 1:scan())cat(rep("*",i),"\n",sep="")

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

Pyth, 7 байт

VQ*\*hN

Сбил байт благодаря @ETHproductions Попробуйте онлайн

используя метод @ PIetu1998

6, байты

j*L*\*S

Хороший ответ! Вы можете заменить "*"на \*.
ETHproductions

@ETHproductions Я никогда не знал об этом, спасибо!
Dignissimus - Спам

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

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

6

2sable , 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 байт или меньше.
Emigna

1
Приятно! Я скоро отредактирую
Гено Раклин Ашер

Не могли бы вы добавить объяснение?
Переполнение буфера

Замечательный код, поздравляю с получением награды! Бот сообщества, похоже, получил только 25, а не 50 оригинальных, я думаю, потому что я забыл присуждать награду раньше срока, извините за это.
Переполнение буфера

1
Не беспокойся об этом. Просто рад достичь отметки в 100 представителей. @TheBitByte
Гено Раклин Ашер

6

Brain-Flak 75 Bytes

Включает +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

Dyalog APL , 8 байт

'*'⍴⍨¨⍳

составить список из

'*' строка "*"

⍴⍨ изменен

¨ каждый из

целые числа от 1 до аргумента.

Попробуй APL онлайн!


Похоже, 8 байтов для меня.
Эрик Outgolfer

1
if может быть одним байтом:(,⍕⊢)⌸⍳
ngn

@ngn Это очень умно! Разместите его как свой собственный. Вы действительно можете считать это как один байт, который вы пишете 7 bytes<sup>SBCS</sup>.
Адам

5

V , 8 байт

Àé*hòlÄx

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


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

2
@JonathanAllan Эй, по крайней мере, это более читабельно, чем желе. (Для меня);)
DJMcMayhem

Кодовая страница желе довольно хорошо организована, я думаю. Посмотрите на страницу с атомами вики, сделанную недавно Линн.
Джонатан Аллан

3
@JonathanAllan Да, я бы в это поверил. Это может выглядеть не так, но мнемоника V хорошо организована благодаря клавишам, которые вы используете для ввода их в vim. Таким образом, мое решение на языке vim-key - это <M-@><M-i>*h<M-r>l<M-D>x(m означает meta, что означает 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флаг считается как 1 дополнительный байт.
ETHproductions

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

@ 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<>
Ton Hospel

@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.
Иона

5

Vim, 22 , 18 нажатий клавиш

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

Огромная благодарность @Udioica за то, что она предложила мне потрясающий vim-ответ, который я расширил. Этот ответ не содержит звездочек в надежде выиграть награду.

Объяснение:

Ввод набирается до остальной части программы. Udioica придумала этот удивительный трюк. Печатание <n>O <esc>создаст пирамиду пробелов и одну пустую строку, если вы :set autoindentвключили. Эта опция включается по умолчанию в vim 8 и neovim, но не в более старых версиях vim. Так как это также создает дополнительную строку, мы используем, Jчтобы соединить эту строку со следующей, что фактически просто удаляет строку ниже нас.

Теперь на этом этапе нам нужно заменить все эти пробелы звездочками. Если бы я не беспокоился об использовании звездочек в своем коде, я бы просто визуально выбрал все это <C-v>{и тип r*, который заменяет каждый символ выделения звездочкой. Но я не могу этого сделать.

Поэтому мы открываем страницы справки для :h r. Интересно, что в окне vim эта страница отображается как:

                            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] nd этого слова).

Чтобы закрыть этот буфер, мы используем ярлык для сохранения файла ZZ. Теперь мы визуально выбираем наши пробелы и запускаем вытянутый текст, как будто мы его набрали, выполнив @". Это работает, потому что "@" запускает следующий регистр как vim-keystrokes, и "является регистром по умолчанию для янки.


Не хочешь объяснить, как это работает?
corvus_192

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

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

@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

@ Manatwork Спасибо, приятель. сохранение другого байта
cleblanc

В идеоне печать 2 треугольника показывает в конце еще один '\ n': * ** *** * ** *** **** ***** Я говорю случай 0 конец случая рекурсия, распечатай еще \ n
РосЛюП

@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.