Xuất ra Yggdrasil huyền thoại


39

Nhiệm vụ của bạn là xuất ra một đại diện của cây huyền thoại của sự sống, Yggdrasil .

Bạn phải viết một chương trình có đầu ra chính xác là:

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

Không có khoảng trắng ở cuối. Dòng mới cuối cùng có thể được bỏ qua.

Để làm cho việc kiểm tra dễ dàng hơn, đây là tổng số md5 của đầu ra dự kiến:

  • 374899e56bc854d04639c43120642e37 - Không có dòng mới ở cuối.
  • 03afb81d960b8e130fe2f9e0906f0482 - Dòng mới ở cuối

Tiêu chuẩn áp dụng. Đây là môn đánh gôn, vì vậy mục nhỏ nhất trong byte sẽ thắng!


10
Liên quan: codegolf.stackexchange.com/q/15860/15599 . Nax, bạn nên làm việc trong tiếp thị. Mọi hộ gia đình sẽ muốn có một Yggdrasil vào Giáng sinh này. Tôi thấy bạn cũng trả lời câu hỏi số của Graham. Bạn phải thích những thứ nhọn. Chúng ta hãy có một số tên mới cho "tên lửa" và "kem ốc quế."
Cấp sông St


4
@Nax: vì cây thế giới có quả, và thực vật hạt kín, và đó rõ ràng là một mô tả của một số mô tả, thật không may, có vẻ như bạn đã chụp ảnh cây sai: P
naught101

@Nax Hmm. Bạn nói đúng. Người bán hàng (tôi) đang nâng lên cánh hoa của chính mình. Các md5sums đã thay đổi.
Scott Leadley

1
Err, quan điểm của trật tự, Yggdrasil chắc chắn là một cây tro trong eddas, không phải là linh sam. Kiểu như thế này .
Alex P

Câu trả lời:


22

Golf, 84 77 76 75 72 ký tự

Cách tiếp cận khác với Howard . Nhấp vào số lượng nhân vật để thử nó.

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

Cảm ơn Howard đã cứu 3 nhân vật!

Giải thích :

Đây ít nhiều là một cổng đơn giản cho giải pháp Python của tôi . Lấy một số quyền tự do biểu cảm (sử dụng các biến được đặt tên thay vì theo dõi các vị trí ngăn xếp và printthực sự giữ mọi thứ trên ngăn xếp, không in):

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
Bạn có thể sử dụng thủ thuật ngắt dòng giống như trong giải pháp của tôi. Thay vì '\\'nkéo dòng mới vào chuỗi (+/- 0 ký tự) và bây giờ dấu gạch chéo ngược không còn cần phải thoát (-1 ký tự).
Howard

1
Hai nữa: 4*4+giống như )4*'_-'[=]có thể được viết '_-'1/=mà làm cho +lỗi thời cuối cùng .
Howard

3
một lời giải thích có thể hữu ích ...? điều này có quá nhiều để hỏi không?

@professorfish: Sắp tới rồi!
Claudiu

Đừng cần theo dõi ';' đây? Nếu không, sẽ có hai dòng mới kể từ khi golfs theo mặc định thêm một.
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 cho phép các chỉ thị kiểm soát, nối và điều chỉnh quy định. Tất cả đều hữu ích khi tạo kiểu, nhưng dài dòng trong khi chơi golf.


được tạo thành:

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

trang kết quả


1
Bạn không thấy hàng tấn giải pháp HTML / CSS trên CodeGolf. Công việc tốt.
Sắp xếp

16

CJam , 62 byte

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

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

Làm thế nào nó hoạt động

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
Tôi đã bắt đầu sử dụng CJam thay vì GolfScript ...
Claudiu

Điều gì làm cho mã CJam rất nhỏ gọn? Có phải chỉ là các tính năng thông thường phù hợp với nhau hoặc có một số siêu lừa? Hay thực tế không phải là CJam, mà là lập trình viên của CJam vậy?
Vi.

2
@Vi.: Đó là sự pha trộn của cả hai. 1. CJam dựa trên stack, vì vậy bạn thường thoát ra mà không sử dụng bất kỳ biến nào. 2. Tất cả tên được xây dựng dài tối đa hai ký tự. Vì điều này, bạn không cần khoảng trắng ngoại trừ một số trường hợp đặc biệt. 3. Ngay cả những bài nộp trong ngôn ngữ chơi gôn cũng không tự đánh gôn. Các chương trình GolfScript / CJam của tôi bây giờ ngắn hơn rất nhiều so với trước đây.
Dennis

Đề xuất cho CJam sẽ là sử dụng mã ASCII 128-256 cho toàn bộ tập hợp tích hợp. có một số biên tập viên đặc biệt mà
Claudiu

@Claudiu: Vâng, đó là tùy thuộc vào người tạo ra nó. Nếu tôi thiết kế ngôn ngữ chơi gôn của riêng mình, tôi nghĩ rằng tôi sẽ làm cho nó dựa trên bit hoặc mã hóa tất cả các hướng dẫn một cách hợp lý.
Dennis

15

GolfScript, 79 ký tự

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

Hãy thử mã ở đây . Lưu ý rằng ngắt dòng không phải là tùy chọn trong mã này


24
Một giải pháp GolfScript đa dòng? Tôi không nghĩ rằng tôi sẽ nhìn thấy ngày!
Ingo Bürk

12

Con trăn, 148 129 126 121 ký tự

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

Cảm ơn Falko vì đã cứu 3 nhân vật và thành công rực rỡ vì đã cứu thêm 5 người nữa!


1
Phép nhân của Python là một chút quá hoàn hảo cho thử thách này ...
Sean Latham

Đợi 'cho đến khi bạn thấy giải pháp chơi gôn của tôi ... = P
Claudiu

2
Sử dụng '**'*jđể lưu 3 ký tự. Ngoài ra, giải pháp của tôi hội tụ đến cùng một mã chính xác. :)
Falko

1
Bạn có thể làm cho dòng cuối cùng ngắn hơn bằng cách viết for c in'-'*11+'_':print' '*35+'|'+c*8+'|'.
flornquake

@flornquake: tốt đẹp! rất thông minh
Claudiu

11

Bash, 236 197 193

10 byte mã + tên tệp 1 byte + tệp dữ liệu 182 byte = tổng số 193 byte

zcat y 2>j

Giải trình

ylà một tệp chứa Yggdrasil, không có dòng mới, được nén bằng thuật toán zopfli (được gọi là zopfli --i64) và sau đó loại bỏ 8 byte cuối cùng. zopfli tương thích với gzip, vì vậy tôi có thể giải nén tệp với các tiện ích Bash tiêu chuẩn được thiết kế cho gzip. Kích thước của tệp dữ liệu là 182 byte (229 byte khi sử dụng gzip bình thường). Kích thước của Yggdrasil ban đầu, không có dòng mới, là 5876 byte.

Việc loại bỏ 8 byte cuối cùng gây ra các thông báo lỗi, được loại bỏ bằng cách gửi lỗi tiêu chuẩn đến một tệp được gọi j. Nếu jtồn tại, nó sẽ bị ghi đè.

Base64 của ylà (sử dụng base64 -dđể lấy tệp gốc):

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

Và md5sum là:

4a049a80241160cdde0a3cbca323b7f2

2
Ngón tay của tôi bị ngứa khi nhấn nút "xóa" khi tôi nhìn thấy mã, cho đến khi tôi đọc số ký tự và giải thích. : P
Doorknob

2
Bạn có thể lưu khoảng 30 byte bằng cách sử dụng zopfli để tạo tệp nén. "Zopfli --i100 y" mang lại một tệp 190 byte mà zcat có thể giải nén.
Glenn Randers-Pehrson

1
Và một vài điều nữa nếu bạn xóa 10 byte cuối cùng và đóng STDERR.
Dennis

@ GlennRanders-Pehrson nhờ để chỉ ra điều này, tôi cũng đã thay đổi nội dung câu trả lời của tôi để 'khối mol của hợp chất' codegolf.stackexchange.com/a/35613/16402 sử dụng zopfli, tiết kiệm 37 byte

@Dennis hóa ra là 8 byte (bất kỳ phần nào và bit của thân cây Yggdrasil sẽ bị thiếu), cảm ơn

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 (và hơi bất đồng):

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

Hồng ngọc - 100

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

Đặt tự động làm phẳng, vì vậy chúng ta có thể thu thập tất cả các dòng ngay cả trong các mảng lồng nhau. Cần Ruby 1.9

Thử tại ideone


Tôi nghĩ rằng nó cần một số không gian hàng đầu. Ngoài ra, hoạt động với Ruby 1.9, nhưng không phải trong 1.8.
Scott Leadley

7

PowerShell 104 101

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

6

C # 258 234byte

Cảm ơn một số người dùng khó chịu vì các chỉnh sửa được đề xuất sử dụng tốt phương thức 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));}}

Mã này khá đơn giản, không còn nhiều để chơi golf.

Mã định dạng:

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

Sử dụng \rlà vô nghĩa ở đây. Đây là mã golf.
nyuszika7h

3
@ nyuszika7h thực sự, nhưng nó được bao gồm trong bản sao được định dạng để có biện pháp tốt để mọi người sử dụng notepad có thể dễ dàng nhìn thấy vinh quang của Yggdrasil (không bao gồm trong điểm số)
VisualMelon 19/8/14

Ồ, tôi hiểu rồi. Windows ... Hãy sửa lỗi chỉnh sửa của tôi sau đó.
nyuszika7h

@ nyuszika7h cảm ơn vì đã chỉ ra Cú pháp tô sáng không đúng
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";}

Ung dung:

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

Thay $ i bằng $ _ và lưu 4 ký tự.
choroba

4

Hồng ngọc - 139 129 126 123 121

Hoisted "đặt" bên ngoài việc tạo mảng (gợi ý từ bitpwner).

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


Ungolfed ("đặt" unhoisted):


# 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 Tôi nghĩ rằng điều này xứng đáng với câu trả lời của riêng mình. Đi cho nó.
Scott Leadley

4

PHP 223 202 181 160 156

Chỉnh sửa Tôi đã tìm ra cách đặt bí danh cho một hàm với một biến và có thể cắt thêm một số ký tự. Đó là str_repeatchức năng đã thực sự tiết

Chỉnh sửa 2: Cảm ơn mọi người vì những gợi ý!

Chơi gôn

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

Có thể đọc được

    <?

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

Đầu ra: http://brobin.me/yggdrasil.php


Bạn có thể tiết kiệm 6 ký tự bằng cách loại bỏ ngoặc xung quanh (39-$j), ($j*2)($i==11). -2 bằng cách thay thế \nbằng các ký tự dòng mới thực sự (PHP cho phép nó ở dạng rác). -5 ký tự bằng cách thay thế (cả hai) for($i=0;$i<12;$i++)bằng for($i=12;$i-->0;)$i==11bằng $i==0.
sebcap26

Sau đó bạn cũng có thể thay thế $s(($i==0?'_':'-'),8)bằng $s($i?'-':'_',8). (==> -5 ký tự)
sebcap26

-1 Ký tự bằng cách thay thế $s('*',$j*2)bằng $s('**',$j). Tôi nghĩ đó là cải tiến cuối cùng mà tôi có thể tìm thấy.
sebcap26

-2 thay đổi ($j*2)bên trong để ($j++*2)và loại bỏ $j++khỏi các for()đối số
trong

@ sebcap26 for($i=12;$i-->0;)có thể rút ngắn thành for($i=12;$i--;)- 2 ký tự khác.
trước

3

Delphi 429

Sẽ cố gắng cải thiện sau.
Chơi gôn

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.

vô dụng

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 ẩn console.logs trùng lặp , sử dụng IE thay thế.

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

Ung dung:

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

Sử dụng for(i=0;i++<39-w;)thay vì for(i=0;i<39-w;++i), và như vậy. Ngoài ra, p=console.logthay vì c=consolepthay vì c.log(mặc dù tôi chỉ thử nghiệm cái sau trong Node.js, nó không hoạt động trong Firefox). Điều này tiết kiệm 12 byte.
nyuszika7h

c=console.logcũng không hoạt động trong Chrome, vì vậy tôi đã không sử dụng nó. Các thủ thuật vòng lặp for tiết kiệm 7 byte mặc dù.
Sean Latham

Tôi thường khá cảnh giác với bất cứ điều gì khuyến khích tôi sử dụng MSIE ...

Đây hoàn toàn có thể là lần đầu tiên tôi thấy cụm từ "sử dụng IE thay thế." O_o Tuy nhiên, bạn có thể ngăn chặn hành vi của Chrome bằng cách chạy mã này trong bảng điều khiển thay vì từ trang web.
Doorknob

Chạy nó trong một trang và trong bảng điều khiển tạo ra kết quả tương tự cho tôi trên cả Firefox và Chrome.
Sean Latham

3

JavaScript (console.log), 168 166

(Khoảng trắng chỉ dành cho khả năng đọc)

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)

Cảm ơn tất cả mọi người về các mẹo chơi gôn - đã cố gắng giảm xuống còn 219. Đừng nghĩ rằng nó sẽ xuống thấp hơn nhiều.

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

Yêu cầu bao gồm:

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

Nếu anh ta sẵn sàng sử dụng C89, anh ta cũng có thể bỏ qua tất cả các bao gồm. Không có trường hợp nào trong mã này khi khai báo ngầm về các cuộc gọi lên.
Joshua

@Nax; điều đó đưa tôi đến 263 - và tôi đã bao gồm cả. Cảm ơn.
DreamWar Warrior

@Joshua - Hệ thống và bộ nhớ 64 bit có thể có vấn đề, nhưng ... nếu không, có thể không. Dù bằng cách nào, hầu hết mọi người loại bỏ bao gồm, vì vậy tôi cũng vậy.
DreamWar Warrior

Đó thực sự là 262 ký tự, bạn không cần dòng mới.
nyuszika7h

Bạn có thể sử dụng 32thay vì ' '42thay vì '*':)
Quentin

3

Haskell, 153 148

Thẳng thắn, không có mánh khóe, chỉ đơn giản là chơi 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]

Các %nhà điều hành vẽ một dòng duy nhất, đối số của nó đầu tiên là một Stringchiều dài 3 có chứa các đường biên giới và các nhân vật điền vào dòng đó (bây giờ giả sử đúng 3 Chars, tiết kiệm 5 byte), thứ hai, một Int, quy định cụ thể một nửa số ký tự điền. Kết hợp mẫu, liên kết và nối thêm được sử dụng kết hợp để lưu byte bằng cách chăm sóc "keo" giữa CharString. Trong phiên bản thứ hai này, tôi cũng đã tạo #vô hạn và giới thiệu một take 85để làm cho nó hữu hạn một lần nữa (không có byte nào được lưu, thật không may).

Các #nhà điều hành sẽ tạo ra chuỗi cho nlập luận để %yêu cầu cho các cây: [0..3], [3..7], ...nối.

&chỉ là một tốc ký ngắn gọn replicate, xảy ra ba lần.

Cây được đặt cùng nhau trong dòng cuối cùng, dòng mới được thêm vào bởi 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

Toán học 191 178

Để chắc chắn không phải là giải pháp tốt nhất:

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

Không tính dòng mới. Mathicala nghiêng đầu ra, vì nó không có cùng chiều rộng cho một khoảng trắng như đối với "*" và "/". Nhưng kết quả là chính xác.


(đó là môn đánh gôn đầu tiên của tôi)
freddieknets

2

Java - 286

Golf đầu tiên của tôi.

Chơi gôn

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

Ung dung:

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

Kiểm tra tại đây


2

Con trăn 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+'|'

Các phiên bản khác tôi đã thử bao gồm:

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

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

Dịch thuật 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+"|")

Không phải là achức năng được xác định trong Python của bạn tương đương với +trong danh sách?
Trái cây Esolanging

@EsolangingFnut Nó gần, nhưng không chính xác: <list>+<str>không phải là một hoạt động hợp lệ, nhưng tôi có thể dễ dàng sử dụng ["-"]*11+["_"]. Tôi quyết định xác định chức năng của riêng mình để dịch chính xác hơn những gì Pyth đang làm.
hakr14

Được rồi, điều đó có ý nghĩa.
Trái cây 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
Tại sao tôi không ngạc nhiên khi thấy một giải pháp Groovy khá ngắn. Ấn tượng của tôi về Groovy là nó được thực hiện bởi một lập trình viên Java ghét gõ.
Almo

1

C, 194

Mã này là một mớ hỗn độn nóng và chắc chắn có thể được chơi golf nhiều hơn. Tuy nhiên, đây là một cơ hội để thử một vài điều mà tôi chưa bao giờ làm trước đây: sử dụng một nghĩa đen cho một chuỗi các dấu sao và sử dụng công cụ xác định chiều rộng *có chuỗi 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

Vợt 223 220 211 204 198

Chơi gôn

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

Ung dung:

(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

Hội (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

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

Chỉnh sửa: Đã lưu ~ 100 byte bằng cách mã hóa cứng từng ký tự trong một thanh ghi và chỉ cần ghi vào ngăn xếp, sau đó lạm dụng thực tế là MIPS không có các loại nên cho phép ẩn từ chuỗi ascii.
Chỉnh sửa 2: loại bỏ phân bổ ngăn xếp trùng lặp. ( addi $sp -4) Rất tiếc!
Chỉnh sửa 3: viết lại, vô tình làm cho gốc cây 1 ký tự quá ngắn. (36 thay cho 35). Đã sửa. -1 Byte bằng cách đặt t8 thành 0 và phân nhánh ít hơn thay vì bằng nhau. cũng yêu cầu tôi sắp xếp lại các ops, điều không may làm cho thời gian thực hiện mất hơn 3 opcodes.
Chỉnh sửa 4: -4 byte bằng cách sử dụng $ 8 và $ 9 thay vì $ t0 và $ t1. chúng có nghĩa tương tự, nhưng $ t0 dễ đọc hơn. thật không may, tất cả các thanh ghi t khác có cùng độ dài khi được viết độc đáo ($ t2 == $ 10, nhưng cả hai đều có 3 ký tự), vì vậy phần còn lại là một rửa. Tôi có thể (về lý thuyết) sử dụng các thanh ghi 'a' còn lại (5-7. Tòa nhà in sử dụng 4), nhưng afaik hành vi không được xác định khi sử dụng tòa nhà.

Không phải là tốt nhất tại MIPS, nhưng sau khi giải tỏa lương tâm của tôi về vấn đề này trong thảo luận meta, tôi đang gửi chúng. MIPS không được thiết kế cho việc này (không có đầu ra, không có vòng lặp) nhưng thật thú vị khi làm điều này có lẽ bất chấp điều đó.

Thật không may, tôi chưa tạo phiên bản nhận xét cho giải pháp mới này, nhưng bạn có thể xem phiên bản cũ, với tài liệu đầy đủ tại đây

Vui lòng nhận tín dụng và cải thiện câu trả lời này nếu bạn có thể đánh bại nó - tôi có thể thiếu một vài tối ưu hóa ở đây và đó.


vì giải pháp này không yêu cầu .data, nên có thể chuyển đổi thành nhị phân (được biên dịch) và lưu một loạt byte. tuy nhiên, SPIM không hỗ trợ nó, vì vậy hãy gọi.
Andrew Baumher

Ngoài ra, tôi không chắc chắn liệu tốc ký addi $sp -4thực sự addi $sp $sp -4là từ SPIM hay MIPS nói chung, vì vậy nếu có ai làm vậy, xin vui lòng cho tôi biết.
Andrew Baumher

0

Rắn hổ mang - 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+'|________|'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.