Efsanevi Yggdrasil çıktı


39

Göreviniz, efsanevi hayat ağacının, Yggdrasil'in temsilidir .

Çıktıları tam olan bir program yazmalısınız:

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

Sonda boşluk yok. Son satır atlanabilir.

Kontrolü kolaylaştırmak için, beklenen çıktının md5 toplamları:

  • 374899e56bc854d04639c43120642e37 - Sonunda yeni hat yok.
  • 03afb81d960b8e130fe2f9e0906f0482 - Sonunda Newline

Standart boşluklar uygulanır. Bu kod golf, bayt cinsinden en küçük giriş kazanır!


10
İlgili: codegolf.stackexchange.com/q/15860/15599 . Nax, pazarlamada çalışmalısın. Her hane bu Noel'de Yggdrasil isteyecek. Graham'in sayı sorusunu da cevapladığını gördüm. Sivri şeyleri sevmelisin. "Roket" ve "Dondurma külahı" için yeni isimlerimiz var.
Seviye Nehri St


4
@Nax: Dünya ağacı meyveye sahip olduğundan ve anjiyospermlerin bulunmadığı ve bu açıkça bazı tanımların bir sakıncası olduğu için, maalesef yanlış ağacın fotoğrafını
çekmiş gibisiniz

@Nax Hmm. Haklısın. Pedant (ben) kendi petardında kalkar. Md5sums değişti.
Scott Leadley

1
Err, siparişte, Yggdrasil kesinlikle köknar değil, eddasda bir dişbudak ağacı. Biraz böyle .
Alex P,

Yanıtlar:


22

Golfscript, 84 77 76 75 72 karakter

Howard'dan farklı bir yaklaşım . Denemek için karakter sayısına tıklayın.

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

3 karakter kaydettiğin için teşekkürler Howard!

Açıklama :

Bu Python çözümümün hemen hemen basit bir limanı . Bazı anlamlı özgürlükler almak (yığın konumlarını takip etmek yerine adlandırılmış değişkenleri kullanmak ve yazmayı printdeğil, yığın üzerinde işleri saklamaktır):

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
Benim çözümümdeki ile aynı satır sonu oyununu kullanabilirsiniz. '\\'nNewline'ı dizeye çekmek yerine (+/- 0 karakter) ve şimdi ters eğik çizgiden kaçmaya gerek kalmadı (-1 karakter).
Howard

1
İki tane daha: sonunu eskimeyen yapanla 4*4+aynı )4*ve '_-'[=]yazılabilir . '_-'1/=+
Howard

3
bir açıklama faydalı olabilir mi ...? Sormak için çok mu fazla?

@professorfish: Hemen geliyor!
Claudiu

İzlemeye gerek yok mu ';' İşte? Aksi halde, varsayılan olarak bir kod ekleyeceğinden iki izleyen satırsonu olacak.
Nabb

21

Haml ve Sass

37 + 277 = 314

haml:

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

Sass:

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, kontrol direktifleri, birleştirme ve değişken değişkenleştirmeye izin verir. Bunların hepsi stil yaparken kullanışlıdır, ancak golf yaparken ayrıntılıdır.


içine üretilir:

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

sonuçlanan sayfa


1
CodeGolf'ta bir ton HTML / CSS çözümü görmüyorsunuz. İyi iş.
Mordred

16

CJam , 62 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

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
GolfScript yerine CJam kullanmaya başlamalıyım ...
Claudiu

CJam kodunu bu kadar küçük yapan nedir? Sadece normal özelliklerin bir araya gelmesi normal mi yoksa bazı süper numaralar var mı? Ya da aslında CJam değil, CJam programcıları öyle mi?
Vi.

2
@Vi .: Bu ikisinin karışımı. 1. CJam yığın tabanlıdır, bu yüzden genellikle herhangi bir değişken kullanmadan kaçabilirsiniz. 2. Tüm yerleşiklerin adları en fazla iki karakter uzunluğundadır. Bu nedenle, bazı özel durumlar dışında boşluklara ihtiyacınız yoktur. 3. Golf dillerinde yapılan bildirimler bile golf oynamamaktadır. GolfScript / CJam programlarım, şimdi olduğundan daha kısa.
Dennis,

CJam’ın önerisi, bütünleşik bir set set için ASCII kodları 128-256’yı kullanmak olacaktır. bazı özel editör var
Claudiu

@ Claudiu: Pekala, yaratıcısına bağlı. Kendi golf dilimi tasarladıysam, bunu biraz bit yapar ya da tüm talimatları aritmetik olarak kodlardım.
Dennis,

15

GolfScript, 79 karakter

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

Kodu burada deneyin . Satır kesmelerinin bu kodda isteğe bağlı olmadığını unutmayın.


24
Çok hatlı GolfScript çözümü? Günü göreceğimi düşünmedim!
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+'|'

Sayesinde Falko 3 karakter kaydetmek için ve flornquake zekice başka 5 kaydetmek için!


1
Python'un karakter çarpımı bu meydan okuma için biraz fazla mükemmel ...
Sean Latham

Golfscript çözümümü görene kadar bekleyin ... = P
Claudiu

2
'**'*j3 karakter kaydetmek için kullanın . Bunun dışında benim çözümüm tam olarak aynı koda yaklaşıyor. :)
Falko

1
Yazarak son satırı kısaltabilirsiniz for c in'-'*11+'_':print' '*35+'|'+c*8+'|'.
Flornquake

@flornquake: nice! çok zekice
Claudiu

11

Bash, 236 197 193

10 bayt kod + 1 bayt dosya adı + 182 bayt veri dosyası = toplam 193 bayt

zcat y 2>j

açıklama

yzopfli algoritmasıyla (as olarak çağrılır zopfli --i64) sıkıştırılmış ve daha sonra son 8 baytı çıkarılmış , sondaki yeni satır olmadan Yggdrasil'i içeren bir dosyadır . zopfli, gzip ile uyumludur, bu yüzden gzip için tasarlanmış standart Bash yardımcı programlarıyla dosyayı açabilirim. Veri dosyasının boyutu 182 bayttır (normal gzip kullanıldığında 229 bayt). Orijinal Yggdrasil'in (sondaki yeni satır olmadan) boyutu 5876 bayttır.

Son 8 baytın kaldırılması, bir dosyaya standart hata gönderilerek bastırılan hata mesajlarına neden olur j. Varsa j, üzerine yazılacaktır.

Base64 ydeğeri ( base64 -dorijinal dosyayı almak için kullanın ):

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

Ve md5sum:

4a049a80241160cdde0a3cbca323b7f2

2
Parmağım, kodu gördüğümde, karakter sayımı ve açıklamasını okuyana kadar "delete" (sil) düğmesine basmak için can atıyordu. : P
Doorknob

2
Sıkıştırılmış dosyayı oluşturmak için zopfli'yi kullanarak yaklaşık 30 bayt tasarruf edebilirsiniz. "zopfli - i100 y", zcat'in açabileceği 190 baytlık bir dosya verir.
Glenn Randers-Pehrson,

1
Ve son 10 baytı silip STDERR'yi kapatırsanız birkaç tane daha.
Dennis,

@ GlennRanders-Pehrson sayesinde bu işaret için, ben de 'bileşikler molar kitleler' Cevabımı kaydetmiştiniz codegolf.stackexchange.com/a/35613/16402 37 bayt tasarruf zopfli kullanmak

@Dennis 8 bayt olarak ortaya çıktı (artık Yggdrasil'in bagajının bitleri eksikti), teşekkürler

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

Ungolfed (ve biraz bozuk):

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

Yakut - 100

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

Otomatik düzleştiriciler koyar, böylece iç içe dizilerde bile tüm çizgileri toplayabiliriz. Ruby 1.9'a İhtiyaç Var

En deneyin ideone


Bence bazı öncü alanlara ihtiyacı var. Ayrıca, Ruby 1.9 ile çalışır, ancak 1.8'de değil.
Scott Leadley

7

PowerShell 104 101

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

6

C # 258 234bayt

String.PadLeft yöntemini iyi kullanan, önerilen düzenlemeler için bazı rahatsız edici kullanıcılara teşekkür ederiz!

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

Kod oldukça basit, golf oynamak için fazla bir şey yok.

Biçimlendirilmiş kod:

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

Kullanımı \rburada anlamsız. Bu kod golfü.
nyuszika7h

3
@ notepad kullanarak bu kişilerin daha kolay Yggdrasil görkemini görebilmek için gerçekten ama (o puanı bulunmayanlar) iyi ölçmek için biçimlendirilmiş kopyasında dahildir nyuszika7h
VisualMelon

Ah anlıyorum. Windows ... Düzenlememi düzeltmek için çekinmeyin.
nyuszika7h

sözdizimi vurgulama işaret için @ nyuszika7h teşekkür doğru değildi
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";}

Ungolfed:

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

$ İ'yi $ _ ile değiştirin ve 4 karakter kaydedin.
choroba

4

Yakut - 139 129 126 123 121

Hoisted, dizi oluşturmanın dışına çıkar (bitpwner önerisi).

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


Ungolfed ("seçilmemiş" koyar):


# 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 Bunun kendi cevabını hakettiğini düşünüyorum. Göreyim seni.
Scott Leadley

4

PHP 223 202 181 160 156

Düzenleme Değişkenli bir işlevin nasıl isimlendirileceğini ve bazı karakterleri kesmeyi öğrendim. Bu str_repeatişlev gerçekten ayrıntılıydı

Düzenleme 2: Önerileriniz için herkese teşekkürler!

golfed:

<?$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)."|
";

Okunabilir:

    <?

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

Çıktı: http://brobin.me/yggdrasil.php


Arkanı parantez kaldırarak 6 karakter kaydedebilirsiniz (39-$j), ($j*2)ve ($i==11). -2 \ngerçek yeni satır karakterleriyle değiştirilerek (PHP litteral olarak izin verir). -5 karakterleri (her ikisi de) for($i=0;$i<12;$i++)ile for($i=12;$i-->0;)ve $i==11ile değiştirerek $i==0.
sebcap26

Ayrıca yerini alabilir Bundan sonra $s(($i==0?'_':'-'),8)birlikte $s($i?'-':'_',8). (==> -5 karakter)
sebcap26

-1 $s('*',$j*2)ile değiştirerek karakter $s('**',$j). Sanırım bulabildiğim son gelişme bu.
sebcap26

-2 değiştirmek ($j*2)için iç olarak ($j++*2)kaldırma $j++arasından for()bağımsız değişkenler
avall

@ sebcap26 for($i=12;$i-->0;)kısaltılabilir for($i=12;$i--;)- başka 2 karakter.
avall

3

Delphi 429

Daha sonra geliştirmeye çalışacağım.
golfed

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, kopyalananları gizler console.log, yerine IE kullanın.

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

Ungolfed:

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

Kullanım for(i=0;i++<39-w;)yerine for(i=0;i<39-w;++i), vb. Ayrıca, p=console.logyerine c=consoleve pyerine c.log(yalnızca Node.js'deki sonuncuyu test etmeme rağmen, Firefox'ta çalışmıyor). Bu 12 bayt kaydeder.
nyuszika7h

c=console.logChrome'da da çalışmadı, ben de kullanmadım. For loop hileci olsa da 7 bayt kaydeder.
Sean Latham

Genelde beni MSIE kullanmaya teşvik eden bir şey hakkında oldukça temkinli

Bu, muhtemelen "bunun yerine IE kullanın" ifadesini ilk gördüğümde muhtemelen. Ancak, bu kodu bir web sayfasından ziyade konsolda çalıştırarak Chrome'un davranışını bastırabilirsiniz.
Doorknob

Bir sayfada ve konsolda çalıştırmak, hem Firefox hem de Chrome'da benim için aynı sonuçları veriyor.
Sean Latham

3

JavaScript (konsol.log), 168 166

(Yalnızca okunabilirlik için boşluk)

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)

Golf önerileri için herkese teşekkürler - 219'a kadar indirmeyi başardı. Daha düşük olacağını düşünmeyin.

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

Gerekli içerir:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

C89 kullanmaya istekliyse, tüm parçaları da ihmal edebilir. Bu kodda, çağrılara iliĢkin dolaylı beyanın yerine getirildiği durumlar yoktur.
Joshua,

@Nax; Bu beni 263'e götürüyor - ve çektiğim parçaları çıkardım. Teşekkürler.
DreamWarrior

@Joshua - 64 bit sistemler ve memset problemli olabilir, ama ... aksi takdirde belki de değil. Her iki durumda da, çoğu insan içeriklerini kaldırır, ben de yaptım.
DreamWarrior

Aslında 262 karakter, izleyen satırsonuna ihtiyacınız yok.
nyuszika7h

Sen kullanabilirsiniz 32yerine ' 've 42yerine '*':)
Quentin

3

Haskell, 153 148

Dümdüz, hile yok, sadece golf oynamak:

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

%Operatör, tek bir çizgi çizer, bir varlık, ilk bağımsız değişken Stringuzunluk 3 bu hat sınırları ve dolgu karakterleri içeren (şimdi tam olarak 3 varsayılarak Chars, 5 bayt tasarruf), ikinci bir Intdolgu karakter, belirtir yarısı sayısı. Desen eşleştirme, uygulama ve ekleme işlemleri, Charve arasındaki "tutkal" ı dikkate alarak baytları kurtarmak için kombinasyon halinde kullanılır String. Bu ikinci versiyonda ayrıca #sonsuz yaptım ve birtake 85 onu tekrar sonlu yapmak için (maalesef bayt kaydedilmedi).

#Operatör için sırasını oluşturur niçin argüman %ağaç için gerekli: [0..3], [3..7], ...Zincirleme.

& sadece bir infix kısayolu replicate üç kere meydana gelen, .

Ağaç son satırda bir araya getirilir, yeni satırlar tarafından eklenir 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

Elbette en iyi çözüm değil:

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

Yeni satırları saymamak. Mathematica, "*" ve "/" için bir boşluk için aynı genişliğe sahip olmadığından çıktıyı çarpıtır. Ancak sonuç doğru.


(bu benim ilk
golfüm

2

Java - 286

Benim ilk golf.

golfed:

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

Ungolfed:

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

Burada test et


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

Denediğim diğer sürümler:

# 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 bayt

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

Çevrimiçi deneyin!

Python 3 çeviri:
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+"|")

aPython'unuzda tanımlanmış olan fonksiyon +listelerdeki eşdeğeri değil midir?
Esolanging Fruit

@EsolangingFruit Yakın, ancak tam olarak değil: <list>+<str>geçerli bir işlem değil, ancak o kadar kolay kullanabilirim ["-"]*11+["_"]. Pyth'in gerçekte ne yaptığını daha doğru bir şekilde çevirmek için kendi işlevimi tanımlamaya karar verdim.
hakr14

Tamam, bu mantıklı.
Esolan Meyve

2

Powershell, 88 bayt

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

1

Harika 118

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

1
Neden oldukça kısa bir Groovy çözümü gördüğüme şaşırmadım. Groovy hakkındaki izlenimim, yazmaktan nefret eden bir Java programcısı tarafından yapıldığıydı.
Almo,

1

Cı, 194

Bu kod sıcak bir karışıklıktır ve kesinlikle daha fazla golf oynayabilir. Yine de, daha önce hiç yapmadığım birkaç şeyi denemek için bir fırsattı: bir yıldız işareti dizisi için bir hazır bilgi kullanmak ve bir genişlik belirticisini *bir dizge içinde kullanmak 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

Raket 223 220 211 204 198

golfed:

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

Ungolfed:

(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

Montaj (MIPS, SPIM) , 768 671 659 655 654 bayt

.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

Çevrimiçi deneyin!

Düzenleme: Kaydedilen bir karakterdeki her bir karakteri sert bir şekilde kodlayarak ve sadece yığına yazarak kaydedilmiş ~ 100 bayt, daha sonra MIPS'nin türleri içermemesi gerçeğini kötüye kullanmak, böylece ascii karakter dizisine dolaysız kelimeye izin verilir.
Düzenleme 2: yinelenen yığın ayırma işlemi kaldırıldı. ( addi $sp -4) Hata!
Düzenleme 3: yeniden yazmak, yanlışlıkla ağaç kütüğü 1 karakter çok kısa yaptı. (35 yerine 36). Sabit. -1 bayt, t8 ila 0 olarak ayarlandı ve dallanma, eşit yerine düşüktür. Ayrıca, maalesef yürütme işlemlerini yeniden düzenlememi istedi.
4: -4 bayt'ı $ t0 ve $ t1 yerine 8 $ ve 9 $ kullanarak düzenleyin. aynı şeyi ifade ediyorlar, ancak $ t0'ın okunması daha kolay. ne yazık ki, diğer tüm t kayıtları güzelce yazıldığında aynı uzunluktadır ($ t2 == 10 $, ancak ikisi de 3 karakterdir), bu nedenle gerisi yıkama olur. Kalan 'a' yazmaçlarını kullanabilirim (teorik olarak) (5-7. Yazdırma syscall 4 kullanır), ancak syscall kullanırken davranış tanımlanmadı.

MIPS'de en iyisi değil, ancak meta tartışmadaki bu vicdanımı temizledikten sonra onları gönderiyorum. MIPS bunun için tasarlanmamıştır (çıktı yok, döngüler için hayır), ancak buna rağmen belki de bunu yapmak oldukça eğlenceli.

Ne yazık ki, bu yeni çözüm için yorumlanmış bir sürüm oluşturmadım, ancak eski sürümü tam dokümantasyonla görüntüleyebilirsiniz. burada

Krediyi almakta özgürsünüz ve bu cevabı geliştirmek için çekinmeyin - yenebilirseniz - muhtemelen burada ve burada birkaç optimizasyon eksik.


Bu çözüm .data gerektirmediğinden, ikiliye (derlenmiş) dönüştürmek ve bir sürü baytı kurtarmak mümkündür. Ancak, SPIM desteklemiyor, bu yüzden en iyisidir.
Andrew Baumher

Ayrıca, emin değilim steno eğer addi $sp -4gerçekten addi $sp $sp -4, SPIM ya da genel olarak MIPS gelen yani başkasının, lütfen izin vermez olursa bana haber.
Andrew Baumher

0

Kobra - 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+'|________|'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.