Salida del legendario Yggdrasil


39

Su tarea es generar una representación del legendario árbol de la vida, Yggdrasil .

Debe escribir un programa cuya salida sea exactamente eso:

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

No hay espacios en blanco al final. La nueva línea final puede omitirse.

Para facilitar la comprobación, aquí están las sumas md5 de la salida esperada:

  • 374899e56bc854d04639c43120642e37 - No hay línea nueva al final.
  • 03afb81d960b8e130fe2f9e0906f0482 - Nueva línea al final

Se aplican lagunas estándar. Este es el código de golf, por lo que gana la entrada más pequeña en bytes.


10
Relacionado: codegolf.stackexchange.com/q/15860/15599 . Nax, deberías trabajar en marketing. Cada hogar va a querer un Yggdrasil esta Navidad. Veo que también respondiste la pregunta del número de Graham. Te deben gustar las cosas puntiagudas. Tengamos algunos nombres nuevos para "cohete" y "cono de helado".
Level River St


44
@Nax: dado que el árbol del mundo tiene fruta y las angiospermas no, y eso es claramente un confinamiento de alguna descripción, desafortunadamente parece que tomaste una foto del árbol equivocado: P
naught101

@Nax Hmm. Estás en lo correcto. El pedante (yo) es izado sobre su propio petardo. Los md5sums han cambiado.
Scott Leadley

1
Err, punto de orden, Yggdrasil es definitivamente un fresno en las eddas, no un abeto. Un poco así .
Alex P

Respuestas:


22

Golfscript, 84 77 76 75 72 caracteres

Enfoque diferente al de Howard . Haga clic en el recuento de caracteres para probarlo.

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

¡Gracias a Howard por salvar 3 personajes!

Explicacion :

Este es más o menos un puerto directo de mi solución Python . Tomar algunas libertades expresivas (usar variables con nombre en lugar de hacer un seguimiento de las posiciones de la pila, y printrealmente es mantener las cosas en la pila, no imprimir):

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
Puede usar el mismo truco de salto de línea que en mi solución. En lugar de '\\'ntirar de la nueva línea en la cadena (+/- 0 caracteres) y ahora la barra invertida ya no necesita escapar (-1 carácter).
Howard

1
Dos más: 4*4+es lo mismo )4*y '_-'[=]se puede escribir, lo '_-'1/=que hace que el último quede +obsoleto.
Howard

3
una explicación podría ser útil ... ¿Es esto demasiado pedir?

@professorfish: ¡Próximamente!
Claudiu

¿No necesitas un final ';' ¿aquí? De lo contrario, habrá dos nuevas líneas finales ya que golfscript agrega por defecto una.
Nabb

21

Haml & Sass

37 + 277 = 314

Haml:

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

Hablar con descaro a:

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 permite directivas de control, concatenación y desreferencia variable. Todos los cuales son útiles al peinar, pero detallados durante el golf.


se genera en:

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 página resultante


1
No ve un montón de soluciones HTML / CSS en CodeGolf. Buen trabajo.
Mordred

16

CJam , 62 bytes

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

Pruébalo en línea!

Cómo funciona

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
Tengo que empezar a usar CJam en lugar de GolfScript ...
Claudiu

¿Qué hace que el código CJam sea tan compacto? ¿Es solo que las características habituales coinciden bien o hay algún súper truco? ¿O en realidad no es CJam, sino programadores de CJam?
Vi.

2
@ Vi .: Es una mezcla de ambos. 1. CJam se basa en la pila, por lo que generalmente se escapa sin usar ninguna variable. 2. Todos los nombres incorporados tienen como máximo dos caracteres. Debido a esto, no necesita espacios en blanco, excepto en algunos casos especiales. 3. Incluso las presentaciones en idiomas de golf no juegan golf por sí mismas. Mis programas GolfScript / CJam son mucho más cortos ahora de lo que solían ser.
Dennis

La sugerencia para CJam sería utilizar los códigos ASCII 128-256 para un conjunto completo de otras incorporaciones. tener un editor especial que
Claudiu

@Claudiu: Bueno, eso depende de su creador. Si diseñara mi propio lenguaje de golf, creo que lo basaría en bits o codificaría todas las instrucciones aritméticamente.
Dennis

15

GolfScript, 79 caracteres

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

Prueba el código aquí . Tenga en cuenta que los saltos de línea no son opcionales en este código


24
¿Una solución de GolfScript multilínea? ¡No pensé que vería el día!
Ingo Bürk

12

Pitón, 148 129 126 121 caracteres

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

¡Gracias a Falko por salvar 3 personajes y a flornquake por salvar brillantemente otros 5!


1
La multiplicación de caracteres de Python es demasiado perfecta para este desafío ...
Sean Latham

Espere hasta que vea mi solución golfscript ... = P
Claudiu

2
Use '**'*jpara guardar 3 caracteres. Aparte de esto, mi solución converge exactamente al mismo código. :)
Falko

1
Puede acortar la última línea escribiendo for c in'-'*11+'_':print' '*35+'|'+c*8+'|'.
flornquake

@flornquake: ¡bien! muy inteligente
Claudiu

11

Golpetazo, 236 197 193

10 bytes de código + nombre de archivo de 1 byte + archivo de datos de 182 bytes = 193 bytes en total

zcat y 2>j

Explicación

yes un archivo que contiene el Yggdrasil, sin una nueva línea final, comprimido con el algoritmo zopfli (invocado como zopfli --i64) y luego con los últimos 8 bytes eliminados. zopfli es compatible con gzip, por lo que puedo descomprimir el archivo con las utilidades Bash estándar diseñadas para gzip. El tamaño del archivo de datos es de 182 bytes (229 bytes cuando se usa gzip normal). El tamaño del Yggdrasil original, sin la nueva línea final, es de 5876 bytes.

La eliminación de los últimos 8 bytes provoca mensajes de error, que se suprimen enviando un error estándar a un archivo llamado j. Si jexiste, se sobrescribirá.

La base64 de yes (se usa base64 -dpara obtener el archivo original):

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

Y el md5sum es:

4a049a80241160cdde0a3cbca323b7f2

2
Me picaba el dedo al presionar el botón "Eliminar" cuando vi el código, hasta que leí el recuento de caracteres y la explicación. : P
Pomo de la puerta

2
Puede guardar unos 30 bytes utilizando zopfli para crear el archivo comprimido. "zopfli --i100 y" produce un archivo de 190 bytes que zcat puede descomprimir.
Glenn Randers-Pehrson

1
Y algunos más si elimina los últimos 10 bytes y cierra STDERR.
Dennis

@ GlennRanders-Pehrson gracias por señalar esto, también he editado mi respuesta a 'Masas de compuestos molares ' codegolf.stackexchange.com/a/35613/16402 para usar zopfli, ahorrando 37 bytes

@Dennis resultó ser de 8 bytes (faltarían más trozos del tronco de Yggdrasil), gracias

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

Sin golf (y ligeramente desenredado):

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

Rubí - 100

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

Pone aplanamientos automáticos, por lo que podemos recopilar todas las líneas incluso en matrices anidadas. Necesita Ruby 1.9

Probar en ideone


Creo que necesita algunos espacios principales. Además, funciona con Ruby 1.9, pero no en 1.8.
Scott Leadley

7

PowerShell 104 101

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

6

C # 258 234bytes

¡Gracias a algún usuario anónimo por las ediciones sugeridas que hacen un buen uso del método 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));}}

El código es bastante simple, no queda mucho para el golf.

Código formateado:

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

Usar no \rtiene sentido aquí. Este es el código de golf.
nyuszika7h

3
@ nyuszika7h, de hecho, pero se incluye en la copia formateada para una buena medida, de modo que las personas que usan el bloc de notas puedan ver más fácilmente la gloria del Yggdrasil (no está incluido en el puntaje)
VisualMelon

Oh ya veo. Windows ... Siéntete libre de arreglar mi edición entonces.
nyuszika7h

@ nyuszika7h gracias por señalar que el resaltado de sintaxis no era correcto
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";}

Sin golf:

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

Reemplace $ i con $ _ y guarde 4 caracteres.
choroba

4

Rubí - 139 129 126 123 121

Alzado "pone" fuera de la creación de matriz (sugerencia de bitpwner).

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


Sin golf ("pone" sin elevar):


# 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 Creo que esto merece su propia respuesta. Ve a por ello.
Scott Leadley

4

PHP 223 202 181 160 156

Editar Descubrí cómo crear un alias de una función con una variable y pude cortar algunos caracteres más. Esa str_repeatfunción era realmente detallada

Edición 2: ¡Gracias a todos por las sugerencias!

Golfizado:

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

Legible:

    <?

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

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


Puede guardar 6 caracteres eliminando paréntesis (39-$j), ($j*2)y ($i==11). -2 reemplazando \ncon caracteres de línea nuevos reales (PHP lo permite en letras). -5 caracteres reemplazando (ambos) for($i=0;$i<12;$i++)con for($i=12;$i-->0;)y $i==11con $i==0.
sebcap26

Después de eso también puede reemplazar $s(($i==0?'_':'-'),8)con $s($i?'-':'_',8). (==> -5 caracteres)
sebcap26

-1 Carácter reemplazando $s('*',$j*2)con $s('**',$j). Creo que esa es la última mejora que puedo encontrar.
sebcap26

-2 cambios ($j*2)en el interior para ($j++*2)y eliminación $j++de for()argumentos
avall

@ sebcap26 for($i=12;$i-->0;)se puede acortar a for($i=12;$i--;)- otros 2 caracteres.
Avall

3

Delphi 429

Intentará mejorar más tarde.
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.

sin golf

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 oculta console.logs duplicados , use IE en su lugar.

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

Sin golf:

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

Use en for(i=0;i++<39-w;)lugar de for(i=0;i<39-w;++i), y así sucesivamente. Además, en p=console.loglugar de c=consoley en plugar de c.log(aunque solo probé este último en Node.js, no funciona en Firefox). Esto ahorra 12 bytes.
nyuszika7h

c=console.logtampoco funcionó en Chrome, así que no lo usé. Sin embargo, los trucos for loop ahorran 7 bytes.
Sean Latham

Normalmente desconfío de cualquier cosa que me anime a usar MSIE ...

Esta es posiblemente la primera vez que he visto la frase "usar IE en su lugar". O_o Sin embargo, puede suprimir el comportamiento de Chrome simplemente ejecutando este código en la consola en lugar de hacerlo desde una página web.
Pomo de la puerta

Ejecutarlo en una página y en la consola produce los mismos resultados para mí en Firefox y Chrome.
Sean Latham

3

JavaScript (console.log), 168 166

(Espacio en blanco solo para legibilidad)

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)

Gracias a todos por los consejos de golf. Logramos reducirlo a 219. No creo que vaya a bajar mucho.

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

Requerido incluye:

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

Si está dispuesto a usar C89, también puede omitir todas las inclusiones. No hay ningún caso en este código donde la declaración implícita en la llamada se arruine.
Joshua

@Nax; eso me lleva a 263, y saqué incluye. Gracias.
DreamWarrior

@Joshua: los sistemas de 64 bits y el conjunto de memoria podrían ser problemáticos, pero ... de lo contrario, tal vez no. De cualquier manera, la mayoría de las personas eliminan las inclusiones, así que también lo hice.
DreamWarrior

En realidad son 262 caracteres, no necesita la nueva línea final.
nyuszika7h

Puede usar en 32lugar de ' 'y en 42lugar de '*':)
Quentin

3

Haskell, 153 148

Directo, sin trucos, simplemente jugando al 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]

El %operador dibuja una sola línea, su primer argumento es Stringde longitud 3 que contiene los bordes y los caracteres de relleno en esa línea (ahora suponiendo exactamente 3 Chars, ahorrando 5 bytes), el segundo, an Int, especifica la mitad del número de caracteres de relleno. La combinación de patrones, el diseño y la adición se usan en combinación para ahorrar bytes al cuidar el "pegamento" entre Chary String. En esta segunda versión, también hice #infinito e introduje untake 85 para volverlo finito (desafortunadamente no se guardaron bytes).

El #operador crea la secuencia para el nargumento %requerido para el árbol: [0..3], [3..7], ...concatenado.

& es solo una abreviatura de infijo para replicate , que ocurre tres veces.

El árbol se junta en la última línea, las nuevas líneas se agregan mediante 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

Seguro que no es la mejor solución:

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

Sin contar nuevas líneas. Mathematica sesga la salida, ya que no toma el mismo ancho para un espacio en blanco que para "*" y "/". Pero el resultado es correcto.


(es mi primer golf)
freddieknets

2

Java - 286

Mi primer golf

Golfizado:

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

Sin golf:

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

Prueba aquí


2

Pitón 2, 117

j=0
while j<40:j-=j/4;exec(j/3+4)*r"print' '*(39-j)+'/'+'**'*j+'\\';j+=1;"
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'

Otras versiones que probé incluyen:

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

Pruébalo en línea!

Traducción de 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+"|")

¿No es la afunción definida en su Python equivalente a +en las listas?
Esolanging Fruit

@EsolangingFruit Está cerca, pero no exactamente: <list>+<str>no es una operación válida, pero podría usarla con la misma facilidad ["-"]*11+["_"]. Decidí definir mi propia función para traducir con mayor precisión lo que Pyth está haciendo realmente.
hakr14

Vale, eso tiene sentido.
Esolanging Fruit

2

Powershell, 88 bytes

0..9|%{(3*$_)..(3+$_*4)|%{' '*(39-$_)+"/$('**'*$_)\"}}
,'-'*10+'_'|%{' '*35+"|$($_*8)|"}

1

Maravilloso 118

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

1
¿Por qué no me sorprende ver una solución Groovy bastante corta? Mi impresión de Groovy fue que fue hecha por un programador de Java que odiaba escribir.
Almo

1

C, 194

Este código es un desastre y definitivamente se puede jugar más. Aún así, fue una oportunidad para probar un par de cosas que nunca antes había hecho: usar un literal para una cadena de asteriscos y usar el especificador de ancho *con una cadena 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

Raqueta 223 220 211 204 198

Golfizado:

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

Sin golf:

(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

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

Pruébalo en línea!

Editar: ahorró ~ 100 bytes codificando cada carácter en un registro y simplemente escribiendo en la pila, luego abusando del hecho de que MIPS no tiene tipos, por lo que se permite una palabra implícita a una cadena ascii.
Edición 2: se eliminó la asignación de pila duplicada. ( addi $sp -4) ¡Vaya!
Edición 3: en reescritura, accidentalmente hizo que el tocón de árbol 1 carácter sea demasiado corto. (36 en lugar de 35). Fijo. -1 Byte estableciendo t8 en 0 y bifurcando en menos que en lugar de en igual. También me obligó a reordenar las operaciones adicionales, lo que desafortunadamente hizo que el tiempo de ejecución tomara 3 códigos de operación más largos.
Edite 4: -4 bytes usando $ 8 y $ 9 en lugar de $ t0 y $ t1. significan lo mismo, pero $ t0 es más fácil de leer. desafortunadamente, todos los demás registros t tienen la misma longitud cuando se escriben bien ($ t2 == $ 10, pero ambos son 3 caracteres), por lo que el resto es un lavado. Podría (en teoría) usar los registros 'a' restantes (5-7. Print syscall usa 4), pero afaik el comportamiento no se define cuando se usa syscall.

No es el mejor en MIPS, pero después de limpiar mi conciencia de esto en una meta discusión, los envío. MIPS no está diseñado para esto (sin salida, no para bucles) pero es bastante divertido hacer esto a pesar de eso.

Desafortunadamente, no he creado una versión comentada para esta nueva solución, pero puede ver la versión anterior, con documentación completa aquí.

Siéntase libre de tomar el crédito y mejorar esta respuesta si puede vencerlo; probablemente me falten algunas optimizaciones aquí y allá.


Como esta solución no requiere .data, es posible convertir a binario (compilado) y guardar un montón de bytes. sin embargo, SPIM no lo admite, así que c'est la vie.
Andrew Baumher

Además, no estoy seguro si la taquigrafía addi $sp -4que realmente addi $sp $sp -4es de SPIM o MIPS en general, así que si alguien más lo hace, hágamelo saber.
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+'|________|'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.