Keluarkan Yggdrasil yang legendaris

39

Tugas Anda adalah menampilkan representasi pohon kehidupan yang legendaris, Yggdrasil .

Anda harus menulis sebuah program yang hasilnya persis seperti itu:

                                       /\
                                      /**\
                                     /****\
                                    /******\
                                    /******\
                                   /********\
                                  /**********\
                                 /************\
                                /**************\
                                 /************\
                                /**************\
                               /****************\
                              /******************\
                             /********************\
                            /**********************\
                              /******************\
                             /********************\
                            /**********************\
                           /************************\
                          /**************************\
                         /****************************\
                        /******************************\
                           /************************\
                          /**************************\
                         /****************************\
                        /******************************\
                       /********************************\
                      /**********************************\
                     /************************************\
                    /**************************************\
                        /******************************\
                       /********************************\
                      /**********************************\
                     /************************************\
                    /**************************************\
                   /****************************************\
                  /******************************************\
                 /********************************************\
                /**********************************************\
                     /************************************\
                    /**************************************\
                   /****************************************\
                  /******************************************\
                 /********************************************\
                /**********************************************\
               /************************************************\
              /**************************************************\
             /****************************************************\
            /******************************************************\
                  /******************************************\
                 /********************************************\
                /**********************************************\
               /************************************************\
              /**************************************************\
             /****************************************************\
            /******************************************************\
           /********************************************************\
          /**********************************************************\
         /************************************************************\
        /**************************************************************\
               /************************************************\
              /**************************************************\
             /****************************************************\
            /******************************************************\
           /********************************************************\
          /**********************************************************\
         /************************************************************\
        /**************************************************************\
       /****************************************************************\
      /******************************************************************\
     /********************************************************************\
    /**********************************************************************\
            /******************************************************\
           /********************************************************\
          /**********************************************************\
         /************************************************************\
        /**************************************************************\
       /****************************************************************\
      /******************************************************************\
     /********************************************************************\
    /**********************************************************************\
   /************************************************************************\
  /**************************************************************************\
 /****************************************************************************\
/******************************************************************************\
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |--------|
                                   |________|

Tidak ada spasi spasi tambahan. Baris baru terakhir dapat dihilangkan.

Untuk mempermudah pemeriksaan, berikut adalah jumlah md5 dari output yang diharapkan:

  • 374899e56bc854d04639c43120642e37 - Tidak ada baris baru di akhir.
  • 03afb81d960b8e130fe2f9e0906f0482 - Baris baru di akhir

Celah standar berlaku. Ini kode-golf, jadi entri terkecil dalam byte menang!

caird coinheringaahing
sumber
10
Terkait: codegolf.stackexchange.com/q/15860/15599 . Tidak, Anda harus bekerja dalam pemasaran. Setiap rumah tangga pasti menginginkan Yggdrasil Natal ini. Saya melihat Anda menjawab pertanyaan nomor Graham juga. Anda harus menyukai hal-hal yang runcing. Mari kita memiliki beberapa nama baru untuk "roket" dan "es krim."
Level River St
Juga terkait: codegolf.stackexchange.com/q/4244/194 .
Peter Taylor
4
@Nax: karena pohon dunia memiliki buah, dan angiospermae tidak, dan itu jelas merupakan gambaran dari beberapa deskripsi, sayangnya sepertinya Anda mengambil gambar pohon yang salah: P
naught101
@Nax Hmm. Anda benar. Pedant (saya) itu mengangkat pada petard sendiri. MD5sums telah berubah.
Scott Leadley
1
Err, poin pesanan, Yggdrasil jelas merupakan pohon abu di eddas, bukan cemara. Agak seperti ini .
Alex P

Jawaban:

22

Golfscript, 84 77 76 75 72 karakter

Pendekatan yang berbeda dari Howard . Klik pada jumlah karakter untuk mencobanya.

10,{.)4*,\3*>{.39\-' '*'/'@2*'*'*'\
'}/}/12,{' '35*'|'@11<'_-'1/=8*1$n}/

Terima kasih kepada Howard karena telah menyimpan 3 karakter!

Penjelasan :

Ini kurang lebih adalah port langsung dari solusi Python saya . Mengambil beberapa kebebasan ekspresif (menggunakan variabel bernama alih-alih melacak posisi tumpukan, dan printbenar-benar menyimpan hal-hal di tumpukan, bukan mencetak):

10,{...}/            # for i in range(10):
   .                 #    x = i
   )4*,              #    Y = range((i+1)*4)
   \3*               #    x *= 3
   >                 #    Y = Y[x:]  # y is now range(3*i, (i+1)*4)
   {...}/            #    for j in Y:
      .39\-          #        q = 39 - j
      ' '*           #        print ' '*q  # print right number of spaces
      '/'            #        print '/'
      @2*            #        j *= 2
      '*'*           #        print '*'*j
      '\<NEWLINE>'   #        print "\\\n"
12,{...}/            # for i in range(12):
    ' '35*           #    print ' '*35
    '|'              #    print '|'
    @11<             #    i = i < 11
    '_-'1/=          #    z = "_-"[i] # pick "-" if i < 11, else pick "_"
    8*               #    print z*8
    1$               #    print '|' # (copy from earlier in the stack)
    n                #    print "\n"
Claudiu
sumber
1
Anda dapat menggunakan trik break-line yang sama seperti pada solusi saya. Alih-alih '\\'nmenarik baris baru ke string (+/- 0 karakter) dan sekarang garis miring terbalik tidak perlu lagi melarikan diri (-1 karakter).
Howard
1
Dua lagi: 4*4+sama dengan )4*dan '_-'[=]dapat ditulis '_-'1/=yang membuat yang terakhir +menjadi usang.
Howard
3
sebuah penjelasan bisa bermanfaat ...? Apakah ini terlalu banyak untuk ditanyakan?
@professorfish: Segera hadir!
Claudiu
Apakah kamu tidak membutuhkan trailing ';' sini? Kalau tidak, akan ada dua baris baru setelah golfscript secara default menambahkan satu.
Nabb
21

Haml & Sass

37 + 277 = 314

Haml:

%link(rel="stylesheet" href="s")
%pre

Kelancangan:

pre:after{$l:"";@for$k from0 to10{@for$i from0 to4+$k{@for$j from0 to40-($k*6+$i*2)/2{$l:$l+' ';}$l:$l+'/';@for$j from0 to$k*6+$i*2{$l:$l+'*';}$l:$l+"\\\a ";}}@for$i from0 to12{@for$j from0 to35{$l:$l+" ";}@if$i<11{$l:$l+"|--------|\a ";}@else{$l:$l+"|________|";}}content:$l;}

* Sass memungkinkan arahan kontrol, gabungan, dan dereferensi variabel. Kesemuanya berguna saat menata rambut, tetapi bertele-tele saat bermain golf.


akan dihasilkan menjadi:

HTML:

<link rel="stylesheet" href="s" /><pre></pre>

CSS:

pre:after {
  content: "                                        /\\\a                                        /**\\\a                                       /****\\\a                                      /******\\\a                                      /******\\\a                                     /********\\\a                                    /**********\\\a                                   /************\\\a                                  /**************\\\a                                   /************\\\a                                  /**************\\\a                                 /****************\\\a                                /******************\\\a                               /********************\\\a                              /**********************\\\a                                /******************\\\a                               /********************\\\a                              /**********************\\\a                             /************************\\\a               
             /**************************\\\a                           /****************************\\\a                          /******************************\\\a                             /************************\\\a                            /**************************\\\a                           /****************************\\\a                          /******************************\\\a                         /********************************\\\a                        /**********************************\\\a                       /************************************\\\a                      /**************************************\\\a                          /******************************\\\a                         /********************************\\\a                        /**********************************\\\a                       /************************************\\\a                      /**************************************\\\a                     /******************************
**********\\\a                    /******************************************\\\a                   /********************************************\\\a                  /**********************************************\\\a                       /************************************\\\a                      /**************************************\\\a                     /****************************************\\\a                    /******************************************\\\a                   /********************************************\\\a                  /**********************************************\\\a                 /************************************************\\\a                /**************************************************\\\a               /****************************************************\\\a              /******************************************************\\\a                    /******************************************\\\a                   /**********************************
**********\\\a                  /**********************************************\\\a                 /************************************************\\\a                /**************************************************\\\a               /****************************************************\\\a              /******************************************************\\\a             /********************************************************\\\a            /**********************************************************\\\a           /************************************************************\\\a          /**************************************************************\\\a                 /************************************************\\\a                /**************************************************\\\a               /****************************************************\\\a              /******************************************************\\\a             /*****************************************************
***\\\a            /**********************************************************\\\a           /************************************************************\\\a          /**************************************************************\\\a         /****************************************************************\\\a        /******************************************************************\\\a       /********************************************************************\\\a      /**********************************************************************\\\a              /******************************************************\\\a             /********************************************************\\\a            /**********************************************************\\\a           /************************************************************\\\a          /**************************************************************\\\a         /****************************************************************\\\a        /*********
*********************************************************\\\a       /********************************************************************\\\a      /**********************************************************************\\\a     /************************************************************************\\\a    /**************************************************************************\\\a   /****************************************************************************\\\a  /******************************************************************************\\\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    
|--------|\a                                    |--------|\a                                    |________|"; }

halaman yang dihasilkan

Trevor Hickey
sumber
1
Anda tidak melihat banyak solusi HTML / CSS di CodeGolf. Pekerjaan yang baik.
Mordred
16

CJam , 62 byte

A,{I4+,{I3*J+_39\-S*'/@2*'**'\N}fJ}fI{35S*'|'-8*'|N++}C*'-/'_*

Cobalah online!

Bagaimana itu bekerja

A,           " Push [ 0  …  9 ].                                                   ";
{            " For each I in that array:                                           ";
  I4+,       " Push [ 0  …  I + 3 ].                                               ";
  {          " For each J in that array:                                           ";
    I3*J+_   " Push K := 3 * I + J twice.                                          ";
    39\-S*   " Push a string consisting of 39 - K spaces.                          ";
    '/       " Push a slash.                                                       ";
    @2*'**   " Push a string consisting of 2 * K asterisks.                        ";
    '\N      " Push a backslash and a linefeed.                                    ";
  }fJ        "                                                                     ";
}fI          "                                                                     ";
{            " Do the following 12 times:                                          ";
  35S*       " Push a string consisting of 35 spaces.                              ";
  '|         " Push a vertical bar.                                                ";
  '-8*'|++   " Push the string '--------|\n'.                                      ";
}C*          "                                                                     ";
'-/'_*       " Replace the hyphen-minus signs of the last string with underscores. ";
Dennis
sumber
2
Saya harus mulai menggunakan CJam alih-alih GolfScript ...
Claudiu
Apa yang membuat kode CJam begitu kompak? Apakah ini hanya fitur biasa yang cocok bersama dengan baik atau ada beberapa trik super? Atau sebenarnya bukan CJam, tetapi programmer CJam begitu?
Vi.
2
@ Vi .: Ini campuran keduanya. 1. CJam berbasis stack, jadi Anda biasanya pergi tanpa menggunakan variabel apa pun. 2. Panjang semua nama bawaan paling banyak dua karakter. Karena itu, Anda tidak perlu spasi putih kecuali untuk beberapa kasus khusus. 3. Bahkan pengiriman dalam bahasa golf tidak golf sendiri. Program GolfScript / CJam saya jauh lebih pendek sekarang daripada sebelumnya.
Dennis
Saran untuk CJam adalah menggunakan kode ASCII 128-256 untuk seluruh set built-in nother. memiliki beberapa editor khusus yang
Claudiu
@Claudiu: Ya, itu terserah penciptanya. Jika saya mendesain bahasa golf saya sendiri, saya pikir saya akan membuatnya berbasis bit atau menyandikan semua instruksi secara hitung.
Dennis
15

GolfScript, 79 karakter

10,{:^4+,{2*^6*+'*'*.,2/~40+' '*'/'@'\
'}/}/[' '35*]12*'|--------|
'*'||''_'8**

Coba kodenya di sini . Perhatikan bahwa jeda baris tidak opsional dalam kode ini

Howard
sumber
24
Solusi GolfScript multi-line? Saya tidak berpikir saya akan melihat hari itu!
Ingo Bürk
12

Python, 148 129 126 121 karakter

R=range
for i in R(10):
 for j in R(i*3,4+i*4):print' '*(39-j)+'/'+'**'*j+'\\'
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'

Terima kasih kepada Falko karena telah menyimpan 3 karakter dan untuk flornquake karena telah menyelamatkan 5 karakter lainnya dengan cemerlang!

Claudiu
sumber
1
Multiplikasi karakter Python agak terlalu sempurna untuk tantangan ini ...
Sean Latham
Tunggu 'sampai Anda melihat solusi skrip golf saya ... = P
Claudiu
2
Gunakan '**'*juntuk menyimpan 3 karakter. Terlepas dari ini, solusi saya konvergen ke kode yang sama persis. :)
Falko
1
Anda dapat membuat baris terakhir lebih pendek dengan menulis for c in'-'*11+'_':print' '*35+'|'+c*8+'|'.
flornquake
@flake: bagus! sangat pintar
Claudiu
11

Pesta, 236 197 193

10 byte kode + nama file 1-byte + file data 182-byte = total 193 byte

zcat y 2>j

Penjelasan

yadalah file yang berisi Yggdrasil, tanpa baris baru yang tertinggal, dikompresi dengan algoritma zopfli (dipanggil sebagai zopfli --i64) dan kemudian dengan 8 byte terakhir dihapus. zopfli kompatibel dengan gzip, jadi saya bisa mendekompres file dengan utilitas Bash standar yang dirancang untuk gzip. Ukuran file data adalah 182 byte (229 byte saat gzip normal digunakan). Ukuran Yggdrasil asli, tanpa garis baru yang tertinggal, adalah 5876 byte.

Penghapusan 8 byte terakhir menyebabkan pesan kesalahan, yang ditekan dengan mengirimkan kesalahan standar ke file yang disebut j. Jika jada, itu akan ditimpa.

Base64 of yis (digunakan base64 -duntuk mendapatkan file asli):

H4sIAAAAAAACA+3SMQoCURDA0N5TWC+IFxK8yD/8Nul9hfDRnamT6J+du83zdUPwOACNNDb0+3Bs
tMPhSscDvusHgM9wIcUNclL+5r/luJXkmlh5rM3r8txkMdVNcEn1Nc2a1AU72XWz3Xd91r5z7eZD
AQKQgAI0PDFf8xJfExpQgQhkpAIdz8ytzK3AQMg6UMIQpLQELU/NQc5B/thBegtqHpOc16jHOX/v
x1mPZg19MfrdrBM=

Dan md5sum adalah:

4a049a80241160cdde0a3cbca323b7f2

sumber
2
Jari saya gatal ingin menekan tombol "hapus" ketika saya melihat kode, sampai saya membaca jumlah karakter dan penjelasan. : P
Doorknob
2
Anda dapat menyimpan sekitar 30 byte dengan menggunakan zopfli untuk membuat file terkompresi. "zopfli --i100 y" menghasilkan file 190-byte yang dapat didekompresi oleh zcat.
Glenn Randers-Pehrson
1
Dan beberapa lagi jika Anda menghapus 10 byte terakhir dan menutup STDERR.
Dennis
@ GlennRanders-Pehrson terima kasih untuk menunjukkan ini, saya juga telah mengedit jawaban saya untuk 'Massa senyawa Molar' codegolf.stackexchange.com/a/35613/16402 untuk menggunakan zopfli, menghemat 37 byte
@ Dennis ternyata menjadi 8 byte (lebih dan bit dari batang Yggdrasil akan hilang), terima kasih
7

C, 169

i;j;p(a,b){while(b--)putchar(a);}main(){for(;i++<10;)for(j=i*3-4;++j<i*4;p(32,39-j),p(47,1),p(42,j*2),puts("\\"));for(++i;i--;p(32,35),p(124,1),p(i?45:95,8),puts("|"));}

Tidak disatukan (dan sedikit terurai):

int i;
int j;
void p(a,b) {
  while (b--) putchar(a);
}
void main() {
  for (;i++<10;) {
    for (j=i*3-4;++j<i*4;) {
      p(32,39-j);
      p(47,1);
      p(42,j*2);
      puts("\\");
    }
  }
  for (++i;i--;) {
    p(32,35);
    p(124,1);
    p(i?45:95,8);
    puts("|");
  }
}
lubang keras melengking
sumber
7

Ruby - 100

puts (0..21).map{|i|i>9??\ *35+?|+(i>20??_:?-)*8+?|:(0..i+3).map{|y|?\ *(39-z=y+3*i)+?/+?**z*2+?\\}}

Letakkan flattens otomatis, sehingga kami dapat mengumpulkan semua baris bahkan dalam array bersarang. Membutuhkan Ruby 1.9

Coba ideone

Vektor
sumber
Saya pikir perlu beberapa ruang terkemuka. Juga, bekerja dengan Ruby 1.9, tetapi tidak di 1.8.
Scott Leadley
7

PowerShell 104 101

0..9|%{(3*$_)..(3+$_*4)|%{" "*(39-$_)+"/"+"*"*2*$_+"\"}};0..11|%{" "*35+"|"+("-","_")[$_-eq11]*8+"|"}
DarkAjax
sumber
6

C # 258 234bytes

Berkat beberapa pengguna yang menjengkelkan untuk pengeditan yang disarankan memanfaatkan metode String.PadLeft!

using System;class G{static void Main(){Action<string>p=Console.WriteLine;int i=0,j;for(;i++<10;)for(j=i*3-3;j++<i*4;)p("/".PadLeft(41-j)+"\\".PadLeft(2*j-1,'*'));while(i-->0)p("|--------|".PadLeft(45));p("|________|".PadLeft(45));}}

Kode ini cukup sederhana, tidak banyak yang tersisa untuk golf.

Kode yang diformat:

using System;
class G
{
    static void Main()
    {
        Action<string> p = Console.WriteLine;
        int i = 0, j;
        for(; i++ < 10 ;)
            for(j = i*3 - 3; j++ < i*4;)
                p("/".PadLeft(41 - j) + "\\".PadLeft(2*j - 1,'*'));
        while(i-- > 0)
            p("|--------|".PadLeft(45));
        p("|________|".PadLeft(45));
    }
}
VisualMelon
sumber
Penggunaan \rtidak ada gunanya di sini. Ini kode golf.
nyuszika7h
3
@ nyuszika7h memang, tapi itu termasuk dalam salinan yang diformat untuk ukuran yang baik sehingga orang yang menggunakan notepad dapat lebih mudah melihat kemuliaan Yggdrasil (tidak termasuk dalam skor)
VisualMelon
Oh begitu. Windows ... Jangan ragu untuk memperbaiki hasil edit saya.
nyuszika7h
@ nyuszika7h terima kasih telah menunjukkan Sintaks Highlighting tidak benar
VisualMelon
6

J, 98 88 84 75

(85 11 1#3 4$' /*\ |-| |_|')#"1~(39&-,1,+:,1:)"0(12$4),~85(-4&+#-:*>:)&i.10
FireFly
sumber
4

Perl, 127

for$i(0..9){for$j($i*3..3+$i*4){print" "x(39-$j),"/","*"x($j*2),"\\\n";}}for$i(0..11){print" "x35,"|",($i>10?"_":"-")x8,"|\n";}

Tidak Disatukan:

for $i (0..9) {
  for $j ($i*3..3+$i*4) {
    print " "x(39-$j) , "/" , "*"x($j*2) , "\\\n";
  }
}
for $i (0..11) {
  print " "x35 , "|" , ($i>10?"_":"-")x8 , "|\n";
}
lubang keras melengking
sumber
Ganti $ i dengan $ _ dan simpan 4 karakter.
choroba
4

Ruby - 139 129 126 123 121

Hoisted "menempatkan" di luar pembuatan array (saran dari bitpwner).

puts (0..9).map{|i|(i*3...(i+1)*4).map{|j|"/#{'**'*j}\\".rjust(41+j,' ')}}+["%45s"%'|--------|']*11<<'%45s'%'|________|'


Tidak diseret ("menempatkan" tanpa cedera):


# print fill patterns from the intervals
# [0..3, 3..7, 6..11, 9..15, 12..19, 15..23, 18..27, 21..31, 24..35, 27..39]
# centered on columns 81-82
(0..9).each { |i|
  (i*3...(i+1)*4).each { |j|    # x...y vs x..y-1 saves a char
    puts "/#{'**'*j}\\".rjust(41+j,' ')
  }
}
# print the stump
puts ("%45s\n" % '|--------|') * 11
puts '%45s' % '|________|'
Scott Leadley
sumber
@bitpwner Saya pikir ini pantas jawabannya sendiri. Lakukan untuk itu.
Scott Leadley
4

PHP 223 202 181 160 156

Sunting Saya menemukan cara alias fungsi dengan variabel dan mampu memangkas beberapa karakter lagi. Itu str_repeatfungsi benar-benar verbose

Sunting 2: Terima kasih semuanya atas sarannya!

Golf:

<?$s=str_repeat;for($i=-1;$i++<9;)for($j=$i*3;$j<4+$i*4;)echo$s(' ',39-$j).'/'.$s('**',$j++)."\\
";for($i=12;$i--;)echo$s(' ',35),'|'.$s($i?'-':'_',8)."|
";

Dapat dibaca:

    <?

$s=str_repeat;

for($i=-1;$i++<9;)
{
    for($j=$i*3;$j<4+$i*4;)
    {
        echo$s(' ',39-$j).'/'.$s('**',$j++)."\\
        ";
    }
}

for($i=12;$i--;)
{
    echo$s(' ',35),'|'.$s($i?'-':'_',8)."|
    ";
}

Output: http://brobin.me/yggdrasil.php

Brobin
sumber
Anda dapat menyimpan 6 karakter dengan menghapus tanda kurung di sekitar (39-$j), ($j*2)dan ($i==11). -2 dengan mengganti \ndengan karakter garis nyata baru (PHP memungkinkannya dalam litterals). -5 karakter dengan mengganti (keduanya) for($i=0;$i<12;$i++)dengan for($i=12;$i-->0;)dan $i==11dengan $i==0.
sebcap26
Setelah itu Anda juga bisa menggantinya $s(($i==0?'_':'-'),8)dengan $s($i?'-':'_',8). (==> -5 karakter)
sebcap26
-1 Karakter dengan mengganti $s('*',$j*2)dengan $s('**',$j). Saya pikir itu peningkatan terakhir yang bisa saya temukan.
sebcap26
-2 Mengubah ($j*2)bagian dalam untuk ke ($j++*2)dan menghapus $j++dari for()argumen
avall
@ sebcap26 for($i=12;$i-->0;)dapat disingkat menjadi for($i=12;$i--;)- 2 karakter lainnya.
avall
3

Delphi 429

Akan berusaha meningkatkannya nanti.
Golf

uses strutils,SysUtils,Classes;const a='|----';b='|____';c:array [0..9,0..1]of int32=((0,3),(3,7),(6,11),(9,15),(12,19),(15,23),(18,27),(21,31),(24,35),(27,39));var t:TStrings;i,j:integer;begin t:=tstringlist.Create;for I:=0to 9do for J:=c[i,0]to c[i,1]do t.Add('/'+StringOfChar('*',j));for I:=0to 10do t.Add(a);t.Add(b);for I:=0to t.Count-1do t[i]:=t[i].PadLeft(40)+ReverseString(t[i]).Replace('/','\');write(T.TEXT);readln;end.

ungolfed

uses
  strutils,SysUtils,Classes;
const
  a='|----';
  b='|____';
  c:array [0..9,0..1]of int32=((0,3),(3,7),(6,11),(9,15),(12,19),(15,23),(18,27),(21,31),(24,35),(27,39));
var
  t:TStrings;
  i,j:integer;
begin
  t:=tstringlist.Create;
  for I:=0to 9do
    for J:=c[i,0]to c[i,1]do
      t.Add('/'+StringOfChar('*',j));
  for I:=0to 10do
    t.Add(a);
  t.Add(b);
  for I:=0to t.Count-1do
    t[i]:=t[i].PadLeft(40)+ReverseString(t[i]).Replace('/','\');
  write(T.TEXT);
  readln;
end.
Teun Pronk
sumber
3

Javascript, 288 281

Chrome menyembunyikan duplikasi console.log, gunakan IE sebagai gantinya.

function t(w){s="";for(i=0;i++<39-w;)s+=" ";s+="/";for(i=0;i++<w*2;)s+="*";return s+"\\"}function r(l){s="";for(i=0;i++<36;)s+=" ";s+="|";for(i=0;i++<8;)s+=l;return s+"|"}w=0;c=console;for(h=0;h++<10;){for(j=0;j++<3+h;)c.log(t(w++));w-=h}for(j=0;j++<11;)c.log(r('-'));c.log(r('_'))

Tidak Disatukan:

function t(w)
{
    s="";
    for(i=0;i++<39-w;)
        s+=" ";
    s+="/";
    for(i=0;i++<w*2;)
        s+="*";
    return s+"\\"
}
function r(l)
{
    s="";
    for(i=0;i++<36;)
        s+=" ";
    s+="|";
    for(i=0;i++<8;)
        s+=l;
    return s+"|"
}

w=0;
c=console;
for(h=0;h++<10;)
{
    for(j=0;j++<3+h;)
        c.log(t(w++));
    w-=h;
}
for(j=0;j++<11;)
    c.log(r('-'));
c.log(r('_'))
Sean Latham
sumber
Gunakan for(i=0;i++<39-w;)sebagai ganti for(i=0;i<39-w;++i), dan sebagainya. Juga, p=console.logbukannya c=consoledan pbukannya c.log(walaupun saya hanya menguji yang terakhir di Node.js, itu tidak berfungsi di Firefox). Ini menghemat 12 byte.
nyuszika7h
c=console.logjuga tidak berfungsi di Chrome, jadi saya tidak menggunakannya. Trik for loop menyimpan 7 byte.
Sean Latham
Saya biasanya cukup waspada terhadap apa pun yang mendorong saya untuk menggunakan MSIE ...
Ini sangat mungkin pertama kalinya saya pernah melihat ungkapan "gunakan IE." O_o Namun, Anda dapat menekan perilaku Chrome dengan hanya menjalankan kode ini di konsol alih-alih dari halaman web.
Gagang Pintu
Menjalankannya di halaman dan di konsol menghasilkan hasil yang sama bagi saya di Firefox dan Chrome.
Sean Latham
3

JavaScript (console.log), 168 166

(Ruang kosong hanya untuk dibaca)

for(i=c=0;i<11;i++)
  for(j=0;j<4+i&!c;j++)
    l=i*13+j,
    a=Array(n=i-10?3*i+j+1:5).join("*-_"[k=(l>129)+(c=l==141)]),
    console.log(Array(41-n).join(" ")+'/||'[k]+a+a+'\\||'[k])
FireFly
sumber
3

C (219)

Terima kasih kepada semua orang untuk tips golfnya - berhasil menurunkannya menjadi 219. Jangan berpikir itu akan jauh lebih rendah.

w,W,s,S,i,r;main(){char T[78];memset(T,42,78);for(r=4,s=39;r<14;++r,s-=3,w+=6)for(i=0,S=s,W=w;i<r;++i,W+=2,--S)printf("%*s/%.*s\\\n",S,"",W,T);for(i=0;i<11;i++)printf("%35s|--------|\n","");printf("%35s|________|","");}

Wajib termasuk:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
DreamWarrior
sumber
Jika dia mau menggunakan C89, dia bisa menghilangkan semua termasuk juga. Tidak ada kasus dalam kode ini di mana pernyataan implisit pada panggilan mengacaukan.
Yosua
@Nax; yang membuat saya ke 263 - dan saya menarik termasuk. Terima kasih.
DreamWarrior
@ Yosua - Sistem 64 bit dan memset bisa bermasalah, tapi ... kalau tidak, mungkin tidak. Bagaimanapun, kebanyakan orang menghapus termasuk, jadi saya juga melakukannya.
DreamWarrior
Ini sebenarnya 262 karakter, Anda tidak perlu mengikuti baris baru.
nyuszika7h
Anda dapat menggunakan 32sebagai ganti ' 'dan 42bukannya '*':)
Quentin
3

Haskell, 153 148

Terus terang, tidak ada trik, hanya bermain golf:

(a:b:c)%n=(39-n)&' '++a:(2*n)&b++c
n#m=[n..m]++(n+3)#(m+4)
(&)=replicate
main=putStr$unlines$map("/*\\"%)(take 85$0#3)++map("|-|"%)(11&4)++["|_|"%4]

The %Operator menarik garis tunggal, argumen pertama menjadi Stringpanjang 3 yang berisi perbatasan dan karakter mengisi baris yang (sekarang dengan asumsi tepat 3 Chars, tabungan 5 bytes), yang kedua, sebuah Int, menspesifikasikan setengah jumlah karakter mengisi. Pencocokan pola, penghitungan dan penambahan digunakan dalam kombinasi untuk menghemat byte dengan menjaga "lem" antara Chardan String. Dalam versi kedua ini, saya juga membuat #infinite dan memperkenalkan atake 85 untuk membuatnya terbatas lagi (sayangnya, tidak ada byte yang disimpan).

The #Operator menciptakan urutan untuk nargumen untuk %diperlukan untuk pohon: [0..3], [3..7], ...bersambung.

&hanyalah singkatan untuk infiks replicate, yang muncul tiga kali.

Pohon disatukan di baris terakhir, baris baru ditambahkan oleh unlines.

TheSpanishInquisition
sumber
138 byte
Max Yekhlakov
2

Lua - 164

a=' 'for i=0,9 do for j=i*3,3+i*4 do print(a:rep(39-j)..'/'..(('*'):rep(j*2))..'\\')end end for i=0,11 do print(a:rep(35)..'|'..((i>10 and'_'or'-'):rep(8))..'|')end
Adriweb
sumber
2

Mathematica 191 178

Tentu bukan solusi terbaik:

n=Nest;
t=Table;
""<>
    t[
        {n[#<>" "&,"",39-i],"/",n[#<>"*"&,"",2i],"\\\n"}
    ,
        {i,Flatten@t[Range[j+4]-1+3j,{j,0,9}]}
    ]
<>
    t[
        n[#<>" "&,"",35]<>If[i==12,"|________|\n","|--------|\n"]
    ,
        {i,12}
    ]

Tidak menghitung baris baru. Mathematica memelototi output, karena tidak mengambil lebar yang sama untuk spasi putih untuk "*" dan "/". Tetapi hasilnya benar.

freddieknets
sumber
(ini golf pertama saya)
freddieknets
2

Jawa - 286

Golf pertamaku.

Golf:

class M{public static void main(String[]args){int i=0,a,f=0;String s="";for(;i++<11;){for(a=i*3-4;++a<i*4;){if(i>10){a=4;if(++f>12)break;}s+=s.format("%"+(40-a)+"s"+(a>0?"%0"+a+"d":"")+"%3$s",f>0?"|":"/",0,f>0?"|":"\\").replace("0",f<1?"**":f>11?"__":"--")+"\n";}}System.out.println(s);}}

Tidak Disatukan:

class M {
    public static void main(String[] args) {
        int i=0,a,f=0;
        String s = "";
        for(;i++<11;){
            for(a=i*3-4;++a<i*4;a++){
                if(i>10){
                    a=4;
                    if(++f>12)break;
                }
                s+=s.format("%"+(40-a)+"s"+(a>0?"%0"+a+"d":"")+"%3$s",f>0?"|":"/", 0,f>0?"|":"\\").replace("0", f<1?"**":f>11?"__":"--")+"\n";
            }
        }
        System.out.println(s);
    }
}

Tes di sini

LudziE12
sumber
2

Python 2, 117

j=0
while j<40:j-=j/4;exec(j/3+4)*r"print' '*(39-j)+'/'+'**'*j+'\\';j+=1;"
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'

Versi lain yang saya coba meliputi:

# 118
for i in range(10):j=i*3;exec(i+4)*r"print' '*(39-j)+'/'+'**'*j+'\\';j+=1;"
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'

# 118
i=j=4
while j:j=52-3*i;exec"j-=1;print' '*j+'/'+'**'*(39-j)+'\\\\';"*i;i+=1
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'

# 118
j=0
for b in'\\'*10:j-=j/4;exec(j/3+4)*"print' '*(39-j)+'/'+'**'*j+b;j+=1;"
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'

# 119
s=40
while s:s+=10-s/4;exec(52-s)/3*r"s-=1;print' '*s+'/'+'**'*(39-s)+'\\';"
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
gempa bumi
sumber
2

Pyth, 101 100 99 90 81 byte

J0Km/*+d7d2S9V85FTKI!-TN=hZ=+JZ))+*d-39-NJ++\/*"**"-NJ\\)Va*]\-11\_+++*d35\|*N8\|

Cobalah online!

Terjemahan Python 3:
Z=0
d=" "
J=0
K=list(map(lambda d:((d+7)*d)//2,range(1,10)))
for N in range(85):
    for T in K:
        if not T-N:
            Z+=1
            J+=Z
    print(d*(39-(N-J))+"/"+"**"*(N-J)+"\\")
for N in ["-"]*11+["_"]:
    print(d*35+"|"+N*8+"|")
hakr14
sumber
Bukankah afungsi yang didefinisikan dalam Python Anda setara dengan +pada daftar?
Buah Esolanging
@EsolangingFruit Sudah dekat, tetapi tidak persis: <list>+<str>bukan operasi yang valid, tapi saya bisa dengan mudah digunakan ["-"]*11+["_"]. Saya memutuskan untuk mendefinisikan fungsi saya sendiri untuk lebih akurat menerjemahkan apa yang sebenarnya dilakukan Pyth.
hakr14
Oke, itu masuk akal.
Buah Esolanging
2

Powershell, 88 byte

0..9|%{(3*$_)..(3+$_*4)|%{' '*(39-$_)+"/$('**'*$_)\"}}
,'-'*10+'_'|%{' '*35+"|$($_*8)|"}
mazzy
sumber
1

Groovy 118

10.times{(it*3).upto 3+it*4,{println' '*(39-it)+'/'+'*'*it*2+'\\'}};12.times{println' '*35+'|'+(it>10?'_':'-')*8+'|'}
cfrick
sumber
1
Mengapa saya tidak terkejut melihat solusi Groovy yang cukup singkat. Kesan saya terhadap Groovy adalah bahwa hal itu dilakukan oleh seorang programmer Java yang membenci mengetik.
Almo
1

C, 194

Kode ini adalah kekacauan panas dan pasti bisa bermain golf lebih banyak. Namun, ini adalah kesempatan untuk mencoba beberapa hal yang belum pernah saya lakukan sebelumnya: menggunakan literal untuk string tanda bintang, dan menggunakan specifier lebar *dengan string masuk printf.

i,j=5,k=5,n;
main(){
  char d[]={[0 ...77]=42,0};
  for(;i<85;i++)k--,j+=!k,k+=(j-1)*!k,n=39-i+(j-5)*(j-4)/2,printf("%*s/%s\\\n",n,"",d+n*2);
  for(;i<97;i++)printf("%*s|\n",44,i-96?"|--------":"|________");
}
Level River St
sumber
1

Racket 223 220 211 204 198

Golf:

(for-each display(flatten(let([m make-list])`(,(for*/list([i 10][j(range(* i 3)(* 4(+ 1 i)))])`(,(m(- 39 j)" ")"/",(m j"**")"\\\n")),(for/list([c`(,@(m 11"-")"_")])`(,(m 35" ")"|",(m 8 c)"|\n"))))))

Tidak Disatukan:

(for-each display
     (flatten
      (let([m make-list])
        `(,(for*/list([i 10][j(range(* i 3)(* 4(+ 1 i)))])
             `(,(m(- 39 j)" ")"/",(m j"**")"\\\n"))
          ,(for/list([c`(,@(m 11"-")"_")])
             `(,(m 35" ")"|",(m 8 c)"|\n"))))))
Matthew Butterick
sumber
1

Majelis (MIPS, SPIM) , 768 671 659 655 654 byte

.text
.globl main
main:
li $8 32
li $9 47
li $t2 42
li $t3 92
li $t4 10
li $t5 42
addi $sp -4
move $4 $sp
la $s6 q
la $s5 w
li $t8 0
li $s0 10
li $t9 0
li $s3 40
li $s2 39
q:
sub $s3 $s3 $t8
add $s2 $s2 $t8
addi $t7 $t8 3
addi $t8 1
blt $s0 $t8 e
r:
sw $0 ($4)
blt $t9 $s2 t
beq $t9 $s2 y
beq $t9 $s3 u
beqz $t7 i
sb $t2 ($4)
p:
li $2 4
syscall
addi $t9 1
ble $t9 $s3 r
move $t9 $0
j $s5
o:
addi $t7 -1
bgez $t7 r
jr $s6
w:
addi $s2 -1
addi $s3 1
j o
t:
sb $8 ($4)
j p
y:
sb $9 ($4)
j p
u:
sb $t4 1($4)
sb $t3 ($4)
j p
i:
sb $t5 ($4)
j p
e:
li $t1 124
li $t3 124
li $t2 45
li $t5 95
li $t7 11
la $s6 a
la $s5 o
li $s2 35
li $s3 44
j r
a:
li $2 10
syscall

Cobalah online!

Sunting: Disimpan ~ 100 byte dengan pengkodean keras setiap karakter dalam register dan cukup menulis ke stack, kemudian menyalahgunakan fakta bahwa MIPS tidak memiliki tipe sehingga kata implisit untuk string ascii diperbolehkan.
Sunting 2: menghapus alokasi tumpukan duplikat. ( addi $sp -4) Ups!
Sunting 3: dalam penulisan ulang, secara tidak sengaja membuat tunggul pohon 1 karakter terlalu pendek. (36 menggantikan 35). Tetap.
Sunting 4: -4 byte dengan menggunakan $ 8 dan $ 9, bukan $ t0 dan $ t1. artinya sama, tetapi $ t0 lebih mudah dibaca. sayangnya, semua register t lainnya memiliki panjang yang sama ketika ditulis dengan baik ($ t2 == $ 10, tetapi keduanya adalah 3 karakter), jadi sisanya adalah pembasuhan. Saya bisa (secara teori) menggunakan register 'a' yang tersisa (5-7. Print syscall menggunakan 4), tetapi afaik perilaku tidak didefinisikan ketika menggunakan syscall.
-1 Byte dengan mengatur t8 ke 0 dan bercabang pada kurang dari pada tidak sama. juga mengharuskan saya untuk menyusun ulang add ops, yang sayangnya membuat waktu eksekusi memakan waktu 3 opcode lebih lama.

Bukan yang terbaik di MIPS, tapi setelah membersihkan nurani saya dalam diskusi meta, saya mengirimkannya. MIPS tidak dirancang untuk ini (tidak ada output, tidak untuk loop) tetapi cukup menyenangkan untuk melakukan ini mungkin terlepas dari itu.

Sayangnya, saya belum membuat versi berkomentar untuk solusi baru ini, tetapi Anda dapat melihat versi yang lama, dengan dokumentasi lengkap di sini

Jangan ragu untuk mengambil kredit dan meningkatkan jawaban ini jika Anda bisa mengalahkannya - Saya mungkin kehilangan beberapa optimasi di sana-sini.

Andrew Baumher
sumber
karena solusi ini tidak memerlukan data., Mungkin untuk mengkonversi ke biner (dikompilasi) dan menyimpan banyak byte. namun, SPIM tidak mendukungnya, jadi c'est la vie.
Andrew Baumher
Juga, saya tidak yakin apakah steno addi $sp -4yang benar addi $sp $sp -4- benar dari SPIM atau MIPS secara umum, jadi jika ada orang lain, tolong beri tahu saya.
Andrew Baumher
0

Cobra - 166 228 260

class P
    def main
        for x in 10,for n in 4+x,print' '.repeat(39-x*3-n)+'/['**'.repeat(x*3+n)]\\'
        w=' '.repeat(35)
        print'[w]|--------|\n'.repeat(11)+w+'|________|'
Suram
sumber