Испечь кусочек пи


82

Напишите программу или функцию, которая печатает или выводит этот точный текст (состоящий из 142 символов):

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|

Ваша программа не должна вводить данные (кроме языков, где это невозможно, например sed), и выводить вышеуказанный текст (и только вышеуказанный текст) в качестве вывода. Конечный перевод строки является приемлемым.

Это , поэтому выигрывает самый короткий ответ (в байтах).


9
@RohanJhunjhunwala Для доказательства того, что это можно сжать, Луис Мендо сделал это .
Эрик Outgolfer

1
Lol, я был доказан неправильно (и я рад!) Очень впечатляет
Рохан Jhunjhunwala

2
Вы сделали так, чтобы они взяли целочисленный ввод N для вывода среза, число которого ()вверху равно N. Это было бы очень сложно.
user6245072

5
Просто чтобы вы знали, вам нужно 43 знака после запятой π.
Эрик Outgolfer

4
Так близко к смыслу жизни ....
А. Мирабо

Ответы:


90

MATL , 70 68 67 байт

'()'12:)l10:&<toYP43Y$51hb(!10Xy'\::\'FFhZ++'|'3$Yc'||\'3:(95'Zd'o(

Попробуйте онлайн!

объяснение

Что за беспорядок Но эй, есть свертка!

Объяснение будет более понятным, если вы сможете проверить содержимое стека после данного оператора . Для этого просто вставьте X#0$%в этот момент. (Это означает: X# показывать содержимое стека, 0$не отображать ничего неявно, %закомментировать оставшуюся часть кода). Например, посмотрите на стек сразу после свертки .

'()'       % Push this string
12:        % Range [1 2 ... 12]
)          % Index into string (modular, 1-based): gives '()()()()()()'
l          % Push 1 (will be used later)
10:        % Range [1 2 ... 10]
&<         % All pairwise "less than" comparisons. Gives matrix with "true"
           % below the main diagonal, and the remining entries equal to "false"
to         % Duplicate. Convert to numbers (true becomes 1, false becomes 0)
YP43Y$     % Compute pi with 43 significant digits (42 decimals). Gives a string
51h        % Append last decimal, '3' (ASCII 51). This is needed to avoid rounding
b          % Bubble up the true-false matrix, to be used as logical index
(          % Fill the chars from the pi string into the 0-1 matrix, at the positions
           % indicated by the true-false matrix. Thus each 1 is replaced by a char
           % from the pi string. Entries that were 0 remain as 0. This is done in
           % columm-major order...
!          % ...so transpose to make it row-major
10Xy       % Identity matrix of size 10
'\::\'     % Push this string...
FFh        % ...and append two zeros
Z+         % 2D convolution keeping size. The identity matrix convolved with the
           % above string gives the diagonal bands with chars '\'  and ':'
+          % Add to the matrix containing the digits of pi. At each entry, only one
           % of the two matrices is nonzero
'|'        % Push this string
3$Yc       % Three-input string concatenation. This prepends the 1 (which was pushed
           % a while ago) and appends '|' to each row of the matrix. This converts
           % the matrix to char. Note that char 1 will be displayed as a space. We
           % used char 1 and not char 0 (which would be displayed as a space too)
           % because function `Yc` (`strcat`) strips  off trailing space from the
           % inputs, counting char 0 as space, but not char 1
'||\'      % Push this string
3:(        % Assign it to the first 3 entries of the matrix (column-major), that is, 
           % to the top of the first column
95         % Push ASCII for '_'
'Zd'o      % Push string 'Zd' and convert to numbers: gives [90 100]. These are the
           % (column-major) indices where the '_' char should appear in the last row
(          % Fill those chars
           % Implicitly display. (Chars 0 and 1 are displayed as space)

14
Луис Мендо, это впечатляет. Я бы проголосовал дважды, если бы мог. Я думал, что это будет несжимаемым вызовом для колмогоров. Спасибо, что доказали меня неправильно!
Рохан Джунджхунвала

3
@Rohan Спасибо за твои добрые слова!
Луис Мендо

1
: D Нет проблем! : D
Рохан Джунджхунвала

3
+1 за то, :)что появляется в вашем коде.
Эрик Outgolfer

2
@Neil Посмотри на яркую сторону жизни ...
Эрик Аутгольфер

37

Perl, 93 байта

$_=bpi$=;printf'()'x6x!$`.'
%12s',F.ee x!$\--^substr"\32::\\$&|",-12while/.{$\}/g

Требуется параметр командной строки -l71Mbignum=bpi, считается как 14. \32Должен быть заменен литеральным символом 26.

Образец использования

$ perl -l71Mbignum=bpi pi-slice.pl
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|

Perl, 111 байт

$_=bpi$_*($l=($.=$_)-3);printf'()'x($./2)x!$`."
%$.s",F.ee x!$l--^substr"\32::\\$&|",-$.while/.{$l}/g

Параметризованная версия. Требуется опция командной строки -nMbignum=bpi, считается 12.

Образец использования

$ echo 10 | perl -nMbignum=bpi pi-slice.pl
()()()()()
|\3.14159|
|:\265358|
\::\97932|
 \::\3846|
  \::\264|
   \::\33|
    \::\8|
     \__\|

$ echo 20 | perl -nMbignum=bpi pi-slice.pl
()()()()()()()()()()
|\3.141592653589793|
|:\2384626433832795|
\::\028841971693993|
 \::\75105820974944|
  \::\5923078164062|
   \::\862089986280|
    \::\34825342117|
     \::\0679821480|
      \::\865132823|
       \::\06647093|
        \::\8446095|
         \::\505822|
          \::\31725|
           \::\3594|
            \::\081|
             \::\28|
              \::\4|
               \__\|

25

JavaScript (ES6), 187 174 байта

Это на 1 байт короче, чем просто отображение простого текста.

for(y=n=0,s=`()()()()()()
`;y<10;y++,s+=`|
`)for(x=-2;x++<9;)s+=x>y?(Math.PI+'2384626433832795028841971693')[n++]:`\\${y>8?'__':x+1|y>2?'::':'||'}\\`[y-x]||' ';console.log(s)


1
Разве это не на один байт короче console.log ("") + 12 * 11 символов + 18 обратных слешей + 10 разрывов строки?
Тит

@ Titus - Ты прав. Я забыл сосчитать обратную косую черту. Спасибо!
Арно

18
Мягко интересно, но 2384626433832795028841971693, оказывается, простое.
ElementW

1
@ElementW - Забавно, что ты упомянул об этом, потому что я тоже это проверял. :)
Арно

Будет ли запись числа в шестнадцатеричном виде и преобразование его в строку сэкономить байты?
Ник Хартли

17

Python 2, 131 байт

print'()'*6+'\n|\\3.1415926|\n|:\\53589793|'
for n in 2384626,433832,79502,8841,971,69,3,'':print'%11s|'%('\%s'*2%('_:'[n<'']*2,n))

Совместные усилия между Sp3000 и Линн. Медь тоже спасла байт! Идеальная ссылка.


Это элегантно +1
ElPedro

Вы должны быть в состоянии сохранить 1 байт, удалив скобки в forцикле.
Медь

16

/// , 129 127 байт

/-/\\\\//&/--::--//%/  //#/|
%//!/()()/!!!
|-3.1415926|
|:-53589793|
&2384626|
 &433832#&79502# &8841#%&971#% &69#%%&3#%% -__-|

Попробуйте онлайн!


-2 байт , если вы /!/()()/!!!вместо того , чтобы ()()()()()()заменить /#/|\n%%/с /#/|\n%/и настроить остальную часть кода , чтобы заставить его работать с этим.
Акролит

@daHugLenny О, спасибо, я не знал, что 4 * 3 был подходящим кандидатом на замену. Для вашего второго предложения, я думаю, это будет дольше.
Эрик Outgolfer

@daHugLenny ^^ Я могу подтвердить, что ваше второе предложение действительно длиннее.
Эрик Outgolfer


@DestructibleWatermelon Я сделал это намеренно. Есть также другие лица: -:, :-, :-и -__-.
Эрик Outgolfer

12

Баш, 153 байта

cat << _
()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
_

9
Учитывая, что многие другие ответы попали в ловушку создания кода дольше, чем печать буквального пирога , я думаю, что это действительно умный ответ. Кроме того, по моим подсчетам это всего 153 байта.
Линн

3
@Lynn Тем не менее, это просто вывод примера на вывод без попытки игры в гольф, и поэтому не рекомендуется. По крайней мере, другие ответы приложили усилия ...
Бета-распад

Вы можете удалить пробелы до и после <<. А у вас есть 153 байта.
TuxCrafting

1
Разве echo '()()()()()()...\__\|'4 байта не короче?
Нил

@ Линн, я рада, что у меня не было этой проблемы; Пакет требует 100 байтов накладных расходов, чтобы просто напечатать пирог.
Нил

9

Пакет, 195 байт

@echo ()()()()()()
@echo ^|\3.1415926^|
@echo ^|:\53589793^|
@set i=\
@for %%d in (2384626 433832 79502 8841 971 69 3)do @call:l %%d
@echo %i%__\^|
@exit/b
:l
@set i= %i%
@echo%i%::\%1^|

5

Turtlèd , 135 129 байтов (не конкурирует)

(Интерпретатор на самом деле немного не работает (больше:]) , но это не влияет на эту программу )

Перестроив и переписав мою программу, я сыграл в гольф ... шесть байт

И теперь я должен сделать новое объяснение ...

Тем не менее, могут быть более короткие исследования, хотя


По крайней мере, лучшее решение в этом языке не просто запись в необработанных данных ¯ \ _ (ツ) _ / ¯


#3.141592653589793238462643383279502884197169#")()()()()()">10:[)'|l]:[)d'\l]d"(||"2uuu[|;"::"uuu];>"__"[|r'\d]dl[ l[|.+l][\r]ul]

Попробуйте онлайн

объяснение

Честно говоря, это не очень хорошо описывает реальную программу, но дает подсказки о командах, так что вы можете понять немного лучше

#3.141592653589793238462643383279502884197169# Some pi. Set the string to thing between #s
                                               the last digit was same as first, and the
                                               string wraps, so digit could be removed
")()()()()()"  Write this string, by writing char 1 to current cell, moving right, char 2...

>              turn right

10             set register to ten

:[)'|l]:       move right by amount in register, while current cell isn't ), write |
               and move left. move right by amount in register

[)d'\l]        while cell is not (, move down, write \, move left

d"(||"         move down and string-write "(||"

2              set register to 2

uuu[|;"::"uuu] Move up three, and while the cell is not |, move down by
               register (2), string-write "::", move up three

               Just remember the turtle is currently pointing right, so up is right.

;>"__"         move down by amount in register, turn right, string-write "__"

[|r'\d]dl      while cell is not |{ move right, write \, move down}, move down, left

Сложная вещь: вложенные петли

[ l[|.+l][\r]ul]

Пока текущая ячейка не является пробелом {переместиться влево, выполнить цикл: (пока ячейка не |, записать текущий символ строковой переменной (помните, что pi?), Увеличить указатель строки, переместиться влево), выполнить цикл: (пока ячейка не \, двигаться вправо), двигаться вверх, влево}


Почему не конкурирует?
programmer5000

не соревноваться означает, что это новее, чем вызов
Разрушаемый Лимон

5

Фурье, 196 190 байтов

Новая функция оповещения!

Код

|SaCaaSa|f|~Y0~jY(32aj^~j)|w6(40a41ai^~i)10a~N124a~W92a~S3o46a1415926oWaNaWa58a~CSa53589793oWaNaf2384626oWaNa1wf433832oWaNa2wf79502oWaNa3wf8841oWaNa4wf971oWaNa5wf69oWaNa6wf3oWaNa7wSa95aaSaWa

объяснение

Эта программа - моя первая демонстрация функций в Фурье:

Функции определены так:

|code goes here|f

Первый канал запускает объявление функции. Затем вы помещаете код между трубами. Последний канал завершает объявление функции. Наконец, fпеременная, в которой хранится функция. Это может быть любой символ, если он не является зарезервированной функцией.

Например, в моем коде одна из функций s:

|SaCaaSa|f

Где переменная Sхранит число 92 и Cхранит число 58.

При вызове функция выдает следующее:

\::\

Так как это самая повторяющаяся вещь в пироге.

Точно так же, чтобы выйти из игры, я использовал цикл:

6(40a41ai^~i)

Который повторяет код 40a41a6 раз. 40a41aна собственных выходах:

()

Таким образом, повторяя код шесть раз выводит:

()()()()()()

Тем самым выводится корочка пирога.

Попробуйте это на FourIDE!

Поскольку я не реализовал функции в интерпретаторе Python, эта программа не будет работать на http://tryitonline.net


4

Pyth, 89 байт

J_2K+.n0."09\07´\C2\84J\01£\07Nl:?í"*"()"6Vr9Zp*dJp?!Z\|?qZ9"|:""\::"p\\p:KZ+ZN\|=+ZN=hJ)p*dJ"\__\|"

Попробуйте онлайн!

Замените \xx(шестнадцатеричное) на соответствующий символ ASCII, если вы копируете / вставляете код из этого ответа; он содержит непечатаемые символы в упакованной строке, которую отфильтровывает SE.

объяснение

J_2        Sets J to -2
  .n0      Pi; returns 3.141592653589793
  ."(...)" Packed string; returns "2384626433832795028841971693"
 +         Concatenation; returns "3.1415926535897932384626433832795028841971693"
K          Sets K to that string
*"()"6     Repetition; returns "()()()()()()", which is implicitly printed with a newline
 r9Z       Range; returns [9, 8, 7, 6, 5, 4, 3, 2, 1] (Z is initialized to 0)
V          Loop through r9Z, using N as the loop variable
  *dJ      Repetition; d is initialized to " " (returns an empty string if J <= 0)
 p         Print without a newline
  ?!Z      Ternary; if not Z
   \|      then return "|"
   ?qZ9    else, ternary; if Z == 9
    "|:"   then return "|:"
    "\::"  else, return "\::"
 p         Print without a newline
  \\       One-character string; returns "\"
 p         Print without a newline
  :KZ+ZN   Slice; returns K[Z:Z+N], not including K[Z+N]
 p         Print without a newline
 \|        One-character string; returns "|", which is implicitly printed with a newline.
 =+ZN      Adds N to Z
 =hJ       Increments J by 1
)          Ends loop
 *dJ       Repetition; d is initialized to " "
p          Print without a newline
"\__\|"    Returns "\__\|", which is implicitly printed with a newline

4

Желе , 83 байта

конечно все еще довольно Golfabale

7Ḷ⁶ẋ;€“\::\”“|:\”ṭṙ7
⁾()ẋ6⁷⁾|\8ØPæp”|⁷8RUR€µ“⁾ḅ|Za"~ṅỵþȷ^ṇ⁷Ċ’Dṁ;€”|ż@¢Y⁷ø⁶ẋ7“\__\|”

TryItOnline

Как?

7Ḷ⁶ẋ;€“\::\”“|:\”ṭṙ7 - Link 1, left side padding and filling
7Ḷ                   - lowered range of 7 ([0,1,2,3,4,5,6])
      “\::\”         - filling ("\::\")
  ⁶ẋ;€               - space character repeated that many times and concatenate for each
            “|:\”    - top crust edge filling ("|:\")
                 ṭ   - tack (append to the end)
                  ṙ7 - rotate to the left by 7 (move top crust filling to the top)

⁾()ẋ6⁷⁾|\8ØPæp”|⁷8RUR€µ - Main Link (divided into two for formatting)
⁾()ẋ6⁷                  - "()" repeated 6 times and a line feed
      ⁾|\               - "|\"
          ØP            - pi
         8  æp          - round to 8 significant figures (top edge of the glaze)
              ”|⁷       - "|" and a line feed
                 8R     - range of 8 ([1,2,3,4,5,6,7,8])
                   U    - reverse ([8,7,6,5,4,3,2,1])
                    R€  - range for each ([[1,2,..8],[1,2,..7],...,[1,2],[1]])
                      µ - monadic chain separation

“⁾ḅ|Za"~ṅỵþȷ^ṇ⁷Ċ’Dṁ;€”|ż@¢Y⁷ø⁶ẋ7“\__\|” - Main link (continued)
“⁾ḅ|Za"~ṅỵþȷ^ṇ⁷Ċ’                       - base 250 representation of the rest of the digits
                 D                      - decimalise (makes it a list)
                  ṁ                     - mould (into the shape of the array formed above)
                     ”|                 - "|"
                   ;€                   - concatenate for each
                         ¢              - call last link (1) as a nilad
                       ż@               - zip (with reversed operands)
                          Y⁷            - join with line feeds, and another line feed
                            ø           - niladic chain separation
                             ⁶ẋ7        - space character repeated 7 times
                                “\__\|” - "\__\|" the very bottom of the pie wedge

2
Ух ты, это самая длинная программа Jelly, которую я когда-либо видел: o
Beta Decay

@ BetaDecay, без сомнения, это может быть сделано в 11 байтов ...
Джонатан Аллан

3

Python 2, 193 176 байт

P="3.1415926 53589793 2384626 433832 79502 8841 971 69 3".split()
f="()"*6+"\n|\%s|\n|:\%s|\n"%(P[0],P[1])
for s in range(7):f+=" "*s+"\::\\"+P[s+2]+"|\n"
print f+" "*7+"\__\|"

Или более короткий и скучный ответ:

print r"""()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|"""

3
Знаете ли вы, что print r'''(the pie)'''на 38 байт короче? :)
Линн

+1 за ваше второе усилие, но использование одинарных кавычек делает просмотр короче. Счетчик пикселей лучше :)
ElPedro

3

C # 220 213 209 208 202 201 (171 *) байт

* Я считаю, что это неоригинально и измена

void F()=>Console.Write(@"()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|");

201 байт:

void f(){var s="()()()()()()\n";for(int i=0;i<9;)s+=(i<1?"|":i<2?"|:":"\\::".PadLeft(i+1))+$"\\{new[]{3.1415926,53589793,2384626,433832,79502,8841,971,69,3}[i++]}|\n";Console.Write(s+@"       \__\|");}

220 байт:

Я уверен, что здесь есть что поиграть в гольф

void f(){string s="()()()()()()\n",x="       ";for(int i=9,j=0;i>0;j+=i--)s+=(i>7?"|"+(i<9?":":"")+"\\":x.Substring(i)+@"\::\")+$"{Math.PI}32384626433832795028841971693".Substring(j,i)+"|\n";Console.Write(s+x+@"\__\|");}

Спасибо за ответ! Вы можете сохранить хотя бы один байт, удалив лишний пробел в .Substring(j, i).
Медь

Это было упущением из-за автоматического форматирования в VS, но я все равно сохранил кучу другим способом =)
pinkfloydx33

Анонимная функция, возвращающая круговую диаграмму, на> 25% короче: ()=>@"(pie)"на 149 байт .
Линн

Это также скучно и похоже на измену. Правила говорят, чтобы печатать, а не возвращаться
pinkfloydx33

@ pinkfloydx33 Печать и возврат разрешены по умолчанию в соответствии с соглашением сообщества.
mbomb007

3

PowerShell , 105 байт

'()'*6
'|\3.1415926|
|:\53589793|'
2384626,433832,79502,8841,971,69,3|%{" "*$i+++"\::\$_|"}
' '*7+'\__\|'

Попробуйте онлайн!

Не уверен, что я никогда не отвечал на этот вызов ... Я проголосовал за него и некоторые другие ответы. Ну что ж, лучше поздно, чем никогда?

Это помещает шесть сбалансированных паренов в строку в конвейере, а затем в буквальную строку (сохраняет два байта) следующих двух строк. Затем мы перебираем остальные числа, каждую итерацию увеличивая количество соединенных пробелов с пробелами ( $i) \::<number>|. Наконец, мы создаем строку кончика пирога. Все эти строки остаются в конвейере, и неявный Write-Outputвводит новую строку между ними.

Это на 39 байт короче, чем просто печать пирога.


3

Древесный уголь , 31 байт

×⁶()↙↓¹⁰↖↖¹⁰↓↓²↘⁸M↑__↖←¤:↗¤UGPi

Попробуйте онлайн!

Вы можете быть удивлены: что это за колдовство? Как вы можете заполнить UGPi? Ну, Charcoal начинает получать поддержку Wolfram Language, в надежде, что когда-нибудь он сможет конкурировать в большем количестве испытаний!

Предыдущий, 71 байт

×⁶()↙↓¹⁰↖↖¹⁰↓↓²↘⁸M↑__↖←¤:↗¤3.141592653589793238462643383279502884197169

Попробуйте онлайн!

Подробный

Print(Multiply(6, "()"));
Move(:DownLeft)
Print(:Down, 10)
Move(:UpLeft)
Print(:UpLeft, 10)
Move(:Down)
Print(:Down, 2)
Print(:DownRight, 8)
Move(:Up)
Print("__")
Move(:UpLeft)
Move(:Left)
Fill(":")
Move(:UpRight)
Fill("3.141592653589793238462643383279502884197169")

Обратите внимание, что это отличается, так как девербосификатор автоматически сжимает строки и не удаляет избыточные команды.

С сжатыми строками, 52 байта

×⁶¦()↙↓¹⁰↖↖¹⁰↓↓²↘⁸↑__↖←¤:M↗¤”i¶∧²uτ¶R›    §Q´⌈#_⮌POÞ”

выход xxd

0000000: aab6 ba28 291f 14b1 b01c 1cb1 b014 14b2  ...()...........
0000010: 1eb8 125f 5f1c 11ef 3acd 1def 0469 0a01  ...__...:....i..
0000020: b275 f40a 52be 0999 9fa4 d1e0 1a23 5f86  .u..R........#_.
0000030: d04f de04                                .O..

Попробуйте онлайн!


2

PHP, 170 байт

нет произвольной точности Pi в PHP? Вычисление занимает гораздо больше места, чем копирование и вставка. Не имеет значения, что последняя цифра здесь вырезана, а не округлена; но в 64-битном Пи последняя цифра округляется.

for(;$i<11;)echo str_pad($i?["\\__\\","|\\","|:\\","\\::\\"][$i>9?0:min(3,$i)].[3.1415926,53589793,2384626,433832,79502,8841,971,69,3][$i-1]."|
":"
",13,$i++?" ":"()",0);

Бежать с php -r '<code>'

без комментариев разбивка

for(;$i<11;)
    echo str_pad($i?
         ["\\__\\","|\\","|:\\","\\::\\"][$i>9?0:min(3,$i)]
        .[3.1415926,53589793,2384626,433832,79502,8841,971,69,3][$i-1]
        ."|\n"
    :"\n"
    ,13,$i++?" ":"()",0);

В выводе отсутствует 1 пробел (который можно исправить, изменив его 13с помощью a 14). И, по какой-то причудливой причине, вам не хватает закрывающей скобки вверху. Внесение изменений фиксирует вывод.
Исмаэль Мигель

Ответы PHP нуждаются в <?phpтеге, иначе они просто выдают постоянный вывод PHP Привет, Мир! на самом деле зависит от этого. Тем не менее, если говорить о постоянном выводе, ответ PHP, который содержит буквальный торт и никакой <?phpтэг вообще, побил бы ваш с большим отрывом ...
Линн

@Lynn: PHP не нужен <?phpтег, когда вы запускаете его -r.
Титус

2

Python 2, 183 171 байт

p,d=[2384626,433832,79502,8841,971,69,3],"|\n"
c=("()"*6)+d[1]+"|\\"+`3.1415926`+d+"|:\\"+`53589793`+d
for x in range(7):c+=" "*x+"\\::\\"+`p[x]`+d
print c+" "*7+"\\__\\|"

На самом деле ничего умного не делает. Просто создайте большую строку и распечатайте ее.

РЕДАКТИРОВАТЬ

Уменьшено до 171 после прочтения @ Линн ответа и обучения. Извините, если неправильно (беззастенчиво) красть у вас несколько байтов без вашего ведома. Пожалуйста, скажите мне, если так, и я откату изменения.

Выход

python pi.pie.py

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|

Вы знаете, что print r'''(the pie)'''на 28 байт короче? :)
Линн

@ Линн Разве это не обман? ;-)
ElPedro

Это не обман, просто не очень интересно (и нам не нужен этот ответ для каждого языка, IMO. Ответа bash достаточно). Больше похоже на то, что вы хотели бы упомянуть, когда публикуете ответ, подобный этому, чтобы признать, что ваша попытка игры в гольф закончилась потерей. Возможно, все еще стоит опубликовать на тот случай, если кто-то еще найдет способ взять вашу идею игры в гольф и улучшить ее, возможно, победив наивный подход.
Питер Кордес

Я принимаю ваши комментарии на борт @Peter. Я не пытался быть неуважительным, поэтому смайлик. Любой человек может просто распечатать ASCII художественный вызов, как это. Я довольно новичок в этом и здесь, чтобы учиться. Если это что-то значит, я добавил комментарий и +1 к ответу Линн, когда увидел, что это не просто печатное заявление, а решение проблемы таким образом, что полностью превзошло мои усилия. Я узнал ...
ElPedro

Пока в вашем ответе все еще другой подход, можно получать идеи из других ответов (на том же языке или нет). Единственное, что было бы не в порядке, - это если бы ваш ответ в точности совпадал с кодом Линн. Обычно, если вы видите небольшое улучшение в ответе другого человека, вы предлагаете это в комментарии. Но если у вас появилось несколько новых идей после просмотра чужого ответа, вы даже можете опубликовать улучшенную версию в качестве нового ответа. Я не совсем уверен в этикете этого, но я думаю, что все в порядке, если ваш ответ значительно отличается.
Питер Кордес

2

Рубин, 140 138 137 байт

Мое решение этой проблемы в ruby, это мой первый ответ на гольф-код: D

[0,2384626,433832,79502,8841,971,69,3,1].map{|n|puts n<1?"()"*6+"\n|\\3.1415926|\n|:\\53589793|":"\\#{n>1?"::\\#{n}":"__\\"}|".rjust(12)}

Читаемая версия и объяснение:

for n in [-1,2384626,433832,79502,8841,971,69,3,0]
  if n < 0 # n == -1
    puts "()"*6+"\n|\\3.1415926|\n|:\\53589793|"
  else
    if n > 0 # digits of pi
      puts "\\::\\#{n}|".rjust(12)
    else # edge of pie
      puts "\\__\\|".rjust(12) 
    end
  end
end

Ничего особо умного, просто используя несколько простых циклов :)

Выход:

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|

2
Добро пожаловать в PPCG! Хороший первый пост!
Rɪᴋᴇʀ

2

Stax , 63 байта

ü?½Pi<Θ*q}ü¿▒5Ç>cdƒ±<Gw►,─ô╟▒g•iâÑ♠514Φ⌂!Ñεùáèè♂ÑD╔«dÿ47¡ô#UV•╧

Запускать и отлаживать онлайн!

Короче, чем принятый ответ MATL. Это было бы определенно короче, если бы в Stax сохранялось больше цифр как константа pi.

(Что это Pi<0в коде?)

объяснение

Для объяснения использует эквивалент ASCII, который

.()6*PVP$2ME.|\a+"|:\"a+"!RNyb2L$-!mV=223w+&O-"!{"\::\"s$+mELr"\__\"]+|>m'|+

Expalantion:

.()6*PVP$2ME.|\a+"|:\"a+
.()                           "()"
   6*P                        Print 6 times
      VP$                     First two lines of pi in the output
         2ME                  Push the two lines separately on the stack
            .|\a+             Prepend the first line with "|\"
                 "|:\"a+      Prepend the second line with "|:\"

"..."!{"\::\"s$+mELr"\__\"]+|>m'|+
"..."!                                [2384626,433832,79502,8841,971,69,3]
      {"\::\"s$+m                     Convert each element to a string and prepend "\::\"
                 ELr                  Prepend the first two lines to array
                    "\__\"]+          Append "\__\" to the converted array
                            |>        Right align text
                              m'|+    Append "|" to each array element and print

1

Java 7, 260 236 191 байт

String d(){return"()()()()()()\n|\\3.1415926|\n|:\\53589793|\n\\::\\2384626|\n \\::\\433832|\n  \\::\\79502|\n   \\::\\8841|\n    \\::\\971|\n     \\::\\69|\n      \\::\\3|\n       \\__\\|";}

Вздох, просто вывод пирога короче, даже со всеми избежавшими обратными слешами ..>.>
Вот предыдущий ответ с небольшим количеством денег, хотя все еще не очень общий или причудливый ( 236 байтов ):

String c(){String n="\n",p="|",q=p+n,x="\\::\\",s=" ",z=s;return"()()()()()()"+n+p+"\\"+3.1415926+q+p+":\\53589793"+q+x+2384626+q+s+x+433832+q+(z+=s)+x+79502+q+(z+=s)+x+8841+q+(z+=s)+x+971+q+(z+=s)+x+69+q+(z+=s)+x+3+q+(z+=s)+"\\__\\|";}

Довольно скучный ответ, поскольку простой вывод результата без особых изысков в Java короче, чем общий подход.

Ungolfed & тестовый код:

Попробуй это здесь.

class M{
  static String c(){
    String n = "\n",
           p = "|",
           q = p + n,
           x = "\\::\\",
           s = " ",
           z = s;
    return "()()()()()()" + n + p + "\\" + 3.1415926 + q + p + ":\\53589793" + q + x + 2384626 + q + s
            + x + 433832 + q + (z += s) + x + 79502 + q + (z += s) + x + 8841 + q 
            + (z += s) + x + 971 + q + (z += s) + x + 69 + q + (z += s) + x + 3 + q
            + (z += s) + "\\__\\|";
  }

  public static void main(String[] a){
    System.out.println(c());
  }
}

Выход:

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|

1

Qbasic, 175 байт

?"()()()()()()":?"|\3.1415926|":?"|:\53589793|":?"\::\2384626|":?" \::\433832|":?"  \::\79502|":?"   \::\8841|":?"    \::\971|":?"     \::\69|":?"      \::\3|":?"       \__\|"

1

Луа, 152 байта

print[[()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|]]

Попробуйте, как я мог, я не мог сжать этот пи.

Луа слишком многословен, чтобы сделать это, может быть, пи больше, но не этот.

Другое решение, 186 байт.

s="()()()()()()\n|\\3.1415926|\n|:\\53589793|\n"i=0 for z in('2384626|433832|79502|8841|971|69|3|'):gmatch'.-|'do s=s..(' '):rep(i)..'\\::\\'..z.."\n"i=i+1 end print(s..'       \\__\\|')

Досадно, что пи Луа не достаточно точны, чтобы даже заполнить пи. :(


1

Javascript, 172 байта

Вставьте в консоль для запуска.

for(y=n=0,s=`()()()()()()
`;y<10;y++,s+=`|
`)for(x=-2;x++<9;)s+=x>y(Math.PI+'2384626433832795028841971693'[n++]:`\\${y>8?'__':x+1|y>1?'::':'||'}\\`[y-x]||' ';console.log(s)

Добро пожаловать в PPCG! Просто чтобы вы знали, вы можете отформатировать свой код с четырьмя пробелами (см. Мое редактирование). Кроме того, поместите количество байтов в вашей программе в верхней части вашего ответа (например Javascript: 100 bytes).
clismique

Кажется, есть странные синтаксические ошибки, вы можете их исправить?
programmer5000

1

JavaScript (ES6), 170 байт, 165 байт

немного "обманут", так как при запуске на консоли будет отображаться возвращаемое значение

v=0;("()()()()()()\n|9|:87654321".replace(/\d/g,(o)=>"\\"+(Math.PI+'2384626433832795028841971693').substr(v,o,v-=-o)+"|\n"+(o<9?" ".repeat(8-o)+(o>1?"\\::":"\\__\\|"):""))

После некоторого разговора функция выглядит следующим образом (функция должна вызываться с параметром со значением 0):

v=>`()()()()()()
 |9 |:87654321\\__\\|`.replace(/\d/g,o=>`\\${(Math.PI+"2384626433832795028841971693").substr(v,o,v-=-o)}|
${" ".repeat(9-o)+(o<9&o>1?"\\::":"")}`)

Если вы хотите вызвать функцию 167 байт:

z=v=>`()()()()()()
 |9 |:87654321\\__\\|`.replace(/\d/g,o=>`\\${(Math.PI+"2384626433832795028841971693").substr(v,o,v-=-o)}|
${" ".repeat(9-o)+(o<9&o>1?"\\::":"")}`)


/*could be run like this or directly in the console*/
console.info("\n"+z(0));


1: нуждается в дополнительном закрытии парен. 2: заменить "|\n"на |<newline>где <newline>буквальный перевод строки. 3: Добавьте y=>к началу, и это не будет обманом. 4: Добро пожаловать на сайт!
programmer5000

1
@ programmer5000 спасибо за ваш вклад, я использовал его в своей последней настройке. :-D
winner_joiner

Сохраните 2 байта, удалив ()включающий vпараметр. Ваш вывод, кажется, имеет дополнительное пространство перед 2-й и 3-й строками. Кроме того, вам не нужно передавать 0в качестве аргумента, ваша функция будет нормально работать без него, и это также не разрешено вызовом.
Лохматый

да спасибо, у меня было значение по умолчанию. :-D
winner_joiner

0

PHP, 142 байта

Подлый-подлый :) phpпросто распечатывает все, не пытаясь интерпретировать их как код PHP, если он не видит никаких <?php ?>пар.

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.