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!


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


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"

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


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. ";

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


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!


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

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

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


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+"|"}

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));
    }
}

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

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";
}

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' % '|________|'

@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


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.

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('_'))

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])

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>

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.



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

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.


(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


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+'|'

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+"|")

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)|"}

1

Groovy 118

10.times{(it*3).upto 3+it*4,{println' '*(39-it)+'/'+'*'*it*2+'\\'}};12.times{println' '*35+'|'+(it>10?'_':'-')*8+'|'}

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?"|--------":"|________");
}

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"))))))

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.


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+'|________|'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.