In cây Giáng sinh


26

Các thách thức

In một cây Giáng sinh đẹp với ngôi sao của chính nó ở đầu bằng cách sử dụng mã ngắn nhất có thể. Ngôi sao cây là một dấu sao ( *) và thân cây được tạo ra từ 0Cây phải cao 10 hàng. Mỗi hàng phải được thụt lề đúng cách theo cách mà hàng trước được căn giữa so với hàng tiếp theo. Bất kỳ hàng đã cho nào cũng phải có thêm 2 số 0 so với trước, ngoại trừ hàng đầu tiên là ngôi sao và hàng thứ hai chỉ có một 0. Kết quả là như thế này:

          *
          0
         000
        00000
       0000000
      000000000
     00000000000
    0000000000000
   000000000000000
  00000000000000000

Tie break cho cây có chiều cao thay đổi kích thước mà không thay đổi phần mềm (ngoại trừ thay đổi tham số chiều cao)

Xin vui lòng, dán cây kết quả của mã của bạn quá!


Bảng xếp hạng


3
Không chính xác là một bản sao nhưng có cái này trên SO: Code Golf Christmas Edition: Cách in ra một cây thông Giáng sinh có chiều cao N
Hasturkun

Câu trả lời:


17

Golf, 27 ký tự

" "9*"*"9,{n\.4$>\.+)"0"*}%

Cây kết quả trông như thế này:

         *
         0
        000
       00000
      0000000
     000000000
    00000000000
   0000000000000
  000000000000000
 00000000000000000

Phiên bản chỉ sử dụng tham số chiều cao một lần dài hơn một ký tự:

9." "*"*"@,{n\.4$>\.+)"0"*}%

Đọc chiều cao từ stdin (với đầu vào "10" để tạo cây mẫu) sẽ có cùng số lượng ký tự (28):

~,)" "*"*"@{n\.4$>\.+)"0"*}%

56

Tôi biết điều này không tuân thủ thông số kỹ thuật, nhưng tôi nghĩ tôi sẽ cố gắng thêm sự đa dạng cho cây cối ở đây bằng cách bắt chước cảnh Giáng sinh nghệ thuật ASCII cổ điển này của Joan G. Stark .

Tôi đã không cố gắng tái tạo toàn bộ bức tranh - đó sẽ là một chút quá nhiều - nhưng chỉ là cái cây mà tôi trình bày chương trình Perl 138 byte này:

$_=join$/,qw'11| 8\2_2/ 9(\o/) 5---2/1\2--- 10>*<',map(11-$_.A.AA x$_,2..11),'9\|H|/';s/\d+/$"x$&/eg,s/A/substr">>>@*O<<<",rand 9,1/eg,say

Và, tất nhiên, đây là một mẫu của đầu ra:

           |
        \  _  /
         (\o/)
     ---  / \  ---
          >*<
         >O><@
        <><<>><
       @><><>@<<
      @<O><*@*>>O
     OO@@*O<<<*<OO
    ><<>@><<>@<><><
   >><O<>>><@*>>><<O
  *<>*<><<>@><O*>><*<
 O><><<@<*>><O*@>O><>*
O<><<><@O>>*O*OO<><<>O>
         \|H|/

Hãy thử trực tuyến!

Mã này sử dụng saytính năng Perl 5.10+ và do đó cần phải được chạy bằng công tắc dòng lệnh -M5.010(hoặc -E). (Trên thực tế, chỉ cần thay thế sayở cuối bằng printsẽ tránh điều đó, với chi phí thêm hai byte và mất dòng mới sau dòng đầu ra cuối cùng.)

Lưu ý rằng phần lớn của cây được tạo ngẫu nhiên, do đó vị trí của các đồ trang trí sẽ khác nhau giữa các lần chạy. Mặc dù vậy, thiên thần, giá đỡ và hàng trên cùng của cây được cố định.


Để giữ cho câu trả lời phổ biến này không bị xóa hoàn toàn theo một chính sách được đặt ra sau khi được đăng , đây cũng là một giải pháp tuân thủ thông số kỹ thuật mã thông báo (45 byte, cũng là Perl 5):

$_=$"x10 ."*";say,s/ 0/00/,s/\*?$/0/ while/ /

Hãy thử trực tuyến!

Giống như chương trình trên, chương trình này cũng cần được chạy trên Perl 5.10+ với công -M5.010tắc để bật saytính năng này. Rõ ràng (đây là một thách thức ) nó tạo ra đầu ra nhàm chán chính xác như tất cả các mục tuân thủ khác, mà tôi sẽ không nhắc lại ở đây. (Nó cũng có thể thay đổi kích thước một cách tầm thường bằng cách thay đổi số 10thành bất kỳ giá trị nào khác.)


1
Tuyệt quá! Không phải bởi thông số kỹ thuật nhưng tôi nghĩ rằng giải thưởng đặc biệt của ban giám khảo là dành cho bạn! :)
Averroes

6
cái này đá câu tục ngữ của thông số kỹ thuật phía sau, +2 nếu tôi có thể.
Kris

3
Xin lỗi, nhưng theo các quy tắc, câu trả lời không đáp ứng thông số kỹ thuật phải bị xóa.
mbomb007


1
Bạn có thể vui lòng di chuyển câu trả lời hợp lệ lên đầu và thêm một tiêu đề?
Dennis

13

GolfScript (33 ký tự)

Phiên bản chiều cao cố định:

;8:^' '*.'*'+\'0'+^{.(;'00'+}*]n*

Hoặc cho chính xác cùng chiều dài

;8:^' '*.'*'+n@'0'+^{.n\(;'00'+}*

Cây trông khá giống với những người khác:

        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

Phiên bản lấy chiều cao từ stdin:

~((:^' '*.'*'+\'0'+^{.(;'00'+}*]n*

Bắt đầu của dòng trước là một trong những mặt cười tốt hơn tôi đã thực hiện trong chương trình GolfScript "hữu ích".


10

Kịch bản Shell, 44 ký tự

printf %9c\\n \* 0|sed ':x
p;s/ 0/000/;tx
d'

In cây này:

        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

9

Maple, 30/37 ký tự

Lấy cảm hứng từ mục Mathicala của Mr.Wizard , tôi trình bày lệnh 30-char Maple 12 này:

<`*`,('cat(0$2*i+1)'$i=0..8)>;

Đầu ra:

                              [        *        ]
                              [                 ]
                              [        0        ]
                              [                 ]
                              [       000       ]
                              [                 ]
                              [      00000      ]
                              [                 ]
                              [     0000000     ]
                              [                 ]
                              [    000000000    ]
                              [                 ]
                              [   00000000000   ]
                              [                 ]
                              [  0000000000000  ]
                              [                 ]
                              [ 000000000000000 ]
                              [                 ]
                              [00000000000000000]

Tôi cũng có thể thoát khỏi dấu ngoặc với chi phí thêm bảy ký tự:

`*`;for i in$0..8 do;cat(0$2*i+1);od;

Đầu ra bị bỏ qua - nó trông giống như ở trên, chỉ không có dấu ngoặc. Thật không may, tôi không biết cách nào để giữ Maple không chèn các dòng trống giữa các hàng đầu ra ở chế độ văn bản. Nó trông tốt hơn trong chế độ bảng tính cổ điển. Tôi đoán tôi có thể bao gồm một ảnh chụp màn hình ...

ảnh chụp màn hình

(Ảnh chụp màn hình cho thấy phiên bản lệnh 44 ký tự trước đó, nhưng tôi quá lười để thử lại. Đầu ra vẫn như vậy.)

Ồ, và vâng, kích thước hoàn toàn có thể điều chỉnh: chỉ cần thay 8 bằng n -2 cho một cây n -row. Tuy nhiên, với giải pháp đầu tiên, vượt quá 25 hàng (hoặc 10 trong GUI) cũng yêu cầu cài đặt giao diện (rtablesize = n ).

(Ps. Tôi nghĩ tôi đã xoay sở để đánh bại GolfScript bằng phiên bản mới nhất, nhưng than ôi ... )


8

Perl, 42 ký tự

say$"x9,"*";say$"x(9-$_),"00"x$_,0for 0..8

Đầu ra:

         *
         0
        000
       00000
      0000000
     000000000
    00000000000
   0000000000000
  000000000000000
 00000000000000000

Chiều cao của cây có thể được thay đổi giữa 1 và 11 hàng bằng cách thay thế 8ở cuối bằng các giá trị từ -1đến 9. Đi trên 11 hàng cũng yêu cầu tăng hai 9giây trước đó trong mã, điều khiển khoảng cách từ phía bên trái của màn hình mà cây được thụt vào.


Cái này có 11 hàng: Tôi đoán những thay đổi nhỏ
Averroes

@Averroes: Vâng, lần đầu tiên tôi cho rằng nó được cho là 10 hàng cộng với ngôi sao, nhưng sau đó tôi thực sự đã đếm các hàng trong đầu ra mẫu và sửa nó.
Ilmari Karonen

8

Groovy, 65

(p={c,r->println' '*(9-r)+(c*(r*2-1))})'*',1;(1..9).each{p'0',it}

Đáng ngạc nhiên, cây trông như thế này:

        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

Phần 'đăng sản lượng cây' là để mang một chút tinh thần Giáng sinh đến trang web này: P
Averroes

Ngoài ra, bạn có 11 hàng quá!
Averroes

Tôi có thể khắc phục điều đó bằng cách điều chỉnh (các) tham số chiều cao!
Armand

8

Ruby, 46 ký tự

puts" "*8+?*;9.times{|i|puts"%8s0"%(v=?0*i)+v}

Để thay đổi chiều cao, bạn sẽ phải thay đổi cả 8 giây và tất nhiên cả 9. Đầu ra của chương trình như sau:

        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

Chỉnh sửa : Vô tình tôi đã bỏ qua đầu ra trong lần gửi đầu tiên.


1
Bạn quên đăng đầu ra. :)
Ilmari Karonen

7

PowerShell, 41

" "*8+"*";0..8|%{" "*(8-$_)+"0"+"0"*$_*2}

Không có gì đáng ngạc nhiên, xuất ra cùng một cây như mọi người khác :-p

Nếu bạn tham số 8, nó sẽ mang lại kích thước của bảng điều khiển của bạn, ví dụ như 48 ký tự :

" "*($w=8)+"*";0..$w|%{" "*($w-$_)+"0"+"0"*$_*2}

Hoặc, như một tập lệnh đầy đủ có một đối số, 53 ký tự :

param($w)" "*$w+"*";0..$w|%{" "*($w-$_)+"0"+"0"*$_*2}

Được gọi, nó trông giống như:

PS>: Get-Tree.ps1 8
        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

7

Con trăn 3: 62 ký tự

print(' '*9+'*',*('\n'+' '*(9-i)+'0'*(i*2+1)for i in range(9)))

Đầu ra:

        * 
        0 
       000 
      00000 
     0000000 
    000000000 
   00000000000 
  0000000000000 
 000000000000000
00000000000000000

Lưu ý rằng điều này về cơ bản đánh bại câu trả lời của @ Ante bằng 11 ký tự, bởi vì câu trả lời đó, khi được chuyển đổi thành Python 3, sử dụng 73 ký tự.

Thay đổi từng 9giá trị khác cho một chiều cao khác nhau.


3
Tôi nghĩ bạn cũng có thể mất không gian trước đây for.
badp

@badp Cảm ơn đã thay đổi từ 63 thành 62!
Kazark

6

Con trăn, 59

print' '*9+'*'
for i in range(9):print' '*(9-i)+'0'*(i*2+1)

Làm việc tốt, điều này chứng tỏ rằng mặc dù câu trả lời của @Ante dài hơn trong Python 3, nhưng câu trả lời Python 3 của tôi ngắn hơn trong Python 2 ( printkhông phải là một hàm).
Kazark

6

Lời mở đầu: 183 hoặc 186

r(0,_,L,L).
r(N,C,L,[C|T]):-N>0,M is N-1,r(M,C,L,T).
y(S,T,C):-r(T,C,[10],X),r(S,32,X,Y),atom_codes(A,Y),write(A).
x(A,B):-A>0,y(A,B,48),C is A-1,D is B+2,x(C,D).
x(N):-y(N,1,42),x(N,1).

Bản in:

         *
         0
        000
       00000
      0000000
     000000000
    00000000000
   0000000000000
  000000000000000
 00000000000000000
false.

Có thể được nén thêm cho một số trình thông dịch nhất định (ví dụ: sử dụng tab / 1 trên SWI)

Gọi với x (N). Trong đó N là số lượng hàng trong cây thực tế (không bao gồm ngôi sao). Cho nó một chiều cao cố định sẽ đưa nó xuống tới 183


6

C

Đây là phiên bản C của Wade Tandy nhưng đã sửa đổi một chút:

           ;
          int
         main(
        ){int i
       =-1,j=0,c
      =10;while(j
     ++<c){printf(
    " ");}{;printf(
   "*");}while(++i<c
  ){for(j=-2;++j<c-i;
 )printf(" ");for(j=0;
++j<2*i;){printf("0");}
          ;;;
        printf(
         "\n")
          ;}}

5

Toán học, 50

MatrixForm@Prepend[Row/@Table[0,{n,9},{2n-1}],"*"]

5

Applesoft BASIC, 143 ký tự

Vì câu hỏi này làm tôi nhớ đến bài tập về nhà, tôi đã quay lại thời trung học (khi họ đang dạy trên Apple // e):

1INPUTH:X=(H*2)-2:C=(X/2):S$="*":O=0:GOSUB2:S$="0":FORO=0TOX-2STEP2:GOSUB2:NEXT:END
2FORS=0TOC-(O/2):?" ";:NEXT:FORI=0TOO:?S$;:NEXT:?"":RETURN

Tôi đã sử dụng JavaScript Applesoft BASIC được tìm thấy ở đây: http://www.calormen.com/applesoft/

ĐẦU RA:

?10
          *
          0
         000
        00000
       0000000
      000000000
     00000000000
    0000000000000
   000000000000000
  00000000000000000

5

Prolog: 127 ký tự

p:-write('        *'),h(1).
h(L):-(L<10,nl,w(L,-8),h(L+1));!.
w(L,N):-(N<9,N<L,(L>abs(N)->write('0');write(' ')),w(L,N+1));!.

Đầu ra:

        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000
true 

Được sử dụng Prologbởi vì tôi không thể đánh bại Groovykỷ lục mà không nhìn vào mã của anh ấy :(.


5

PostScript (với chiều cao được tham số hóa), 114 ký tự

/h 9 def/b{{( )=print}repeat}def
h -1 0{dup h eq{dup b(*)=}if dup b h sub neg 2 mul 1 add{(0)=print}repeat()=}for

Đầu ra:

         *
         0
        000
       00000
      0000000
     000000000
    00000000000
   0000000000000
  000000000000000
 00000000000000000
0000000000000000000

Cái gì, bạn muốn nó in ra?


4

JavaScript (Rhino: 108, Nút: 114, Bảng điều khiển dành cho Webkit Dev: 119, Plugin jQuery: 132)


Rhino là ngắn nhất (ở 108 ký tự) vì (a) printchức năng của nó có tên ngắn và (b) nó sẽ cho phép bạn gán các hàm dựng sẵn thành một tên biến ngắn hơn. Vì thế:

h=10,p=print,m='0',a=Array(h-1),s=a.join(' ');p(s+'*\n'+s+m);while(h-->2){m+='00';a.pop();p(a.join(' ')+m);}


Node.js xuất hiện trong một giây gần (ở 114 ký tự) vì chức năng in của nó console.logcó tên dài hơn, nhưng nó cũng sẽ cho phép chúng ta gán nó cho một biến ngắn:

h=10,p=console.log,m='0',a=Array(h-1),s=a.join(' ');p(s+'*\n'+s+m);while(h-->2){m+='00';a.pop();p(a.join(' ')+m);}


Tuy nhiên, Bảng điều khiển dành cho Webkit Dev (và có lẽ cả Fireorms cũng vậy) cho rằng p=console.loghơi quá lén lút (khi bạn cố gắng gọi p(), nó sẽ phàn nàn với bạn). Vì vậy, chúng tôi phải kéo dài mọi thứ lên tới 119 ký tự:

h=10,m='0',a=Array(h-1),s=a.join(' ');with(console){log(s+'*\n'+s+m);while(h-->2){m+='00';a.pop();log(a.join(' ')+m);}}

(Thật thú vị, withchỉ tiết kiệm cho chúng tôi một nhân vật).


Cuối cùng ... một plugin jQuery (vẫn có thể tweet với 132 ký tự!):

$.fn.xms=function(h){var m='0',w=2,l=['*',m];while(w++<h)l.push(m+='00');$(this).css({textAlign:'center'}).html(l.join('\n<br/>'));}

Và bạn có thể gọi nó ở chân trang của chính trang này: $('#footer').xms(3)

Tất nhiên, nó không phải là một plugin ... vì có lẽ chúng ta phải sử dụng bảng điều khiển JavaScript để thêm nó vào một trang và gọi nó, chúng ta có thể vừa thực hiện một đoạn jQuery :

h=10,m='0',w=2,l=['*',m];while(w++<h)l.push(m+='00');$('#footer').css({textAlign:'center'}).html(l.join('\n<br/>'));

có trọng lượng cạnh tranh hơn 116 ký tự - trên thực tế, nó vượt trội so với việc thực hiện bảng điều khiển dev khác. Nhưng, một lần nữa, sử dụng jQuery và / hoặc công cụ bố cục của trình duyệt có thể bị coi là gian lận. :)


4

C, 67

Tôi biết điều này đã qua lâu rồi, nhưng đây là lần đầu tiên tôi thử chơi golf và tôi nghĩ rằng tôi đã có một giải pháp C khá hay.

Thật thú vị, tôi đã nghĩ ra giải pháp này một cách độc lập với giải pháp rất giống của @ Patrick.

Và vâng, tôi sẽ không giành được bất kỳ mối quan hệ nào với các giá trị được mã hóa cứng của mình;) Dù sao thì tôi cũng rất hài lòng.

i;main(){for(;i<10;++i)printf("%*s%0*c\n",i?9-i:8,"",i*2,i?32:42);}
        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000
Bấm phím bất kỳ để tiếp tục . . .

4

Oracle

select lpad('*', 11) from dual
union all
select rpad(' ', 10 - level) || rpad(' ', level * 2, '0') from dual
connect by level <= 9;


          *
          0
         000
        00000
       0000000
      000000000
     00000000000
    0000000000000
   000000000000000
  00000000000000000

10 rows selected.


4

LOLCODE, 527 byte

CAN HAS STDIO?
HAI 1.2
IM IN YR LOOP UPPIN YR VAR TIL BOTH SAEM VAR AN 8
    VISIBLE " "!
IM OUTTA YR LOOP
VISIBLE "*"
I HAS A SPACES
SPACES R 8
I HAS A ZEROS
ZEROS R 1
IM IN YR LOOP UPPIN YR VAR TIL BOTH SAEM VAR AN 9
    IM IN YR LOOP UPPIN YR VAR2 TIL BOTH SAEM VAR2 AN SPACES
        VISIBLE " "!
    IM OUTTA YR LOOP
    IM IN YR LOOP UPPIN YR VAR2 TIL BOTH SAEM VAR2 AN ZEROS 
        VISIBLE "0"!
    IM OUTTA YR LOOP
    VISIBLE ""
    SPACES R DIFF OF SPACES AN 1
    ZEROS R SUM OF ZEROS AN 2
IM OUTTA YR LOOP
KTHXBYE

Hãy thử trực tuyến!

Đầu ra:

        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

1
Đây là mã golf , vì vậy vui lòng thêm số byte của bài gửi của bạn vào tiêu đề.
lirtosiast

4

Con trăn, 70 ký tự

Không quá ngắn, nhưng giải pháp đệ quy :-)

def a(s):
 print s
 if s<"0":a(s[1:]+"00")
print" "*8+"*"
a(" "*8+"0")

Thay đổi 8 giây để đặt chiều cao.


4

Javascript, 119 ký tự

Đầu ra cho bảng điều khiển firebird

i=h=9;a=new Array(h);a[0]=a.join(' ');b=a.join('000');a[0]+='*';while(i)a[i--]=b.substr(i,h+i);console.log(a.join('\n'))


        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

2
Đây là 120 ký tự thực sự.
Rob Fox

3

PHP 113

Hình tôi muốn kết nối với phiên bản php:

113 ký tự (điều chỉnh $hđể thay đổi chiều cao, số dòng bao gồm ngôi sao):

$h=10;for($n=0;$n<$h;$n++){$i=$n>0?$n:1;$c=$n<1?"*":"0";echo str_repeat(" ",$h-$i).str_repeat($c,($i*2)-1)."\n";}

Tôi đã cố gắng làm cho nó ngắn gọn, không thể đọc được và chúng tôi đã biết php không thể cạnh tranh về sự đồng nhất vì vậy điều này sẽ không giành được bất cứ điều gì, vẫn là một câu đố nhỏ vui vẻ.

đầu ra là như spec:

        *
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

Mã hóa thêm một chút nữa, 103 ký tự, (bạn không thể thấy khoảng trắng trong tiếng vang đầu tiên bên trong nhận xét này) $ n = 0; echo "* \ n"; for ($ i = 9; $ i> 0; $ i -, in str numpeat ('', $ i) .str numpeat ('0', $ n + 9- $ i). "\ n", $ n ++);
Lucia

dòng đầu tiên được mã hóa cứng của bạn sẽ mất cân bằng nếu bạn thay đổi chiều cao của cây tho :-(
Kris

3

C, 77

i;main(c){printf("%*c\n",c,42);while(i<c)printf("%*s%0*d\n",c-i,"",i++*2+1,0);}

Trước khi đọc thông số kỹ thuật printf cẩn thận hơn, tôi đã có con số nhỏ dễ thương này xuống còn 138 ký tự:

#define x sprintf(b,
#define y printf(b,
i;main(c){char b[9]="%%%dc\n",*t="%%%ds%%0%dd\n";x b,c);y 42);while(i<c)x t,c-i,i++*2+1),y "",0);}

3

Java, 192 (198 với thông số)

class V{public static void main(String[]a){int c=10,i=-1,j=0;String s="";while(j++<c)s+=" ";s+="*";while(++i<c){for(j=-2;++j<c-i;)s+=" ";for(j=0;++j<2*i;)s+="0";System.out.println(s);s="";}}}

In cây được yêu cầu:

        *           
        0
       000
      00000
     0000000
    000000000
   00000000000
  0000000000000
 000000000000000
00000000000000000

Đối với chiều cao thay đổi, hơi dài hơn:

class W{public static void main(String[]a){int c=a.length,i=-1,j=0;String s="";while(j++<c)s+=" ";s+="*";while(++i<c){for(j=-2;++j<c-i;)s+=" ";for(j=0;++j<2*i;)s+="0";System.out.println(s);s="";}}}

Độ dài của danh sách đối số dòng lệnh xác định chiều cao (ví dụ: java W a a a a asẽ cho chiều cao 5).

(Về cơ bản, đây là phiên bản Java của giải pháp C của Wade Tandy.)


Tôi biết điều này đã được đăng cách đây một thời gian rồi :), nhưng đây là hai điều tôi thấy: 1. bạn có thể sử dụng một giao diện thay vì một lớp trong java 8 2. để lưu hai ký tự, while (++i < c) {-> for (s += "*";++i < c;s = "") {và xóa s += "*";s = "";
Reinis Mê cung

3

Vim, 18 byte

17i0<esc>qqYPxr q8@qa*

Hãy thử trực tuyến trong trình thông dịch V tương thích ngược!

Mặc dù đây là một cách tiếp cận rất giống với câu trả lời V của tôi, nhưng cách này không phảikhông cạnh tranh vì vim đã cũ. :)

Giải trình:

17i0<esc>               " Insert 17 '0's
         qq     q       " Start recording into register 'q'
           YP           " Duplicate this line upwards
             x          " Delete one character
              r         " Replace this character with a space
                 8@q    " Playback macro 'q' 8 times
                    a*  " Append an asterisk

3

Scala, 74 byte

val h=10;println(" "*h+"*");for(i<-0 to h-2)println(" "*(h-i)+"0"*(i*2+1))

h - chiều cao của cây

Đầu ra

        *          
        0          
       000         
      00000        
     0000000       
    000000000      
   00000000000     
  0000000000000    
 000000000000000   
00000000000000000  

2

C, 80

i=9,k=10,j;main(F){while(i)putchar(++j<i?32:j<k?48-F*6:(i-=!F,k+=!F,F=j=0,10));}

Khởi tạo k đến chiều cao cây, i đến k-1. F là cờ dòng đầu tiên. Không có đối số, sau đó F sẽ là 1 khi nhập cảnh.

Phiên bản dài hơn (81) một chút trong đó f không phải là cờ dòng đầu tiên:

i=9,k=10,j,f;main(){while(i)putchar(++j<i?32:j<k?42+f*6:(i-=f,k+=f,f=1,j=0,10));}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.