เอาท์พุท Yggdrasil ในตำนาน


39

งานของคุณคือการส่งออกเป็นตัวแทนของต้นไม้ในตำนานของชีวิตYggdrasil

คุณต้องเขียนโปรแกรมที่มีผลลัพธ์ตรงตาม:

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

ไม่มีช่องว่างต่อท้าย บรรทัดใหม่สุดท้ายอาจถูกตัดออก

เพื่อให้การตรวจสอบง่ายขึ้นนี่คือผลรวม md5 ของผลลัพธ์ที่คาดหวัง:

  • 374899e56bc854d04639c43120642e37 - ไม่มีการขึ้นบรรทัดใหม่ในตอนท้าย
  • 03afb81d960b8e130fe2f9e0906f0482 - ขึ้นบรรทัดใหม่เมื่อสิ้นสุด

ช่องโหว่มาตรฐานใช้ นี่คือรหัสกอล์ฟดังนั้นรายการที่เล็กที่สุดในไบต์ชนะ!


10
ที่เกี่ยวข้อง: codegolf.stackexchange.com/q/15860/15599 ไม่คุณควรทำงานด้านการตลาด ทุกครัวเรือนจะต้องการ Yggdrasil ในวันคริสต์มาสนี้ ฉันเห็นคุณตอบคำถามหมายเลขเกรแฮมด้วย คุณต้องชอบสิ่งที่แหลม เรามีชื่อใหม่สำหรับ "จรวด" และ "ไอศครีมโคน"
เลเวลริเวอร์เซนต์

นอกจากนี้ยังเกี่ยวข้องกับ: codegolf.stackexchange.com/q/4244/194
Peter Taylor

4
@ Nax: เนื่องจากต้นไม้ในโลกมีผลไม้และ angiosperms ไม่มีและนั่นชัดเจนว่าเป็นคำอธิบายบางอย่างน่าเสียดายที่ดูเหมือนว่าคุณถ่ายภาพต้นไม้ผิด: P
naught101

@Nax Hmm คุณถูก. คนอวดรู้ (ฉัน) เป็นคนชักรอกของเขาเอง md5sums มีการเปลี่ยนแปลง
Scott Leadley

1
เอ้อจุดสั่ง Yggdrasil เป็นต้นไม้เถ้าในเอ๊ดแน่นอนไม่ใช่เฟอร์ ค่อนข้างเป็นแบบนี้
Alex P

คำตอบ:


22

Golfscript, 84 77 76 75 72ตัวอักษร

วิธีการที่แตกต่างจากของฮาวเวิร์ด คลิกที่จำนวนตัวละครเพื่อลอง

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

ขอบคุณ Howard ที่ช่วยตัวละคร 3 ตัว!

คำอธิบาย :

นี้จะมากหรือน้อยพอร์ตตรงไปตรงมาของการแก้ปัญหาหลามของฉัน การใช้เสรีภาพที่แสดงออก (ใช้ตัวแปรที่มีชื่อแทนการติดตามตำแหน่งของสแต็กและprintทำให้สิ่งต่าง ๆ บนสแต็กไม่ใช่การพิมพ์):

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
คุณอาจใช้เคล็ดลับการแบ่งบรรทัดเดียวกับในโซลูชันของฉัน แทนที่จะ'\\'nดึงขึ้นบรรทัดใหม่ลงในสตริง (+/- 0 ตัวอักษร) และตอนนี้แบ็กสแลชไม่จำเป็นต้องใช้ Escape (-1 อักขระ) อีกต่อไป
โฮเวิร์ด

1
อีกสอง: 4*4+เหมือน)4*และ'_-'[=]สามารถเขียนได้'_-'1/=ซึ่งทำให้+ล้าสมัยครั้งสุดท้าย
Howard

3
คำอธิบายอาจมีประโยชน์ ... คำถามนี้มากเกินไปหรือไม่

@professorfish: มาแล้ว!
Claudiu

คุณไม่ต้องการการติดตาม ';' ที่นี่? มิฉะนั้นจะมีการขึ้นบรรทัดใหม่สองบรรทัดเนื่องจาก golfscript โดยค่าเริ่มต้นจะเพิ่มขึ้นหนึ่งบรรทัด
Nabb

21

Haml & 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 อนุญาตให้มีคำสั่งควบคุมการต่อข้อมูลและการแก้ไขตัวแปร ทั้งหมดนี้มีประโยชน์เมื่อจัดแต่งทรงผม แต่ verbose ขณะเล่นกอล์ฟ


ถูกสร้างเป็น:

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

หน้าผลลัพธ์


1
คุณไม่เห็นโซลูชัน HTML / CSS มากมายใน CodeGolf งานที่ดี.
Mordred

16

CJam , 62 ไบต์

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

ลองออนไลน์!

มันทำงานอย่างไร

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
ฉันต้องเริ่มใช้ CJam แทน GolfScript ...
Claudiu

อะไรที่ทำให้รหัส CJam มีขนาดกะทัดรัดมาก? มันเป็นคุณสมบัติปกติที่จับคู่กันหรือไม่ หรือไม่ใช่ CJam แต่เป็นโปรแกรมเมอร์ CJam เหรอ?
วิ

2
@Vi: มันเป็นการผสมผสานของทั้งสองอย่าง 1. CJam เป็นแบบสแต็กดังนั้นคุณมักจะออกไปโดยไม่ใช้ตัวแปรใด ๆ 2. ชื่อบิวด์อินทั้งหมดมีความยาวไม่เกินสองตัวอักษร ด้วยเหตุนี้คุณไม่จำเป็นต้องมีช่องว่างยกเว้นบางกรณีพิเศษ 3. แม้แต่การส่งในภาษากอล์ฟก็ไม่ได้เล่นกอล์ฟเอง โปรแกรม GolfScript / CJam ของฉันสั้นลงกว่าที่เคยเป็นมา
เดนนิส

คำแนะนำสำหรับ CJam คือการใช้รหัส ASCII 128-256 สำหรับชุดบิวด์อินทั้งหมด มีตัวแก้ไขพิเศษบางอย่างที่
Claudiu

@Claudiu: ขึ้นอยู่กับผู้สร้าง ถ้าฉันออกแบบภาษากอล์ฟของตัวเองฉันคิดว่าฉันจะทำให้มันเป็นบิตหรือเข้ารหัสคำแนะนำทั้งหมดทางคณิตศาสตร์
เดนนิส

15

GolfScript, 79 ตัวอักษร

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

ลองรหัสที่นี่ โปรดทราบว่าการแบ่งบรรทัดนั้นไม่จำเป็นในรหัสนี้


24
วิธีการแก้ปัญหา GolfScript หลายบรรทัด? ฉันไม่คิดว่าฉันจะได้เห็นวัน!
Ingo Bürk

12

Python, 148 129 126 121 ตัวอักษร

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

ขอบคุณFalkoสำหรับการบันทึกตัวละคร 3 ตัวและflornquakeเพื่อการบันทึกที่ยอดเยี่ยมอีก 5 ตัว!


1
ธ คูณตัวอักษรเป็นบิตเกินไปที่สมบูรณ์แบบสำหรับความท้าทายนี้ ...
ฌอนลาแทม

รอจนกว่าคุณจะเห็นวิธีแก้ปัญหา Golfscript ของฉัน ... = P
Claudiu

2
ใช้'**'*jเพื่อบันทึก 3 ตัวอักษร นอกเหนือจากนี้โซลูชันของฉันมาบรรจบกับรหัสเดียวกันแน่นอน :)
Falko

1
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'คุณสามารถทำให้บรรทัดสุดท้ายสั้นโดยการเขียน
flornquake

@flornquake: ดี! ฉลาดมาก
Claudiu

11

ทุบตี, 236 197 193

รหัส 10 ไบต์ + ชื่อไฟล์ 1 ไบต์ + ไฟล์ข้อมูล 182 ไบต์ = รวม 193 ไบต์

zcat y 2>j

คำอธิบาย

yเป็นไฟล์ที่มี Yggdrasil โดยไม่ต้องขึ้นบรรทัดใหม่ที่ถูกบีบอัดด้วยอัลกอริทึมzopfli (เรียกใช้เป็นzopfli --i64) แล้วลบ 8 ไบต์สุดท้าย zopfli เข้ากันได้กับ gzip ดังนั้นฉันสามารถขยายไฟล์ด้วยโปรแกรมอรรถประโยชน์ Bash มาตรฐานที่ออกแบบมาสำหรับ gzip ขนาดของไฟล์ข้อมูลคือ 182 ไบต์ (229 ไบต์เมื่อใช้ gzip ปกติ) ขนาดของ Yggdrasil ดั้งเดิมซึ่งไม่มีบรรทัดใหม่ต่อท้ายคือ 5876 ไบต์

การกำจัดของสุดท้าย 8 jไบต์ทำให้เกิดข้อผิดพลาดซึ่งถูกระงับโดยการส่งข้อผิดพลาดมาตรฐานในไฟล์ที่เรียกว่า ถ้าjมีอยู่มันจะถูกเขียนทับ

base64 ของyคือ (ใช้base64 -dเพื่อรับไฟล์ต้นฉบับ):

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

และ md5sum คือ:

4a049a80241160cdde0a3cbca323b7f2

2
นิ้วของฉันอยากจะกดปุ่ม "ลบ" เมื่อฉันเห็นรหัสจนกว่าฉันจะอ่านจำนวนตัวอักษรและคำอธิบาย : P
Doorknob

2
คุณสามารถบันทึกประมาณ 30 ไบต์โดยใช้ zopfli เพื่อสร้างไฟล์บีบอัด "zopfli --i100 y" ให้ผลไฟล์ 190- ไบต์ที่ zcat สามารถคลายการบีบอัดได้
Glenn Randers-Pehrson

1
และอีกสองสามถ้าคุณลบ 10 ไบต์สุดท้ายและปิด STDERR
Dennis

@ GlennRanders-Pehrson ขอบคุณสำหรับการชี้ให้เห็นนี้ฉันยังได้แก้ไขคำตอบของฉันในการ 'มวลโมเลกุลมวลรวมของสารประกอบ' codegolf.stackexchange.com/a/35613/16402เพื่อใช้ zopfli ประหยัด 37 ไบต์

@ เดนนิสมันกลายเป็น 8 ไบต์ (มากกว่านี้และบิตของลำตัวของ Yggdrasil จะหายไป) ขอบคุณ

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 (และ disentangled เล็กน้อย):

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

ทับทิม - 100

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

วางตัวราบอัตโนมัติดังนั้นเราจึงสามารถรวบรวมทุกบรรทัดได้แม้ในอาร์เรย์ที่ซ้อนกัน ต้องการทับทิม 1.9

ลองที่ideone


ฉันคิดว่ามันต้องการช่องว่างชั้นนำ ใช้ได้กับ Ruby 1.9 แต่ไม่ใช่ใน 1.8
Scott Leadley


6

C # 258 234 ไบต์

ขอขอบคุณผู้ใช้ที่น่ารำคาญสำหรับการแก้ไขที่แนะนำซึ่งใช้ประโยชน์จากวิธีการ 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));}}

รหัสค่อนข้างง่ายไม่เหลือกอล์ฟ

รหัสที่จัดรูปแบบ:

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

การใช้\rไม่มีจุดหมายที่นี่ นี่คือรหัสกอล์ฟ
nyuszika7h

3
@ nyuszika7h แน่นอน แต่มันรวมอยู่ในรูปแบบการคัดลอกเพื่อวัดที่ดีเพื่อให้ผู้ใช้ notepad สามารถเห็นความรุ่งโรจน์ของ Yggdrasil ได้ง่ายขึ้น (ไม่รวมอยู่ในคะแนน)
VisualMelon

อ้อเข้าใจแล้ว. Windows ... รู้สึกอิสระที่จะแก้ไขการแก้ไขของฉันแล้ว
nyuszika7h

@ nyuszika7h ขอบคุณที่ชี้ให้เห็นว่าการเน้นไวยากรณ์ไม่ถูกต้อง
VisualMelon


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

แทนที่ $ i ด้วย $ _ และบันทึก 4 ตัวอักษร
choroba

4

ทับทิม - 139 129 126 123 121

Hoisted "ใส่" นอกการสร้างอาร์เรย์ (คำแนะนำจาก bitpwner)

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


Ungolfed ("ไม่ทำให้เกิด")


# 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 ฉันคิดว่านี่เป็นคำตอบที่สมควร ไปเลย
Scott Leadley

4

PHP 223 202 181 160 156

แก้ไขฉันหาวิธีนามแฝงฟังก์ชั่นด้วยตัวแปรและสามารถตัดอักขระเพิ่มเติมได้อีก ที่str_repeatฟังก์ชั่นเป็นอย่างละเอียดจริงๆ

แก้ไข 2: ขอบคุณทุกคนสำหรับคำแนะนำ!

แข็งแรงเล่นกอล์ฟ:

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

อ่านได้:

    <?

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

ผลลัพธ์: http://brobin.me/yggdrasil.php


คุณสามารถบันทึกตัวอักษร 6 โดยการลบวงเล็บรอบ(39-$j), และ($j*2) ($i==11)-2 โดยแทนที่\nด้วยอักขระบรรทัดใหม่จริง (PHP อนุญาตเป็น litterals) -5 ตัวอักษรโดยการแทนที่ (ทั้งสอง) for($i=0;$i<12;$i++)ด้วยfor($i=12;$i-->0;)และมี$i==11 $i==0
sebcap26

หลังจากนั้นคุณยังสามารถแทนที่ด้วย$s(($i==0?'_':'-'),8) $s($i?'-':'_',8)(==> -5 ตัวอักษร)
sebcap26

-1 ตัวละครโดยการแทนที่ด้วย$s('*',$j*2) $s('**',$j)ฉันคิดว่านั่นเป็นการปรับปรุงครั้งสุดท้ายที่ฉันสามารถหาได้
sebcap26

-2 การเปลี่ยนแปลง($j*2)ในด้านสำหรับการ($j++*2)และลบ$j++จากfor()การขัดแย้ง
Avall

@ sebcap26 for($i=12;$i-->0;)สามารถย่อให้เหลือfor($i=12;$i--;)- อีก 2 ตัวอักษร
avall

3

Delphi 429

จะพยายามปรับปรุงในภายหลัง
แข็งแรงเล่นกอล์ฟ

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 ซ่อนconsole.logs ที่ซ้ำกันใช้ IE แทน

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

ใช้for(i=0;i++<39-w;)แทนfor(i=0;i<39-w;++i)และอื่น ๆ นอกจากนี้p=console.logแทนที่จะเป็นc=consoleและpแทนที่จะเป็นc.log(แม้ว่าฉันจะทดสอบเฉพาะส่วนหลังใน Node.js แต่ก็ไม่สามารถใช้งานได้ใน Firefox) สิ่งนี้จะช่วยประหยัด 12 ไบต์
nyuszika7h

c=console.logไม่ได้ทำงานใน Chrome ดังนั้นฉันจึงไม่ได้ใช้ แม้ว่าเทคนิค for loop จะสามารถบันทึกได้ถึง 7 ไบต์
Sean Latham

ฉันมักจะค่อนข้างระวังสิ่งที่กระตุ้นให้ฉันใช้ MSIE ...

นี่อาจเป็นครั้งแรกที่ฉันเคยเห็นวลี "ใช้ IE แทน" O_o อย่างไรก็ตามคุณสามารถระงับพฤติกรรมของ Chrome ได้โดยเพียงแค่เรียกใช้รหัสนี้ในคอนโซลแทนที่จะเป็นจากหน้าเว็บ
Doorknob

เรียกใช้ในหน้าและในคอนโซลให้ผลลัพธ์แบบเดียวกันสำหรับฉันทั้งใน Firefox และ Chrome
Sean Latham

3

JavaScript (console.log), 168 166

(ช่องว่างสำหรับการอ่านเท่านั้น)

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)

ขอบคุณทุกคนสำหรับเคล็ดลับการเล่นกอล์ฟ - จัดการให้ได้ถึง 219 อย่าคิดว่ามันจะต่ำกว่านี้มาก

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

ต้องมี:

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

หากเขายินดีที่จะใช้ C89 เขาสามารถละเว้นการรวมทั้งหมดได้เช่นกัน ไม่มีกรณีใดในรหัสนี้ที่มีการประกาศโดยนัยเกี่ยวกับสกรูสายขึ้น
Joshua

@Nax; ที่ทำให้ฉันถึง 263 - และฉันดึงมันออกมา ขอบคุณ
DreamWarrior

@Joshua - ระบบ 64 บิตและ memset อาจมีปัญหา แต่ ... มิฉะนั้นอาจจะไม่ ไม่ว่าจะด้วยวิธีใดคนส่วนใหญ่จะลบการรวมไว้ด้วยดังนั้นฉันก็ทำเช่นกัน
DreamWarrior

จริงๆแล้วมันเป็น 262 ตัวอักษรคุณไม่จำเป็นต้องขึ้นบรรทัดใหม่
nyuszika7h

คุณสามารถใช้32แทน' 'และ42แทน '*':)
Quentin

3

Haskell, 153 148

ตรงไปข้างหน้าไม่มีเทคนิคเพียงแค่เล่นกอล์ฟธรรมดา:

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

ตัว%ดำเนินการดึงบรรทัดเดียวอาร์กิวเมนต์แรกของมันคือStringความยาว 3 ที่ประกอบด้วยเส้นขอบและอักขระเติมในบรรทัดนั้น (ตอนนี้สมมติว่า 3 Charวินาทีประหยัด 5 ไบต์) วินาทีตัวที่สองและIntครึ่งหนึ่งระบุจำนวนอักขระเติม รูปแบบการจับคู่ข้อเสียไอเอ็นจีและท้ายถูกนำมาใช้ในการรวมกันเพื่อประหยัดไบต์โดยการดูแลของ "กาว" ระหว่างและChar Stringในรุ่นที่สองนี้ฉันได้สร้าง#อนันต์และแนะนำ a take 85เพื่อให้ จำกัด อีกครั้ง (ไม่มีการบันทึกไบต์โชคไม่ดี)

#ผู้ประกอบการสร้างลำดับสำหรับnอาร์กิวเมนต์%ที่จำเป็นสำหรับต้นไม้: [0..3], [3..7], ...ตัดแบ่ง

&เป็นเพียงชวเลขมัดสำหรับreplicateซึ่งเกิดขึ้นสามครั้ง

unlinesต้นไม้จะใส่กันในบรรทัดสุดท้ายบรรทัดใหม่จะถูกเพิ่มโดย



2

ลัวะ - 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

แน่นอนว่าไม่ใช่ทางออกที่ดีที่สุด:

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

ไม่นับบรรทัดใหม่ Mathematica จะบิดเบือนการส่งออกเนื่องจากไม่ได้ใช้ความกว้างเท่ากันสำหรับช่องว่างสำหรับ "*" และ "/" แต่ผลลัพธ์นั้นถูกต้อง


(มันเป็นสนามกอล์ฟแห่งแรกของฉัน)
freddieknets

2

Java - 286

กอล์ฟครั้งแรกของฉัน

แข็งแรงเล่นกอล์ฟ:

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

ทดสอบที่นี่


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

รุ่นอื่น ๆ ที่ฉันพยายามรวมถึง:

# 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 ไบต์

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

ลองออนไลน์!

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

ไม่ได้เป็นaฟังก์ชั่นที่กำหนดไว้ในหลามของคุณเทียบเท่ากับ+ในรายการ?
แยกผลไม้

@EsolangingFruit มันใกล้ แต่ไม่ตรง: <list>+<str>ไม่ได้ดำเนินการถูกต้อง ["-"]*11+["_"]แต่ที่ฉันสามารถทำได้เช่นเดียวกับการใช้งานได้อย่างง่ายดาย ฉันตัดสินใจที่จะกำหนดฟังก์ชั่นของตัวเองเพื่อแปลสิ่งที่ Pyth ทำจริงๆ
hakr14

โอเคนั่นสมเหตุสมผลแล้ว
แยกผลไม้


1

Groovy 118

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

1
ทำไมฉันไม่แปลกใจที่จะเห็นวิธีการแก้ปัญหา Groovy ที่ค่อนข้างสั้น ความประทับใจใน Groovy ของฉันก็คือมันทำโดยโปรแกรมเมอร์ Java ที่เกลียดการพิมพ์
Almo

1

C 194

รหัสนี้เป็นระเบียบร้อนและสามารถ golfed เพิ่มเติมแน่นอน แต่ถึงกระนั้นก็เป็นโอกาสที่จะลองสองสิ่งที่ฉันไม่เคยทำก่อน: การใช้ตัวอักษรสำหรับสตริงของดอกจันและใช้ระบุความกว้างกับสตริงใน*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

แร็กเก็ต223 220 211 204 198

แข็งแรงเล่นกอล์ฟ:

(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

ชุดประกอบ (MIPS, SPIM) , 768 671 659 655 654 ไบต์

.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

ลองออนไลน์!

แก้ไข:บันทึกไว้ ~ 100 ไบต์โดยการเข้ารหัสอย่างหนักอักขระแต่ละตัวในการลงทะเบียนและเขียนไปยังสแต็คจากนั้นจึงใช้ความจริงที่ว่า MIPS ไม่มีประเภทดังนั้นอนุญาตให้ใช้คำแบบสตริงโดยนัยถึงสตริง ASCII
แก้ไข 2:ลบการจัดสรรสแต็กที่ซ้ำกันออก ( addi $sp -4) อ๊ะ!
แก้ไข 3:เขียนใหม่ทำให้ตอต้นไม้ 1 ตัวสั้นเกินไปโดยไม่ตั้งใจ (36 แทน 35) แก้ไขแล้ว.
แก้ไข 4: -4 ไบต์โดยใช้ $ 8 และ $ 9 แทน $ t0 และ $ t1 พวกเขาหมายถึงสิ่งเดียวกัน แต่ $ t0 ง่ายต่อการอ่าน น่าเสียดายที่การลงทะเบียน t อื่น ๆ มีความยาวเท่ากันเมื่อเขียนไว้อย่างดี ($ t2 == $ 10 แต่ทั้งคู่เป็น 3 ตัวอักษร) ดังนั้นส่วนที่เหลือจะเป็นการล้าง ฉันสามารถ (ในทางทฤษฎี) ใช้รีจิสเตอร์ 'a' ที่เหลือ (5-7. print syscall ใช้ 4), แต่ afaik พฤติกรรมไม่ได้ถูกกำหนดเมื่อใช้ syscall
-1 ไบต์โดยการตั้งค่า t8 เป็น 0 และแยกจากน้อยกว่าแทนที่จะเท่ากับ ยังต้องให้ฉันสั่งซื้อ ops เพิ่มใหม่ซึ่งน่าเสียดายที่เวลาในการดำเนินการใช้เวลานานถึง 3 opcode ที่ยาวนานขึ้น

ไม่ใช่สิ่งที่ดีที่สุดใน MIPS แต่หลังจากล้างความรู้สึกผิดชอบนี้ของฉันในการสนทนาเมตาฉันกำลังส่งพวกเขา MIPS ไม่ได้ถูกออกแบบมาสำหรับสิ่งนี้ (ไม่มีเอาท์พุต, ไม่มีสำหรับลูป) แต่มันค่อนข้างสนุกที่จะทำสิ่งนี้แม้จะเป็นเช่นนั้น

น่าเสียดายที่ฉันยังไม่ได้สร้างเวอร์ชันที่มีความคิดเห็นสำหรับโซลูชันใหม่นี้ แต่คุณสามารถดูเวอร์ชันเก่าที่มีเอกสารฉบับเต็มได้ที่นี่

อย่าลังเลที่จะรับเครดิตและปรับปรุงคำตอบนี้หากคุณสามารถเอาชนะได้ - ฉันอาจพลาดการปรับแต่งบางอย่างที่นี่และที่นั่น


เนื่องจากโซลูชันนี้ไม่ต้องการ. data จึงเป็นไปได้ที่จะแปลงเป็นไบนารี่ (รวบรวม) และบันทึกจำนวนไบต์ อย่างไรก็ตาม SPIM ไม่รองรับดังนั้น c'est la vie
Andrew Baumher

นอกจากนี้ฉันไม่แน่ใจว่าชวเลขaddi $sp -4ที่addi $sp $sp -4มาจาก SPIM หรือ MIPS โดยทั่วไปหรือไม่ดังนั้นถ้ามีคนอื่นกรุณาแจ้งให้เราทราบ
Andrew Baumher

0

งูเห่า - 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+'|________|'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.