Виведіть легендарний Yggdrasil


39

Ваше завдання - вивести зображення легендарного дерева життя, Yggdrasil .

Ви повинні написати програму, вихід якої точно такий:

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

Немає відсталого пробілу. Остаточний рядок може бути опущений.

Щоб полегшити перевірку, ось суму md5 очікуваного виходу:

  • 374899e56bc854d04639c43120642e37 - Немає нової лінії в кінці.
  • 03afb81d960b8e130fe2f9e0906f0482 - Новий рядок наприкінці

Застосовуються стандартні лазівки. Це код-гольф, тому найменший запис у байтах виграє!


10
Пов'язане: codegolf.stackexchange.com/q/15860/15599 . Nax, ти повинен працювати в маркетингу. Кожне домашнє господарство збирається побачити Yggdrasil цього Різдва. Я бачу, ви теж відповіли на питання про Грейма. Вам повинні сподобатися точкові речі. Давайте кілька нових назв для "ракети" та "конуса морозива".
Рівень річки Св.


4
@Nax: оскільки всесвітнє дерево має плоди, а покритонасінні - і це, очевидно, є деяким описом, на жаль, схоже, що ви сфотографували неправильне дерево: P
naught101

@Nax Хм. Ви праві. Педант (у мене) лежить на підйомі власного петарда. Змінилися md5суми.
Скотт Лідлі

1
Помилка, питання порядку, Іггдрасіль, безумовно, дерево ясена в еддах, а не ялина. Ніби так .
Alex P

Відповіді:


22

Гольфскрипт, 84 77 76 75 72 символи

Інший підхід від Говарда . Клацніть на кількість символів, щоб спробувати.

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

Дякуємо Говарду за збереження 3 символів!

Пояснення :

Це більш-менш простий порт мого рішення Python . Візьміть деякі виразні свободи (використовуйте названі змінні замість того, щоб відслідковувати позиції стека, і printсправді зберігаєте речі на стеку, а не друкуєте):

10,{...}/            # for i in range(10):
   .                 #    x = i
   )4*,              #    Y = range((i+1)*4)
   \3*               #    x *= 3
   >                 #    Y = Y[x:]  # y is now range(3*i, (i+1)*4)
   {...}/            #    for j in Y:
      .39\-          #        q = 39 - j
      ' '*           #        print ' '*q  # print right number of spaces
      '/'            #        print '/'
      @2*            #        j *= 2
      '*'*           #        print '*'*j
      '\<NEWLINE>'   #        print "\\\n"
12,{...}/            # for i in range(12):
    ' '35*           #    print ' '*35
    '|'              #    print '|'
    @11<             #    i = i < 11
    '_-'1/=          #    z = "_-"[i] # pick "-" if i < 11, else pick "_"
    8*               #    print z*8
    1$               #    print '|' # (copy from earlier in the stack)
    n                #    print "\n"

1
Ви можете використовувати той самий трюк розриву рядків, що і в моєму рішенні. Замість того, щоб '\\'nтягнути новий рядок у рядок (+/- 0 символів) і тепер зворотну косу рису більше не потрібно уникати (-1 символ).
Говард

1
Ще два: 4*4+те саме, що )4*і '_-'[=]можна записати, '_-'1/=що робить останнє +застарілим.
Говард

3
пояснення може бути корисним ...? це занадто багато запитати?

@professorfish: Наближаємось!
Клавдіу

Чи вам не потрібен останній ';' тут? Інакше буде два останніх рядки, оскільки golfscript за замовчуванням додає один.
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 дозволяє керувати директивами, конкатенацією та змінною затримкою. Все це корисно при стилізації, але багатослівне під час гри в гольф.


створюється в:

HTML:

<link rel="stylesheet" href="s" /><pre></pre>

CSS:

pre:after {
  content: "                                        /\\\a                                        /**\\\a                                       /****\\\a                                      /******\\\a                                      /******\\\a                                     /********\\\a                                    /**********\\\a                                   /************\\\a                                  /**************\\\a                                   /************\\\a                                  /**************\\\a                                 /****************\\\a                                /******************\\\a                               /********************\\\a                              /**********************\\\a                                /******************\\\a                               /********************\\\a                              /**********************\\\a                             /************************\\\a               
             /**************************\\\a                           /****************************\\\a                          /******************************\\\a                             /************************\\\a                            /**************************\\\a                           /****************************\\\a                          /******************************\\\a                         /********************************\\\a                        /**********************************\\\a                       /************************************\\\a                      /**************************************\\\a                          /******************************\\\a                         /********************************\\\a                        /**********************************\\\a                       /************************************\\\a                      /**************************************\\\a                     /******************************
**********\\\a                    /******************************************\\\a                   /********************************************\\\a                  /**********************************************\\\a                       /************************************\\\a                      /**************************************\\\a                     /****************************************\\\a                    /******************************************\\\a                   /********************************************\\\a                  /**********************************************\\\a                 /************************************************\\\a                /**************************************************\\\a               /****************************************************\\\a              /******************************************************\\\a                    /******************************************\\\a                   /**********************************
**********\\\a                  /**********************************************\\\a                 /************************************************\\\a                /**************************************************\\\a               /****************************************************\\\a              /******************************************************\\\a             /********************************************************\\\a            /**********************************************************\\\a           /************************************************************\\\a          /**************************************************************\\\a                 /************************************************\\\a                /**************************************************\\\a               /****************************************************\\\a              /******************************************************\\\a             /*****************************************************
***\\\a            /**********************************************************\\\a           /************************************************************\\\a          /**************************************************************\\\a         /****************************************************************\\\a        /******************************************************************\\\a       /********************************************************************\\\a      /**********************************************************************\\\a              /******************************************************\\\a             /********************************************************\\\a            /**********************************************************\\\a           /************************************************************\\\a          /**************************************************************\\\a         /****************************************************************\\\a        /*********
*********************************************************\\\a       /********************************************************************\\\a      /**********************************************************************\\\a     /************************************************************************\\\a    /**************************************************************************\\\a   /****************************************************************************\\\a  /******************************************************************************\\\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    |--------|\a                                    
|--------|\a                                    |--------|\a                                    |________|"; }

отримана сторінка


1
Ви не бачите тонни HTML / CSS рішень на CodeGolf. Хороша робота.
Мордред

16

CJam , 62 байти

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

Спробуйте в Інтернеті!

Як це працює

A,           " Push [ 0  …  9 ].                                                   ";
{            " For each I in that array:                                           ";
  I4+,       " Push [ 0  …  I + 3 ].                                               ";
  {          " For each J in that array:                                           ";
    I3*J+_   " Push K := 3 * I + J twice.                                          ";
    39\-S*   " Push a string consisting of 39 - K spaces.                          ";
    '/       " Push a slash.                                                       ";
    @2*'**   " Push a string consisting of 2 * K asterisks.                        ";
    '\N      " Push a backslash and a linefeed.                                    ";
  }fJ        "                                                                     ";
}fI          "                                                                     ";
{            " Do the following 12 times:                                          ";
  35S*       " Push a string consisting of 35 spaces.                              ";
  '|         " Push a vertical bar.                                                ";
  '-8*'|++   " Push the string '--------|\n'.                                      ";
}C*          "                                                                     ";
'-/'_*       " Replace the hyphen-minus signs of the last string with underscores. ";

2
Я повинен почати використовувати CJam замість GolfScript ...
Клаудіу

Що робить код CJam таким компактним? Чи просто звичайні функції добре поєднуються або є якийсь супер-трюк? Або насправді це не CJam, а програмісти CJam так?
Ві.

2
@Vi .: Це поєднання обох. 1. CJam заснований на стеці, тому ви зазвичай виходите без використання змінних. 2. Імена всіх вбудованих файлів мають не більше двох символів. Через це вам не потрібен пробіл, крім деяких особливих випадків. 3. Навіть подання з мов для гольфу не гольфують самі. Мої програми GolfScript / CJam зараз набагато коротші, ніж раніше.
Денніс

Рекомендацією для CJam було б використання ASCII-кодів 128-256 для цілого набору вбудованих модулів. є якийсь спеціальний редактор, який
Клавдіу

@Claudiu: Ну, це залежить від її творця. Якби я створив свою власну мову для гольфу, я думаю, я би зробив її на основі бітів або кодував усі інструкції арифметично.
Денніс

15

GolfScript, 79 символів

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

Спробуйте код тут . Зауважте, що в цьому коді розриви рядків необов’язкові


24
Багатолінійне рішення GolfScript? Я не думав, що побачу день!
Інго Бюрк

12

Пітона, 148 129 126 121 символів

R=range
for i in R(10):
 for j in R(i*3,4+i*4):print' '*(39-j)+'/'+'**'*j+'\\'
for c in'-'*11+'_':print' '*35+'|'+c*8+'|'

Дякуємо Фалько за збереження 3-х персонажів та Flornquake за блискуче збереження ще 5!


1
Множення персонажів Python трохи надто ідеально для цього виклику ...
Sean Latham

Зачекайте, поки ви не побачите моє рішення про гольфскрипт ... = P
Клавдіу,

2
Використовуйте '**'*jдля збереження 3 символів. Крім цього, моє рішення конвергується в точно той же код. :)
Falko

1
Останній рядок можна скоротити, записавши for c in'-'*11+'_':print' '*35+'|'+c*8+'|'.
flornquake

@flornquake: приємно! дуже розумний
Клавдіу

11

Bash, 236 197 193

10 байт коду + 1-байтове ім’я файлу + 182-байтний файл даних = 193 байт

zcat y 2>j

Пояснення

y- файл, що містить Yggdrasil, без зворотного нового рядка, стиснутого алгоритмом zopfli (викликається якzopfli --i64 ), а потім з останніми 8 видаленими байтами. zopfli сумісний з gzip, тому я можу розпакувати файл за допомогою стандартних утиліт Bash, призначених для gzip. Розмір файлу даних становить 182 байти (229 байт, коли використовується звичайний gzip). Розмір оригінального Yggdrasil, без закінчення нового рядка, становить 5876 байт.

Видалення останніх 8 байтів спричиняє повідомлення про помилки, які придушуються надсиланням стандартної помилки у файл, що називається j. Якщо вона jіснує, вона буде перезаписана.

Base64 of yє (використовувати base64 -dдля отримання вихідного файлу):

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

І md5sum:

4a049a80241160cdde0a3cbca323b7f2

2
Мій палець свербів, натиснувши кнопку «видалити», коли побачив код, поки я не прочитав кількість символів та пояснення. : P
Дверна ручка

2
Ви можете зберегти близько 30 байт, скориставшись стислим файлом за допомогою zopfli. "zopfli --i100 y" дає 190-байтний файл, який zcat може розпакувати.
Гленн Рендерс-Персон

1
І ще кілька, якщо ви видалите останні 10 байт і закриєте STDERR.
Денніс

@ GlennRanders-Pehrson дякую, що вказав на це, я також відредагував свою відповідь на "Молярні маси сполук" codegolf.stackexchange.com/a/35613/16402 використовувати zopfli, заощадивши 37 байт

@Dennis виявилося, що це 8 байт (більше, і біт багажника Yggdrasil відсутній), дякую

7

С, 169

i;j;p(a,b){while(b--)putchar(a);}main(){for(;i++<10;)for(j=i*3-4;++j<i*4;p(32,39-j),p(47,1),p(42,j*2),puts("\\"));for(++i;i--;p(32,35),p(124,1),p(i?45:95,8),puts("|"));}

Невольф (і трохи розчленований):

int i;
int j;
void p(a,b) {
  while (b--) putchar(a);
}
void main() {
  for (;i++<10;) {
    for (j=i*3-4;++j<i*4;) {
      p(32,39-j);
      p(47,1);
      p(42,j*2);
      puts("\\");
    }
  }
  for (++i;i--;) {
    p(32,35);
    p(124,1);
    p(i?45:95,8);
    puts("|");
  }
}

7

Рубін - 100

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

Автоматично вирівнюється, тому ми можемо збирати всі рядки навіть у вкладені масиви. Потреби Ruby 1.9

Спробуйте в ideone


Я думаю, що для цього потрібні провідні простори. Також працює з Ruby 1.9, але не в 1.8.
Скотт Лідлі

7

PowerShell 104 101

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

6

C # 258 234 байт

Дякуємо деякому дратівливому користувачеві за запропоновані зміни, використовуючи метод String.PadLeft!

using System;class G{static void Main(){Action<string>p=Console.WriteLine;int i=0,j;for(;i++<10;)for(j=i*3-3;j++<i*4;)p("/".PadLeft(41-j)+"\\".PadLeft(2*j-1,'*'));while(i-->0)p("|--------|".PadLeft(45));p("|________|".PadLeft(45));}}

Код досить простий, не так багато залишається для гольфу.

Форматований код:

using System;
class G
{
    static void Main()
    {
        Action<string> p = Console.WriteLine;
        int i = 0, j;
        for(; i++ < 10 ;)
            for(j = i*3 - 3; j++ < i*4;)
                p("/".PadLeft(41 - j) + "\\".PadLeft(2*j - 1,'*'));
        while(i-- > 0)
            p("|--------|".PadLeft(45));
        p("|________|".PadLeft(45));
    }
}

Використовувати \rтут безглуздо. Це код гольфу.
nyuszika7h

3
@ nyuszika7h дійсно, але він включений у відформатовану копію для гарної міри, щоб люди, що користуються блокнотом, могли легше бачити славу Yggdrasil (він не включений в рахунок)
VisualMelon

О Я бачу. Windows ... Ви можете виправити мою редакцію тоді.
nyuszika7h

@ nyuszika7h спасибі за те, що вказали, що підсвічування синтаксису було неправильним
VisualMelon

6

J, 98 88 84 75

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

4

Перл, 127

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

Безумовно:

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

Замініть $ i на $ _ і збережіть 4 символи.
choroba

4

Рубі - 139 129 126 123 121

Піднятий "ставить" поза створення масиву (пропозиція від bitpwner).

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


Ungolfed ("ставить" unhoisted):


# 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 Я думаю, що це заслуговує на власну відповідь. Дій.
Скотт Лідлі

4

PHP 223 202 181 160 156

Правка Я зрозумів, як псевдонім функцію зі змінною і міг відрізати ще кілька символів. Цеstr_repeat функція була дійсно багатослівною

Редагувати 2: Дякую всім за пропозиції!

Гольф:

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

Читає:

    <?

$s=str_repeat;

for($i=-1;$i++<9;)
{
    for($j=$i*3;$j<4+$i*4;)
    {
        echo$s(' ',39-$j).'/'.$s('**',$j++)."\\
        ";
    }
}

for($i=12;$i--;)
{
    echo$s(' ',35),'|'.$s($i?'-':'_',8)."|
    ";
}

Вихід: http://brobin.me/yggdrasil.php


Ви можете зберегти 6 символів, видаливши круглі дужки навколо (39-$j), ($j*2)і ($i==11). -2, замінивши \nсправжніми новими символами рядка (PHP дозволяє це в літералах). -5 символів, замінивши (і) for($i=0;$i<12;$i++)на for($i=12;$i-->0;)і $i==11на $i==0.
sebcap26

Після цього можна також замінити $s(($i==0?'_':'-'),8)на $s($i?'-':'_',8). (==> -5 символів)
sebcap26

-1 Символ, замінивши $s('*',$j*2)на $s('**',$j). Я думаю, що це останнє поліпшення, яке я можу знайти.
sebcap26

-2 зміна ($j*2)у внутрішній для на ($j++*2)та видалення $j++з for()аргументів
avall

@ sebcap26 for($i=12;$i-->0;)можна скоротити до for($i=12;$i--;)- ще 2 символи.
avall

3

Delphi 429

Спробуємо покращити пізніше.
Гольф

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

неозорий

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

3

Javascript, 288 281

Chrome приховує дублювання console.logs, замість цього використовуйте IE.

function t(w){s="";for(i=0;i++<39-w;)s+=" ";s+="/";for(i=0;i++<w*2;)s+="*";return s+"\\"}function r(l){s="";for(i=0;i++<36;)s+=" ";s+="|";for(i=0;i++<8;)s+=l;return s+"|"}w=0;c=console;for(h=0;h++<10;){for(j=0;j++<3+h;)c.log(t(w++));w-=h}for(j=0;j++<11;)c.log(r('-'));c.log(r('_'))

Безумовно:

function t(w)
{
    s="";
    for(i=0;i++<39-w;)
        s+=" ";
    s+="/";
    for(i=0;i++<w*2;)
        s+="*";
    return s+"\\"
}
function r(l)
{
    s="";
    for(i=0;i++<36;)
        s+=" ";
    s+="|";
    for(i=0;i++<8;)
        s+=l;
    return s+"|"
}

w=0;
c=console;
for(h=0;h++<10;)
{
    for(j=0;j++<3+h;)
        c.log(t(w++));
    w-=h;
}
for(j=0;j++<11;)
    c.log(r('-'));
c.log(r('_'))

Використовуйте for(i=0;i++<39-w;)замість for(i=0;i<39-w;++i)тощо. Крім того, p=console.logзамість c=consoleі pзамість c.log(хоча я останній раз тестував останній у Node.js, він не працює у Firefox). Це економить 12 байт.
nyuszika7h

c=console.logтакож не працював у Chrome, тому я не користувався ним. Трюки для циклу заощаджують 7 байт.
Шон Летхем

Я, як правило, дуже насторожено

Це, можливо, перший раз, коли я коли-небудь бачив фразу "використовувати IE замість цього". O_o Однак ви можете придушити поведінку Chrome, просто запустивши цей код у консолі, а не на веб-сторінці.
Дверна ручка

Запуск його на сторінці та в консолі дає однакові результати і для Firefox, і для Chrome.
Шон Летхем

3

JavaScript (console.log), 168 166

(Пробіл лише для читання)

for(i=c=0;i<11;i++)
  for(j=0;j<4+i&!c;j++)
    l=i*13+j,
    a=Array(n=i-10?3*i+j+1:5).join("*-_"[k=(l>129)+(c=l==141)]),
    console.log(Array(41-n).join(" ")+'/||'[k]+a+a+'\\||'[k])

3

C (219)

Дякуємо всім за поради з гольфу - вдалося зменшити його до 219. Не думайте, що воно піде набагато нижче.

w,W,s,S,i,r;main(){char T[78];memset(T,42,78);for(r=4,s=39;r<14;++r,s-=3,w+=6)for(i=0,S=s,W=w;i<r;++i,W+=2,--S)printf("%*s/%.*s\\\n",S,"",W,T);for(i=0;i<11;i++)printf("%35s|--------|\n","");printf("%35s|________|","");}

Обов’язкове включає:

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

Якщо він готовий використовувати C89, він також може опустити всі включені. У цьому коді немає жодного випадку, коли б негласна декларація про виклик накручувалася.
Джошуа

@Nax; це приносить мені 263 - і я витягнув включає. Спасибі.
DreamWarrior

@Joshua - 64-бітні системи та мемсет можуть бути проблематичними, але ... інакше, можливо, ні. Так чи інакше, більшість людей видаляє включення, так що я і теж.
DreamWarrior

It's actually 262 characters, you don't need the trailing newline.
nyuszika7h

You can use 32 instead of ' ' and 42 instead of '*' :)
Quentin

3

Haskell, 153 148

Straight-forward, no tricks, just plain golfing:

(a:b:c)%n=(39-n)&' '++a:(2*n)&b++c
n#m=[n..m]++(n+3)#(m+4)
(&)=replicate
main=putStr$unlines$map("/*\\"%)(take 85$0#3)++map("|-|"%)(11&4)++["|_|"%4]

%Оператор малює одну лінії, її перший аргумент будучи Stringдовжиною 3 , що містять кордону і символи заповнення в цьому рядку (тепер передбачає рівно 3 Charсек, економлячи 5 байт), то по- вторихі, Int, визначає половину число заповнення символів. Збірка, узгодження та додавання шаблонів використовується в поєднанні для збереження байтів, піклуючись про "клей" між Charі String. У цій другій версії я також зробив #нескінченний і ввів atake 85 to make it finite again (no bytes saved, unfortunately).

#Оператор створює послідовність для nаргументу , %необхідні для дерева: [0..3], [3..7], ...зчеплені.

& є лише скороченням інфіксованих файлів replicate, which occurs three times.

Дерево складене в останній рядок, нові рядки додаються 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

For sure not the best solution:

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

Not counting newlines. Mathematica skews the output, as it doesn't take the same width for a whitespace as for "*" and "/". But the result is correct.


(it's my first golf)
freddieknets

2

Java - 286

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

Test here


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

Other versions I tried include:

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

Try it online!

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

Isn't the a function defined in your Python equivalent to + on lists?
Esolanging Fruit

@EsolangingFruit It's close, but not exactly: <list>+<str> is not a valid operation, but I could just as easily use ["-"]*11+["_"]. I decided to define my own function to more accurately translate what Pyth is actually doing.
hakr14

Okay, that makes sense.
Esolanging Fruit

2

Powershell, 88 bytes

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

1

Groovy 118

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

1
Why am I not surprised to see a pretty short Groovy solution. My impression of Groovy was that it was done by a Java programmer who hated typing.
Almo

1

C,194

This code is a hot mess and can definitely be golfed more. Still, it was an opportunity to try out a couple of things I've never done before: using a literal for a string of asterisks, and using the width specifier * with a string in printf.

i,j=5,k=5,n;
main(){
  char d[]={[0 ...77]=42,0};
  for(;i<85;i++)k--,j+=!k,k+=(j-1)*!k,n=39-i+(j-5)*(j-4)/2,printf("%*s/%s\\\n",n,"",d+n*2);
  for(;i<97;i++)printf("%*s|\n",44,i-96?"|--------":"|________");
}

1

Racket 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 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

Try it online!

Edit: Saved ~100 bytes by hard coding each character in a register and simply writing to the stack, then abusing the fact that MIPS doesn't have types so implicit word to ascii string is allowed.
Edit 2: removed duplicate stack alloc. (addi $sp -4) Oops!
Edit 3: in rewrite, accidently made the tree stump 1 character too short. (36 in stead of 35). Fixed.
Edit 4: -4 bytes by using $8 and $9 instead of $t0 and $t1. they mean the same thing, but $t0 is easier to read. unfortunately, all other t registers are the same length when written nicely ($t2 == $10, but both are 3 characters), so the rest are a wash. I could (in theory) use the remaining 'a' registers (5-7. print syscall uses 4), but afaik the behavior isn't defined when using syscall.
-1 Byte by setting t8 to 0 and branching on less than instead of on equal. also required me to reorder the add ops, which unfortunately made the execution time take a whopping 3 opcodes longer.

Not the best at MIPS, but after clearing my conscience of this in meta discussion, i'm submitting them. MIPS is not designed for this (no output, no for loops) but it's pretty fun to do this perhaps in spite of that.

Unfortunately, I haven't created a commented version for this new solution, but you can view the old version, with full documentation here

Feel free to take the credit and improve upon this answer if you can beat it - I'm probably missing a few optimizations here and there.


since this solution doesn't require .data, it's possible to convert to binary (compiled) and save a bunch of bytes. however, SPIM doesn't support it, so c'est la vie.
Andrew Baumher

Also, I'm not sure if the shorthand addi $sp -4 which is really addi $sp $sp -4 is from SPIM or MIPS in general, so if anyone else does, please let me know.
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+'|________|'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.