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.

caird coinheringaahing
fuente
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
También relacionado: codegolf.stackexchange.com/q/4244/194 .
Peter Taylor
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"
Claudiu
fuente
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

Trevor Hickey
fuente
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. ";
Dennis
fuente
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

Howard
fuente
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!

Claudiu
fuente
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

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

Vectorizado
fuente
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+"|"}
DarkAjax
fuente
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));
    }
}
VisualMelon
fuente
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
Luciérnaga
fuente
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";
}
ossifrage aprensivo
fuente
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' % '|________|'
Scott Leadley
fuente
@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

Brobin
fuente
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.
Teun Pronk
fuente
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('_'))
Sean Latham
fuente
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])
Luciérnaga
fuente
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>
DreamWarrior
fuente
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.

La Inquisición Española
fuente
138 bytes
Max Yekhlakov
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
Adriweb
fuente
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.

freddieknets
fuente
(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í

LudziE12
fuente
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+'|'
flornquake
fuente
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+"|")
hakr14
fuente
¿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)|"}
mazzy
fuente
1

Maravilloso 118

10.times{(it*3).upto 3+it*4,{println' '*(39-it)+'/'+'*'*it*2+'\\'}};12.times{println' '*35+'|'+(it>10?'_':'-')*8+'|'}
cfrick
fuente
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?"|--------":"|________");
}
Level River St
fuente
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"))))))
Matthew Butterick
fuente
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á.

Andrew Baumher
fuente
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+'|________|'
Οurous
fuente