Gib das legendäre Yggdrasil aus


39

Ihre Aufgabe ist es, eine Darstellung des legendären Lebensbaums Yggdrasil auszugeben .

Sie müssen ein Programm schreiben, dessen Ausgabe genau das ist:

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

Es gibt kein nachgestelltes Leerzeichen. Die letzte Zeile kann weggelassen werden.

Um die Überprüfung zu vereinfachen, sind hier die MD5-Summen der erwarteten Ausgabe:

  • 374899e56bc854d04639c43120642e37 - Keine neue Zeile am Ende.
  • 03afb81d960b8e130fe2f9e0906f0482 - Newline am Ende

Es gelten Standardlücken. Das ist Code-Golf, also gewinnt der kleinste Eintrag in Bytes!


10
Siehe auch : codegolf.stackexchange.com/q/15860/15599 . Nax, du solltest im Marketing arbeiten. Jeder Haushalt wird sich zu Weihnachten ein Yggdrasil wünschen. Wie ich sehe, haben Sie auch die Frage nach der Graham-Nummer beantwortet. Sie müssen spitze Dinge mögen. Lassen Sie uns einige neue Namen für "Rakete" und "Eistüte" haben.
Level River St


4
@Nax: da der weltbaum früchte hat und angiospermen keine, und das ist eindeutig ein begrenzer irgendeiner beschreibung, sieht es leider so aus, als hättest du ein foto vom falschen baum gemacht: P
naught101

@Nax Hmm. Du hast Recht. Der Pedant (ich) hebt auf seinem eigenen Petard. Die MD5-Summen haben sich geändert.
Scott Leadley

1
Äh, zur Geschäftsordnung, Yggdrasil ist definitiv eine Esche in den Eddas, keine Tanne. Irgendwie gefällt das .
Alex P

Antworten:


22

Golfscript, 84 77 76 75 72 Zeichen

Anderer Ansatz als bei Howard . Klicken Sie auf die Zeichenanzahl, um es zu versuchen.

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

Vielen Dank an Howard für das Speichern von 3 Zeichen!

Erklärung :

Dies ist mehr oder weniger ein einfacher Port meiner Python-Lösung . Nehmen Sie sich einige ausdrucksstarke Freiheiten (verwenden Sie benannte Variablen, anstatt die Stapelpositionen zu verfolgen, und printbehalten Sie die Dinge wirklich auf dem Stapel, ohne zu drucken):

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
Sie können den gleichen Zeilenumbruch-Trick wie in meiner Lösung verwenden. Anstatt '\\'ndie Newline in den String zu ziehen (+/- 0 Zeichen), muss der Backslash nicht mehr maskiert werden (-1 Zeichen).
Howard

1
Zwei weitere: 4*4+ist das Gleiche wie )4*und '_-'[=]kann geschrieben werden '_-'1/=, wodurch die letzte +veraltet ist.
Howard

3
Eine Erklärung könnte nützlich sein ...? ist das zu viel verlangt?

@professorfish: Kommt gleich!
Claudiu

Benötigst du kein ';' Hier? Andernfalls gibt es zwei nachgestellte Zeilenumbrüche, da golfscript standardmäßig einen hinzufügt.
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 ermöglicht Steueranweisungen, Verkettung und variable Dereferenzierung. All dies ist beim Styling nützlich, aber beim Golfen ausführlich.


wird generiert in:

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

die resultierende Seite


1
Auf CodeGolf sehen Sie nicht viele HTML / CSS-Lösungen. Gute Arbeit.
Mordred

16

CJam , 62 Bytes

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

Probieren Sie es online!

Wie es funktioniert

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
Ich muss CJam anstelle von GolfScript verwenden ...
Claudiu

Was macht CJam-Code so kompakt? Passen die üblichen Funktionen gut zusammen oder gibt es einen Supertrick? Oder ist es eigentlich nicht CJam, sondern CJam-Programmierer?
Vi.

2
@Vi .: Es ist eine Mischung aus beidem. 1. CJam ist stapelbasiert, sodass Sie normalerweise ohne Verwendung von Variablen davonkommen. 2. Alle eingebauten Namen sind höchstens zwei Zeichen lang. Aus diesem Grund benötigen Sie bis auf einige Sonderfälle kein Leerzeichen. 3. Auch Einsendungen in Golfsprachen spielen nicht selbst Golf. Meine GolfScript / CJam-Programme sind jetzt viel kürzer als früher.
Dennis

Ein Vorschlag für CJam wäre die Verwendung der ASCII-Codes 128-256 für eine ganze Reihe weiterer eingebauter Funktionen.
Ich

@Claudiu: Nun, das liegt an seinem Schöpfer. Wenn ich meine eigene Golfsprache entwerfen würde, würde ich sie vermutlich bitbasiert machen oder alle Anweisungen arithmetisch codieren.
Dennis

15

GolfScript, 79 Zeichen

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

Probieren Sie den Code hier aus . Beachten Sie, dass die Zeilenumbrüche in diesem Code nicht optional sind


24
Eine mehrzeilige GolfScript-Lösung? Ich hätte nicht gedacht, dass ich den Tag sehen würde!
Ingo Bürk

12

Python, 148 129 126 121 Zeichen

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

Vielen Dank an Falko für das Speichern von 3 Charakteren und an Flornquake für das brillante Speichern von weiteren 5!


1
Pythons Charakter-Multiplikation ist für diese Herausforderung etwas zu perfekt ...
Sean Latham

Warten Sie, bis Sie meine Golfscript-Lösung sehen ... = P
Claudiu

2
Dient '**'*jzum Speichern von 3 Zeichen. Abgesehen davon konvergiert meine Lösung zum exakt gleichen Code. :)
Falko

1
Sie können die letzte Zeile kürzer machen, indem Sie schreiben for c in'-'*11+'_':print' '*35+'|'+c*8+'|'.
Flornquake

@flornquake: schön! sehr klug
Claudiu

11

Bash, 236 197 193

10 Byte Code + 1 Byte Dateiname + 182 Byte Datendatei = insgesamt 193 Byte

zcat y 2>j

Erläuterung

yist eine Datei, die Yggdrasil enthält, ohne abschließende neue Zeile, komprimiert mit dem zopfli- Algorithmus (aufgerufen als zopfli --i64) und dann mit den letzten 8 Bytes entfernt. zopfli ist mit gzip kompatibel, daher kann ich die Datei mit Standard-Bash-Dienstprogrammen für gzip dekomprimieren. Die Größe der Datendatei beträgt 182 Bytes (229 Bytes bei Verwendung von normalem gzip). Die Größe des ursprünglichen Yggdrasil ohne die nachfolgende neue Zeile beträgt 5876 Byte.

Das Entfernen der letzten 8 Bytes führt zu Fehlermeldungen, die durch das Senden von Standardfehlern an eine aufgerufene Datei unterdrückt werden j. Falls jvorhanden, wird es überschrieben.

Die base64 von yist (verwenden base64 -d, um die Originaldatei zu erhalten):

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

Und die md5sum ist:

4a049a80241160cdde0a3cbca323b7f2

2
Mein Finger juckte es, als ich den Code sah, auf die Schaltfläche "Löschen" zu drücken, bis ich die Anzahl der Zeichen und die Erklärung gelesen hatte. : P
Türklinke

2
Sie können ungefähr 30 Bytes sparen, indem Sie zopfli verwenden, um die komprimierte Datei zu erstellen. "zopfli --i100 y" liefert eine 190-Byte-Datei, die zcat dekomprimieren kann.
Glenn Randers-Pehrson

1
Und noch ein paar mehr, wenn Sie die letzten 10 Bytes löschen und STDERR schließen.
Dennis

@ GlennRanders-Pehrson, danke für diesen Hinweis. Ich habe auch meine Antwort auf "Molare Massen von Verbindungen" unter codegolf.stackexchange.com/a/35613/16402 bearbeitet , um zopfli zu verwenden und 37 Byte zu sparen

@Dennis es stellte sich heraus, 8 Bytes zu sein (mehr und Bits des Stammes von Yggdrasil würden fehlen), danke

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 (und leicht entwirrt):

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

Rubin - 100

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

Setzt Auto-Flattens, so dass wir alle Zeilen auch in verschachtelten Arrays sammeln können. Benötigt Ruby 1.9

Versuche es bei ideone


Ich denke, es braucht einige führende Räume. Funktioniert auch mit Ruby 1.9, jedoch nicht in 1.8.
Scott Leadley

7

PowerShell 104 101

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

6

C # 258 234 Byte

Vielen Dank an einige nervige Benutzer für die vorgeschlagenen Änderungen, die die String.PadLeft-Methode gut nutzen!

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

Der Code ist ziemlich einfach, nicht viel zum Golfen übrig.

Formatierter Code:

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

Verwenden \rist hier sinnlos. Das ist Code Golf.
Nyuszika7h

3
@ nyuszika7h in der Tat, aber es ist in der formatierten Kopie für eine gute Maßnahme enthalten, so dass Menschen mit Notepad leichter den Ruhm des Yggdrasil sehen können (es ist nicht in der Partitur enthalten)
VisualMelon

Oh, ich verstehe. Windows ... Fühlen Sie sich frei, um meine Bearbeitung dann zu beheben.
Nyuszika7h

@ Nyuszika7h danke für den Hinweis, dass die Syntax-Hervorhebung nicht richtig war
VisualMelon

6

J 98 88 84 75

(85 11 1#3 4$' /*\ |-| |_|')#"1~(39&-,1,+:,1:)"0(12$4),~85(-4&+#-:*>:)&i.10

4

Perl, 127

for$i(0..9){for$j($i*3..3+$i*4){print" "x(39-$j),"/","*"x($j*2),"\\\n";}}for$i(0..11){print" "x35,"|",($i>10?"_":"-")x8,"|\n";}

Ungolfed:

for $i (0..9) {
  for $j ($i*3..3+$i*4) {
    print " "x(39-$j) , "/" , "*"x($j*2) , "\\\n";
  }
}
for $i (0..11) {
  print " "x35 , "|" , ($i>10?"_":"-")x8 , "|\n";
}

Ersetzen Sie $ i durch $ _ und speichern Sie 4 Zeichen.
Choroba

4

Ruby - 139 129 126 123 121

Hoisted "setzt" außerhalb der Array-Erstellung (Vorschlag von Bitpwner).

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


Ungolfed ("setzt" ungehißt):


# 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 Ich denke, das hat seine eigene Antwort verdient. Tue es.
Scott Leadley

4

PHP 223 202 181 160 156

Bearbeiten Ich habe herausgefunden, wie man eine Funktion mit einer Variablen aliasiert und war in der Lage, einige weitere Zeichen abzuschneiden. Diese str_repeatFunktion war sehr ausführlich

Edit 2: Danke an alle für die Vorschläge!

Golf gespielt:

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

Lesbar:

    <?

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

Ausgabe: http://brobin.me/yggdrasil.php


Sie können 6 Zeichen speichern , indem Klammern zu entfernen um (39-$j), ($j*2)und ($i==11). -2 durch Ersetzen \ndurch echte neue Zeilenzeichen (PHP erlaubt es in Buchstaben). -5 Zeichen durch Ersetzen (beider) for($i=0;$i<12;$i++)mit for($i=12;$i-->0;)und $i==11mit $i==0.
Sebcap26

Danach können Sie auch ersetzen können $s(($i==0?'_':'-'),8)mit $s($i?'-':'_',8). (==> -5 Zeichen)
sebcap26

-1 Zeichen durch Ersetzen $s('*',$j*2)durch $s('**',$j). Ich denke, das ist die letzte Verbesserung, die ich finden kann.
Sebcap26

-2 ($j*2)im inneren für zu ändern ($j++*2)und $j++von for()Argumenten zu entfernen
avall

@ sebcap26 for($i=12;$i-->0;)kann auf for($i=12;$i--;)- weitere 2 Zeichen gekürzt werden .
Avall

3

Delphi 429

Ich werde versuchen, mich später zu verbessern.
Golf gespielt

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 versteckt doppelte console.logs, verwenden Sie stattdessen 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('_'))

Verwenden Sie for(i=0;i++<39-w;)statt for(i=0;i<39-w;++i)und so weiter. Auch p=console.loganstelle von c=consoleund panstelle von c.log(obwohl ich letzteres nur in Node.js getestet habe, funktioniert es in Firefox nicht). Dies spart 12 Bytes.
Nyuszika7h

c=console.loghat auch in Chrome nicht funktioniert, also habe ich es nicht benutzt. Die for-Loop-Tricks sparen jedoch 7 Bytes.
Sean Latham

Normalerweise bin ich ziemlich vorsichtig , wenn es darum geht, mich zur Verwendung von MSIE zu ermutigen ...

Dies ist wahrscheinlich das erste Mal, dass ich den Satz "IE stattdessen verwenden" sehe. O_o Sie können das Verhalten von Chrome jedoch unterdrücken, indem Sie diesen Code einfach in der Konsole anstelle von einer Webseite ausführen.
Türklinke

Wenn Sie es auf einer Seite und in der Konsole ausführen, werden für mich in Firefox und Chrome dieselben Ergebnisse erzielt.
Sean Latham

3

JavaScript (console.log), 168 166

(Leerzeichen nur zur besseren Lesbarkeit)

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)

Vielen Dank an alle für die Golftipps - ich habe es geschafft, sie auf 219 zu senken.

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

Erforderlich beinhaltet:

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

Wenn er bereit ist, C89 zu verwenden, kann er auch alle Includes weglassen. In diesem Code gibt es keinen Fall, in dem eine implizite Deklaration bei einem Anruf fehlschlägt.
Joshua

@Nax; das bringt mich auf 263 - und ich zog inklusive raus. Vielen Dank.
DreamWarrior

@Joshua - 64-Bit-Systeme und Memset könnten problematisch sein, aber ... ansonsten vielleicht nicht. In jedem Fall entfernen die meisten Leute die Includes, also habe ich es auch getan.
DreamWarrior

Tatsächlich sind es 262 Zeichen, Sie brauchen keine abschließende Zeile.
Nyuszika7h

Sie können 32anstelle von ' 'und 42anstelle von '*':) verwenden
Quentin

3

Haskell, 153 148

Geradlinig, keine Tricks, nur einfaches Golfen:

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

Der %Operator zeichnet eine einzelne Zeile, wobei das erste Argument eine StringLänge von 3 ist, die die Rahmen und die Füllzeichen in dieser Zeile enthält (jetzt werden genau 3 Chars angenommen und 5 Bytes gespeichert). Das zweite Argument und Intgibt die Hälfte der Anzahl der Füllzeichen an. Pattern Matching, Consing und Appending werden in Kombination verwendet, um Bytes zu sparen, indem auf den "Kleber" zwischen Charund geachtet wird String. In dieser zweiten Version habe ich auch #unendlich gemacht und ein eingeführt take 85, um es wieder endlich zu machen (leider werden keine Bytes gespeichert).

Der #Operator erstellt die Reihenfolge für das nArgument, %die für den Baum erforderlich ist: [0..3], [3..7], ...verkettet.

&ist nur eine Infix-Abkürzung für replicate, die dreimal vorkommt.

Der Baum wird in der letzten Zeile zusammengefasst, die Zeilenumbrüche werden von hinzugefügt unlines.



2

Lua - 164

a=' 'for i=0,9 do for j=i*3,3+i*4 do print(a:rep(39-j)..'/'..(('*'):rep(j*2))..'\\')end end for i=0,11 do print(a:rep(35)..'|'..((i>10 and'_'or'-'):rep(8))..'|')end

2

Mathematica 191 178

Mit Sicherheit nicht die beste Lösung:

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

Zeilenumbrüche nicht mitgezählt. Mathematica verzerrt die Ausgabe, da für Leerzeichen nicht die gleiche Breite verwendet wird wie für "*" und "/". Aber das Ergebnis ist richtig.


(Es ist mein erstes Golf)
Freddieknets

2

Java - 286

Mein erster Golf.

Golf gespielt:

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

Hier testen


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

Andere Versionen, die ich ausprobiert habe, sind:

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

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

Probieren Sie es online!

Python 3 Übersetzung:
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+"|")

aEntspricht die in Ihrem Python definierte Funktion nicht der in +Listen?
Esolanging Fruit

@EsolangingFruit Es ist in der Nähe, aber nicht genau: <list>+<str>ist keine gültige Operation, aber ich könnte es genauso einfach verwenden ["-"]*11+["_"]. Ich habe beschlossen, meine eigene Funktion zu definieren, um genauer zu übersetzen, was Pyth tatsächlich tut.
hakr14

Okay, das macht Sinn.
Esolanging Fruit

2

Powershell, 88 Bytes

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
Warum wundert es mich nicht, eine ziemlich kurze Groovy-Lösung zu sehen? Mein Eindruck von Groovy war, dass es von einem Java-Programmierer gemacht wurde, der das Tippen hasste.
Almo

1

C 194

Dieser Code ist ein heißes Durcheinander und kann definitiv mehr Golf gespielt werden. Trotzdem bot sich die Gelegenheit, ein paar Dinge auszuprobieren, die ich noch nie zuvor getan hatte: ein Literal für eine Sternchenfolge und den Breitenbezeichner *mit einer Zeichenfolge in 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

Schläger 223 220 211 204 198

Golf gespielt:

(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

Assembly (MIPS, SPIM) , 768 671 659 655 654 Bytes

.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

Probieren Sie es online!

Bearbeiten: ~ 100 Bytes werden gespeichert, indem jedes Zeichen in einem Register fest codiert und einfach in den Stapel geschrieben wird. Anschließend wird die Tatsache missbraucht, dass MIPS keine Typen hat, sodass implizites Wort in ASCII-Zeichenfolge zulässig ist.
Edit 2: Doppelte Stapelzuordnung entfernt. ( addi $sp -4) Ups!
Edit 3: Beim Umschreiben wurde das Zeichen für Baumstumpf 1 versehentlich zu kurz. (36 statt 35). Fest.
Bearbeiten Sie 4: -4 Bytes mit $ 8 und $ 9 anstelle von $ t0 und $ t1. Sie bedeuten dasselbe, aber $ t0 ist leichter zu lesen. Leider haben alle anderen t-Register die gleiche Länge, wenn sie gut geschrieben sind ($ t2 == $ 10, aber beide sind 3 Zeichen). Der Rest ist also eine Wäsche. Ich könnte (theoretisch) die verbleibenden 'a'-Register verwenden (5-7. Print syscall verwendet 4), aber afaik das Verhalten ist nicht definiert, wenn syscall verwendet wird.
-1 Byte durch Setzen von t8 auf 0 und Verzweigen auf less than anstatt on equal. Außerdem musste ich die Add-Ops neu anordnen, was leider dazu führte, dass die Ausführungszeit satte 3 Opcodes länger dauerte.

Nicht die besten bei MIPS, aber nachdem ich in einer Metadiskussion mein Gewissen davon geklärt habe, reiche ich sie ein. MIPS ist nicht dafür ausgelegt (keine Ausgabe, keine for-Schleifen), aber es macht ziemlich Spaß, dies vielleicht trotzdem zu tun.

Leider habe ich keine kommentierte Version für diese neue Lösung erstellt, aber Sie können die alte Version mit der vollständigen Dokumentation hier anzeigen

Nehmen Sie sich die Ehre und verbessern Sie diese Antwort, wenn Sie sie übertreffen können. Vermutlich fehlen hier und da einige Optimierungen.


Da für diese Lösung keine .data-Dateien erforderlich sind, können Sie in Binärdateien konvertieren (kompilieren) und eine Reihe von Bytes speichern. SPIM unterstützt dies jedoch nicht.
Andrew Baumher

Ich bin mir auch nicht sicher, ob die Abkürzung addi $sp -4wirklich addi $sp $sp -4von SPIM oder MIPS stammt. Wenn es also jemand anderes tut, lassen Sie es mich bitte wissen.
Andrew Baumher

0

Cobra - 166 228 260

class P
    def main
        for x in 10,for n in 4+x,print' '.repeat(39-x*3-n)+'/['**'.repeat(x*3+n)]\\'
        w=' '.repeat(35)
        print'[w]|--------|\n'.repeat(11)+w+'|________|'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.