Stampa il leggendario Yggdrasil


39

Il tuo compito è produrre una rappresentazione del leggendario albero della vita, Yggdrasil .

Devi scrivere un programma il cui output sia esattamente questo:

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

Non c'è spazio bianco finale. La nuova riga finale può essere omessa.

Per semplificare il controllo, ecco le somme md5 dell'output previsto:

  • 374899e56bc854d04639c43120642e37 - Nessuna nuova riga alla fine.
  • 03afb81d960b8e130fe2f9e0906f0482 - Newline alla fine

Si applicano scappatoie standard. Questo è code-golf, quindi vince la voce più piccola in byte!


10
Correlato: codegolf.stackexchange.com/q/15860/15599 . Nax, dovresti lavorare nel marketing. Ogni famiglia vorrà un Yggdrasil questo Natale. Vedo che hai risposto anche alla domanda del numero di Graham. Devi amare le cose appuntite. Diamo alcuni nuovi nomi per "razzo" e "cono gelato".
Level River St


4
@Nax: dal momento che l'albero del mondo ha frutti, e le angiosperme no, e questo è chiaramente un fattore di confinazione di qualche descrizione, purtroppo sembra che tu abbia fatto una foto dell'albero sbagliato: P
naught101

@Nax Hmm. Hai ragione. Il pedante (me) è sollevato sul suo stesso petardo. Gli md5sums sono cambiati.
Scott Leadley,

1
Ehm, punto di ordine, Yggdrasil è sicuramente un frassino negli edda, non un abete. Piace così .
Alex P,

Risposte:


22

Golfscript, 84 77 76 75 72 caratteri

Approccio diverso da quello di Howard . Fai clic sul conteggio dei personaggi per provarlo.

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

Grazie a Howard per aver salvato 3 personaggi!

Spiegazione :

Questa è più o meno una porta semplice della mia soluzione Python . Prendendo alcune libertà espressive (usando variabili nominate invece di tenere traccia delle posizioni dello stack, e in printrealtà sta mantenendo le cose nello stack, non stampando):

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
Puoi usare lo stesso trucco di interruzione di linea della mia soluzione. Invece di '\\'ninserire la nuova riga nella stringa (+/- 0 caratteri) e ora la barra rovesciata non deve più essere salvata (-1 carattere).
Howard,

1
Altri due: 4*4+è lo stesso di )4*e '_-'[=]può essere scritto '_-'1/=che rende l'ultimo +obsoleto.
Howard,

3
una spiegazione potrebbe essere utile ...? È chiedere troppo?

@professorfish: In arrivo!
Claudiu,

Non hai bisogno di un trascinamento ';' Qui? Altrimenti ci saranno due nuove righe finali poiché golfscript di default ne aggiunge una.
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 consente direttive di controllo, concatenazione e dereference variabile. Tutto ciò è utile durante lo styling, ma dettagliato durante il golf.


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

la pagina risultante


1
Non vedi un sacco di soluzioni HTML / CSS su CodeGolf. Bel lavoro.
Mordred,

16

CJam , 62 byte

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

Provalo online!

Come funziona

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
Devo iniziare a usare CJam invece di GolfScript ...
Claudiu,

Cosa rende il codice CJam così compatto? Sono solo le solite caratteristiche che si abbinano bene o c'è qualche super trucco? O in realtà non è CJam, ma programmatori CJam così?
Vi.

2
@Vi .: È un mix di entrambi. 1. CJam è basato sullo stack, quindi di solito vai via senza usare alcuna variabile. 2. I nomi di tutti i built-in sono lunghi al massimo due caratteri. Per questo motivo, non hai bisogno di spazi bianchi ad eccezione di alcuni casi speciali. 3. Anche i contributi in lingue golfistiche non si golfizzano da soli. I miei programmi GolfScript / CJam ora sono molto più brevi di quanto non fossero in passato.
Dennis,

Il suggerimento per CJam sarebbe di usare i codici ASCII 128-256 per un intero insieme di built-in. hanno un editore speciale che
Claudiu,

@Claudiu: Beh, dipende dal suo creatore. Se avessi progettato il mio linguaggio golfistico, penso che l'avrei reso basato su bit o codificato in modo aritmetico tutte le istruzioni.
Dennis,

15

GolfScript, 79 caratteri

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

Prova qui il codice . Si noti che le interruzioni di riga non sono facoltative in questo codice


24
Una soluzione GolfScript multilinea? Non pensavo che avrei visto il giorno!
Ingo Bürk,

12

Python, 148 129 126 121 caratteri

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

Grazie a Falko per aver salvato 3 personaggi e al terremoto per aver salvato brillantemente altri 5!


1
La moltiplicazione dei personaggi di Python è un po 'troppo perfetta per questa sfida ...
Sean Latham,

Aspetta di vedere la mia soluzione golfscript ... = P
Claudiu,

2
Utilizzare '**'*jper salvare 3 caratteri. A parte questo, la mia soluzione converge nello stesso identico codice. :)
Falko,

1
Puoi accorciare l'ultima riga scrivendo for c in'-'*11+'_':print' '*35+'|'+c*8+'|'.
terremoto del

@flornquake: bello! molto intelligente
Claudiu,

11

bash, 236 197 193

10 byte di codice + nome file a 1 byte + file di dati 182 byte = 193 byte totali

zcat y 2>j

Spiegazione

yè un file contenente Yggdrasil, senza una nuova riga finale, compresso con l' algoritmo zopfli (invocato come zopfli --i64) e quindi con gli ultimi 8 byte rimossi. zopfli è compatibile con gzip, quindi posso decomprimere il file con le utility standard di Bash progettate per gzip. La dimensione del file di dati è 182 byte (229 byte quando si utilizza gzip normale). La dimensione dell'originale Yggdrasil, senza la nuova riga finale, è di 5876 byte.

La rimozione degli ultimi 8 byte provoca messaggi di errore, che vengono eliminati inviando l'errore standard a un file chiamato j. Se jesiste, verrà sovrascritto.

La base64 di yè (usare base64 -dper ottenere il file originale):

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

E il md5sum è:

4a049a80241160cdde0a3cbca323b7f2

2
Avevo il desiderio di premere il pulsante "Elimina" quando ho visto il codice, fino a quando non ho letto il conteggio dei caratteri e la spiegazione. : P
Maniglia della porta

2
Puoi salvare circa 30 byte usando zopfli per creare il file compresso. "zopfli --i100 y" produce un file di 190 byte che zcat può decomprimere.
Glenn Randers-Pehrson,

1
E qualche altro se elimini gli ultimi 10 byte e chiudi STDERR.
Dennis,

@ GlennRanders-Pehrson grazie per averlo sottolineato, ho anche modificato la mia risposta a "Molar masses of compound" codegolf.stackexchange.com/a/35613/16402 per utilizzare zopfli, risparmiando 37 byte

@Dennis si è rivelato essere 8 byte (mancherebbero altri bit del bagagliaio di Yggdrasil), grazie

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 (e leggermente districato):

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

Rubino - 100

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

Appiattisce automaticamente, in modo da poter raccogliere tutte le linee anche in array nidificati. Ha bisogno di Ruby 1.9

Prova a ideone


Penso che abbia bisogno di alcuni spazi guida. Funziona anche con Ruby 1.9, ma non 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

Grazie ad un utente fastidioso per le modifiche suggerite facendo buon uso del metodo 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));}}

Il codice è piuttosto semplice, non molto lasciato al golf.

Codice formattato:

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

L'uso \rè inutile qui. Questo è il codice golf.
nyuszika7h

3
@nyuszika7h in effetti, ma è incluso nella copia formattata per buona misura in modo che le persone che usano il blocco note possano vedere più facilmente la gloria dello Yggdrasil (non è incluso nella partitura)
VisualMelon

Oh, capisco. Windows ... Sentiti libero di correggere la mia modifica allora.
nyuszika7h,

@nyuszika7h grazie per aver sottolineato che l'evidenziazione della sintassi non era corretta
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";
}

Sostituisci $ i con $ _ e salva 4 caratteri.
Choroba,

4

Rubino - 139 129 126 123 121

Hoisted "mette" al di fuori della creazione dell'array (suggerimento da bitpwner).

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


Ungolfed ("mette" senza montatura):


# 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 Penso che questo meriti la sua risposta. Fallo.
Scott Leadley,

4

PHP 223 202 181 160 156

Modifica Ho capito come alias una funzione con una variabile e sono stato in grado di tagliare altri caratteri. Quellastr_repeat funzione era davvero prolissa

Modifica 2: grazie a tutti per i suggerimenti!

golfed:

<?$s=str_repeat;for($i=-1;$i++<9;)for($j=$i*3;$j<4+$i*4;)echo$s(' ',39-$j).'/'.$s('**',$j++)."\\
";for($i=12;$i--;)echo$s(' ',35),'|'.$s($i?'-':'_',8)."|
";

Leggibile:

    <?

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

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


È possibile salvare i 6 caratteri, eliminando la parentesi intorno (39-$j), ($j*2)e ($i==11). -2 sostituendo \ncon caratteri di nuova riga reali (PHP lo consente in caratteri letterali). -5 caratteri sostituendo (entrambi) for($i=0;$i<12;$i++)con for($i=12;$i-->0;)e $i==11con $i==0.
sebcap26,

Successivamente puoi anche sostituire $s(($i==0?'_':'-'),8)con $s($i?'-':'_',8). (==> -5 caratteri)
sebcap26

-1 Carattere sostituendolo $s('*',$j*2)con $s('**',$j). Penso che sia l'ultimo miglioramento che posso trovare.
sebcap26,

-2 cambiando ($j*2)in inner per ($j++*2)e rimuovendo $j++dagli for()argomenti
avall

@ sebcap26 for($i=12;$i-->0;)può essere abbreviato in for($i=12;$i--;)- altri 2 caratteri.
avall

3

Delfi 429

Proverò a migliorare in seguito.
golfed

uses strutils,SysUtils,Classes;const a='|----';b='|____';c:array [0..9,0..1]of int32=((0,3),(3,7),(6,11),(9,15),(12,19),(15,23),(18,27),(21,31),(24,35),(27,39));var t:TStrings;i,j:integer;begin t:=tstringlist.Create;for I:=0to 9do for J:=c[i,0]to c[i,1]do t.Add('/'+StringOfChar('*',j));for I:=0to 10do t.Add(a);t.Add(b);for I:=0to t.Count-1do t[i]:=t[i].PadLeft(40)+ReverseString(t[i]).Replace('/','\');write(T.TEXT);readln;end.

ungolfed

uses
  strutils,SysUtils,Classes;
const
  a='|----';
  b='|____';
  c:array [0..9,0..1]of int32=((0,3),(3,7),(6,11),(9,15),(12,19),(15,23),(18,27),(21,31),(24,35),(27,39));
var
  t:TStrings;
  i,j:integer;
begin
  t:=tstringlist.Create;
  for I:=0to 9do
    for J:=c[i,0]to c[i,1]do
      t.Add('/'+StringOfChar('*',j));
  for I:=0to 10do
    t.Add(a);
  t.Add(b);
  for I:=0to t.Count-1do
    t[i]:=t[i].PadLeft(40)+ReverseString(t[i]).Replace('/','\');
  write(T.TEXT);
  readln;
end.

3

Javascript, 288 281

Chrome nasconde i duplicati console.log, usa invece 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('_'))

Utilizzare al for(i=0;i++<39-w;)posto di for(i=0;i<39-w;++i)e così via. Inoltre, p=console.loginvece di c=consolee pinvece di c.log(anche se ho provato solo quest'ultimo in Node.js, non funziona in Firefox). Ciò consente di risparmiare 12 byte.
nyuszika7h

c=console.lognon ha funzionato neanche in Chrome, quindi non l'ho usato. I trucchi del ciclo for consentono di risparmiare 7 byte.
Sean Latham,

Di solito sono abbastanza diffidente nei confronti di qualsiasi cosa mi incoraggi a usare MSIE ...

Questa è probabilmente la prima volta che vedo la frase "usa IE invece". O_o Tuttavia, puoi sopprimere il comportamento di Chrome semplicemente eseguendo questo codice nella console anziché da una pagina web.
Maniglia della porta

Eseguirlo in una pagina e nella console produce gli stessi risultati per me sia su Firefox che su Chrome.
Sean Latham,

3

JavaScript (console.log), 168 166

(Spazio bianco solo per leggibilità)

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)

Grazie a tutti per i suggerimenti sul golf: siamo riusciti a farlo scendere a 219. Non pensate che scenderà molto più in basso.

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

Richiesto include:

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

Se è disposto a usare C89, può omettere anche tutte le inclusioni. In questo codice non esiste alcun caso in cui la dichiarazione implicita sulla chiamata si rovina.
Giosuè,

@Nax; questo mi porta a 263 - e ho tirato fuori include. Grazie.
DreamWarrior,

@Joshua - I sistemi a 64 bit e il memset potrebbero essere problematici, ma ... altrimenti, forse no. Ad ogni modo, la maggior parte delle persone rimuove le inclusioni, così ho fatto anche io.
DreamWarrior,

In realtà sono 262 caratteri, non è necessaria la nuova riga finale.
nyuszika7h

Puoi usare al 32posto di ' 'e 42invece di '*':)
Quentin

3

Haskell, 153 148

Semplice, senza trucchi, solo 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]

L' %operatore traccia una sola riga, il cui primo argomento è aString di lunghezza 3 contenente i bordi e i caratteri di riempimento in quella linea (ora assumendo esattamente 3 Chars, salvando 5 byte), il secondo, an Int, specifica la metà del numero di caratteri di riempimento. La combinazione di modelli, il consing e l'aggiunta vengono utilizzati in combinazione per salvare i byte occupandosi della "colla" tra Chare String. In questa seconda versione, ho anche reso #infinito e introdotto un take 85per renderlo nuovamente finito (purtroppo nessun byte salvato).

Il # operatore crea la sequenza per l' nargomento %richiesto per l'albero: [0..3], [3..7], ...concatenato.

&è solo una scorciatoia per infix replicate, che si verifica tre volte.

L'albero viene messo insieme nell'ultima riga, le nuove righe vengono aggiunte da 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

Di sicuro non la soluzione migliore:

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

Senza contare le nuove righe. Mathematica distorce l'output, in quanto non occupa la stessa larghezza per uno spazio bianco come per "*" e "/". Ma il risultato è corretto.


(è il mio primo golf)
freddieknets

2

Java - 286

Il mio primo golf.

golfed:

class M{public static void main(String[]args){int i=0,a,f=0;String s="";for(;i++<11;){for(a=i*3-4;++a<i*4;){if(i>10){a=4;if(++f>12)break;}s+=s.format("%"+(40-a)+"s"+(a>0?"%0"+a+"d":"")+"%3$s",f>0?"|":"/",0,f>0?"|":"\\").replace("0",f<1?"**":f>11?"__":"--")+"\n";}}System.out.println(s);}}

Ungolfed:

class M {
    public static void main(String[] args) {
        int i=0,a,f=0;
        String s = "";
        for(;i++<11;){
            for(a=i*3-4;++a<i*4;a++){
                if(i>10){
                    a=4;
                    if(++f>12)break;
                }
                s+=s.format("%"+(40-a)+"s"+(a>0?"%0"+a+"d":"")+"%3$s",f>0?"|":"/", 0,f>0?"|":"\\").replace("0", f<1?"**":f>11?"__":"--")+"\n";
            }
        }
        System.out.println(s);
    }
}

Prova qui


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

Altre versioni che ho provato includono:

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

Provalo online!

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

La afunzione definita nel tuo Python non è equivalente alle +liste?
Esolanging Fruit,

@EsolangingFruit È vicino, ma non esattamente: <list>+<str>non è un'operazione valida, ma potrei usare altrettanto facilmente ["-"]*11+["_"]. Ho deciso di definire la mia funzione per tradurre più accuratamente ciò che Pyth sta effettivamente facendo.
hakr14,

Va bene, ha senso.
Esolanging Fruit,

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
Perché non sono sorpreso di vedere una soluzione Groovy piuttosto breve. La mia impressione di Groovy era che fosse stato fatto da un programmatore Java che odiava scrivere.
Almo,

1

C, 194

Questo codice è un disastro e può sicuramente essere giocato di più. Tuttavia, è stata un'opportunità per provare un paio di cose che non avevo mai fatto prima: usare un valore letterale per una stringa di asterischi e usare l'identificatore di larghezza *con una stringa dentro 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

Racchetta 223 220 211 204 198

golfed:

(for-each display(flatten(let([m make-list])`(,(for*/list([i 10][j(range(* i 3)(* 4(+ 1 i)))])`(,(m(- 39 j)" ")"/",(m j"**")"\\\n")),(for/list([c`(,@(m 11"-")"_")])`(,(m 35" ")"|",(m 8 c)"|\n"))))))

Ungolfed:

(for-each display
     (flatten
      (let([m make-list])
        `(,(for*/list([i 10][j(range(* i 3)(* 4(+ 1 i)))])
             `(,(m(- 39 j)" ")"/",(m j"**")"\\\n"))
          ,(for/list([c`(,@(m 11"-")"_")])
             `(,(m 35" ")"|",(m 8 c)"|\n"))))))

1

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

Provalo online!

Modifica: salvato ~ 100 byte codificando ogni carattere in un registro e semplicemente scrivendo nello stack, quindi abusando del fatto che MIPS non ha tipi, quindi è consentita la parola implicita nella stringa ASCII.
Modifica 2: rimosso allocazione pila duplicata. ( addi $sp -4) Oops!
Modifica 3: in riscrittura, il carattere del ceppo di albero 1 è stato accorciato accidentalmente troppo corto. (36 invece di 35). Fisso. -1 Byte impostando t8 su 0 e ramificando in meno di anziché in uguale. mi ha anche richiesto di riordinare le operazioni di aggiunta, che sfortunatamente ha allungato i tempi di esecuzione di ben 3 opcode.
Modifica 4: -4 byte usando $ 8 e $ 9 invece di $ t0 e $ t1. significano la stessa cosa, ma $ t0 è più facile da leggere. sfortunatamente, tutti gli altri registri t hanno la stessa lunghezza se scritti bene ($ t2 == $ 10, ma entrambi sono 3 caratteri), quindi il resto è un lavaggio. Potrei (in teoria) usare i rimanenti registri 'a' (5-7. Print syscall usa 4), ma il comportamento non è definito quando si usa syscall.

Non il migliore al MIPS, ma dopo aver chiarito la mia coscienza di questo nella meta discussione, li sto presentando. MIPS non è progettato per questo (nessun output, no per i loop) ma è abbastanza divertente farlo forse nonostante ciò.

Sfortunatamente, non ho creato una versione commentata per questa nuova soluzione, ma è possibile visualizzare la versione precedente, con la documentazione completa qui

Sentiti libero di prenderti il ​​merito e migliorare questa risposta se riesci a batterla - probabilmente mi mancano alcune ottimizzazioni qua e là.


poiché questa soluzione non richiede .data, è possibile convertire in binario (compilato) e salvare un sacco di byte. tuttavia, SPIM non lo supporta, quindi c'est la vie.
Andrew Baumher,

Inoltre, non sono sicuro se la scorciatoia addi $sp -4che addi $sp $sp -4proviene realmente da SPIM o MIPS in generale, quindi se qualcun altro lo fa, per favore fatemelo sapere.
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+'|________|'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.