输出传奇的Yggdrasil


39

您的任务是输出传奇生物树Yggdrasil的表示形式

您必须编写一个程序,其输出正是这样的:

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

没有尾随空格。最后的换行符可以省略。

为了使检查更容易,以下是预期输出的md5总和:

  • 374899e56bc854d04639c43120642e37 -结尾没有换行符。
  • 03afb81d960b8e130fe2f9e0906f0482 -换行符结尾

有标准漏洞。这是代码高尔夫球,因此以字节为单位的最小条目将获胜!


10
相关:codegolf.stackexchange.com/q/15860/15599。纳克斯,你应该从事市场营销工作。这个圣诞节,每个家庭都会想要一台Yggdrasil。我看到您也回答了格雷厄姆的电话号码问题。您必须喜欢尖锐的东西。让我们为“火箭”和“冰淇淋蛋筒”添加一些新名称。
级圣河


4
@Nax:由于世界树上有果实,而被子植物则没有,这显然是某种描述的局限性,不幸的是,您好像拍了一张错误的树的照片:P
naught101

@纳克斯嗯。你是对的。那个学徒(我)被吊在他自己的花坛上。md5sums已更改。
Scott Leadley 2014年

1
错了,从程序上讲,Yggdrasil绝对是eddas中的一棵灰树,而不是一棵枞树。有点像这样
Alex P

Answers:


22

Golfscript,84 77 76 75 72个字符

霍华德的方法不同。单击字符数进行尝试。

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

感谢霍华德节省了3个字符!

说明

这或多或少是我的Python解决方案的直接移植。获得一些表达自由(使用命名变量而不是跟踪堆栈位置,并且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个字符),现在不再需要转义反斜杠(-1个字符)。
2014年

1
还有两个:4*4+与相同)4*'_-'[=]可以写入'_-'1/=,这使得最后一个+过时。
2014年

3
解释可能有用...?这太多了吗?

@professorfish:马上来!
2014年

您不需要结尾的';' 这里?否则,将有两条尾随换行符,因为默认情况下golfscript加一。
Nabb 2014年

21

哈姆萨斯

37 + 277 = 314

哈姆:

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

萨斯:

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允许控制指令,连接和变量取消引用。所有这些在样式设计时都很有用,但在打高尔夫球时却很冗长。


生成为:

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
您在CodeGolf上看不到大量的HTML / CSS解决方案。不错的工作。
2014年

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程序现在比以前要短很多。
丹尼斯2014年

对于CJam的建议是对整个内置插件集使用ASCII码128-256。有一些特殊的编辑器
克劳迪乌

@Claudiu:好吧,这取决于它的创造者。如果我设计了自己的高尔夫语言,我想我会使其以位为基础或对所有指令进行算术编码。
丹尼斯2014年

15

GolfScript,79个字符

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

这里尝试代码。请注意,此代码中的换行符不是可选的


24
多行GolfScript解决方案?我没想到我会看到这一天!
IngoBürk2014年

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
Python的字符乘法对于这个挑战来说太完美了……
肖恩·拉瑟姆

等到您看到我的golfscript解决方案... = P
Claudiu

2
使用'**'*j保存3个字符。除此之外,我的解决方案收敛到完全相同的代码。:)
Falko

1
您可以通过编写使最后一行更短for c in'-'*11+'_':print' '*35+'|'+c*8+'|'
flornquake

@flornquake:太好了!非常聪明
Claudiu 2014年

11

重击 236197 193

10个字节的代码+ 1个字节的文件名+ 182个字节的数据文件=总共193个字节

zcat y 2>j

说明

y是一个包含Yggdrasil的文件,没有尾随新行,使用zopfli算法(称为zopfli --i64)压缩,然后删除最后8个字节。zopfli与gzip兼容,因此我可以使用为gzip设计的标准Bash实用程序解压缩文件。数据文件的大小为182字节(使用常规gzip时为229字节)。不含尾随新行的原始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
门把手

2
使用zopfli制作压缩文件可以节省大约30个字节。“ zopfli --i100 y”产生一个190字节的文件,zcat可以将其解压缩。
2014年

1
还有一些,如果删除最后10个字节并关闭STDERR。
丹尼斯

@ GlennRanders-Pehrson感谢您指出这一点,我还编辑了“化合物的摩尔质量”的答案codegolf.stackexchange.com/a/35613/16402使用zopfli,节省了37个字节

@Dennis竟然是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("|"));}

松开(略松开):

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+?\\}}

放置自动展平,因此我们甚至可以嵌套数组的形式收集所有行。需要Ruby 1.9

尝试ideone


我认为它需要一些领导空间。另外,可与Ruby 1.9一起使用,但不适用于1.8。
Scott Leadley 2014年

7

的PowerShell 104 101

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

6

C#258 234bytes

感谢一些讨厌的用户,建议您充分利用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 2014年

3
@ nyuszika7h确实如此,但它已包含在格式化副本中,以确保一切正常,以便使用记事本的人可以更轻松地看到Yggdrasil的荣耀(分数中未包含)
VisualMelon 2014年

哦,我懂了。Windows ...随时修复我的编辑。
nyuszika7h 2014年

@ nyuszika7h感谢您指出语法突出显示不正确
VisualMelon 2014年

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

取消高尔夫:

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

在数组创建之外悬挂“输入”(来自bitpwner的建议)。

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


放空(“放空”):


# 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 2014年

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


通过删除和(39-$j),可以节省6个字符。-2替换为真正的换行符(PHP允许其在文字中使用)。-5字符通过替换(两者)与和与。($j*2)($i==11)\nfor($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()参数中删除
2014年

@ sebcap26 for($i=12;$i-->0;)可以缩写为for($i=12;$i--;)-另外2个字符。
2014年

3

德尔福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.

不打高尔夫球

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.log的,请改用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('_'))

取消高尔夫:

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=consolep代替c.log(尽管我仅在Node.js中测试了后者,但在Firefox中不起作用)。这样可以节省12个字节。
nyuszika7h 2014年

c=console.log在Chrome中也不起作用,所以我没有使用它。for循环技巧可节省7个字节。
肖恩·拉瑟姆

我通常对任何鼓励我使用MSIE 的东西都非常警惕...

这很可能是我第一次见过“使用IE代替”这一短语。O_o但是,您可以通过简单地在控制台中而不是从网页中运行此代码来抑制Chrome的行为。
门把手

在页面和控制台中运行它在Firefox和Chrome上为我产生相同的结果。
肖恩·拉瑟姆

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,则也可以省略所有包含内容。在此代码中,没有任何情况会在调用时隐式声明。
2014年

@Nax; 这样我就达到263了-并且我退出了包含项。谢谢。
DreamWarrior 2014年

@Joshua-64位系统和memset可能有问题,但是...否则,可能没有问题。无论哪种方式,大多数人都删除了包含,我也这样做了。
DreamWarrior 2014年

它实际上是262个字符,不需要结尾的换行符。
nyuszika7h 2014年

您可以使用32替代' '42取代 '*':)
昆汀

3

哈斯克尔,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 CharS,保存5个字节),第二,一个Int的填充字符,指定数目的一半。模式匹配,利弊-ING和追加组合使用,以便通过照顾“胶水”的之间,以节省字节CharString。在第二个版本中,我也进行了#无穷大处理,并引入了a take 85使它再次成为无穷大(不幸的是,没有保存字节)。

#操作创建的序列n参数%为树需要:[0..3], [3..7], ...串联。

&只是infix的简写形式replicate,它出现了3次。

树放在最后一行,换行符由添加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

数学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使输出倾斜,因为空白的宽度与“ *”和“ /”的宽度不同。但是结果是正确的。


(这是我的第一次高尔夫
比赛

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

取消高尔夫:

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

蟒蛇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您的Python中定义的函数不等同+于列表吗?
硕果累累'18

@EsolangingFruit它很接近,但不完全是:<list>+<str>这不是有效操作,但是我可以很容易地使用["-"]*11+["_"]。我决定定义自己的函数,以更准确地翻译Pyth实际在做什么。
hakr14

好的,那很有道理。
Esolanging Fruit '18

2

Powershell,88字节

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
为什么看到一个简短的Groovy解决方案我并不感到惊讶。我对Groovy的印象是,它是由讨厌打字的Java程序员完成的。
Almo 2014年

1

194

此代码是一团糟,绝对可以打出更多。不过,这仍然是一个尝试一些以前从未做过的事情的机会:对字符串中的星号使用文字,对中的字符串使用宽度说明*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"))))))

取消高尔夫:

(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字符太短。(从35改为36)。固定。
编辑4: -4字节通过使用$ 8和$ 9而不是$ t0和$ t1。它们的意思相同,但是$ t0更容易阅读。不幸的是,所有其他t寄存器在写得很好时都具有相同的长度($ t2 == $ 10,但都为3个字符),因此其余的都是冲洗。我可以(理论上)使用其余的“ a”寄存器(5-7。print syscall使用4),但是使用syscall时,行为没有定义。
通过将t8设置为0并以小于小于而不是相等的方式分支,得到-1字节。还要求我对添加操作进行重新排序,不幸的是,这使执行时间花费了多达3个操作码。

在MIPS上并不是最好的,但是在meta讨论中明确了我的良心之后,我提交了它们。MIPS不是为此目的而设计的(没有输出,没有for循环),但是尽管如此,还是很有趣的。

不幸的是,我尚未为此新解决方案创建带注释的版本,但是您可以在此处查看完整版本的旧文档

如果可以克服的话,请放心相信并改进此答案-我可能在这里和那里都缺少一些优化。


由于此解决方案不需要.data,因此可以转换为二进制(已编译)并节省一堆字节。但是,SPIM不支持它,所以请耐心等待。
Andrew Baumher

另外,我不确定addi $sp -4通常是addi $sp $sp -4SPIM还是MIPS 的简写,所以如果有人这样做,请告诉我。
安德鲁鲍默

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+'|________|'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.