Випікаємо шматочок пі


82

Напишіть програму або функцію, яка друкує або виводить саме цей текст (складається з 142 символів):

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

Ваша програма не повинна брати жодного вводу (за винятком мов, де це неможливо, наприклад sed), і виводити текст вище (і лише вищевказаний текст) як вихід. Прийнятний новий рядок прийнятний.

Це , тому найкоротша відповідь (у байтах) виграє.


9
@RohanJhunjhunwala Для підтвердження того, що це можна стиснути, це зробив Луїс Мендо .
Ерік Аутгольфер

1
Лол, я виявив помилку (і я радий!) Дуже вражаючий
Rohan Jhunjhunwala

2
Ви холодні змусили їх взяти цілий вхід N, щоб вивести фрагмент, число якого ()вгорі дорівнює N. Це було б дуже складно тхо.
user6245072

5
Тільки щоб ви знали, вам потрібно 43 десяткових знаки π.
Ерік Аутгольфер

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
Луїс Мендо, це вражає. Я б схвалив двічі, якби міг. Я подумав, що це буде нестислимий колгогоров. Дякую, що довели мене неправильно!
Rohan Jhunjhunwala

3
@Rohan Дякую за добрі слова!
Луїс Мендо

1
: D Немає проблем! : D
Rohan Jhunjhunwala

3
+1 для того, :)що з’являється у вашому коді.
Erik the 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 та Lynn. Мідь теж врятував байт! Ідеонне посилання.


Це елегантно +1
ElPedro

Ви повинні мати можливість зберегти 1 байт, видаливши дужки в forциклі.
Мідь

16

/// , 129 127 байт

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

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


-2 байт , якщо ви /!/()()/!!!замість того , щоб ()()()()()()замінити /#/|\n%%/з /#/|\n%/і налаштувати іншу частину коду , щоб змусити його працювати з цим.
акроліт

@daHugLenny О, дякую, я не знав, що 4 * 3 був дійсним кандидатом на заміну. Що стосується вашої другої пропозиції, я думаю, це буде довше.
Ерік Аутгольфер

@daHugLenny ^^ Я можу підтвердити, що ваша друга пропозиція дійсно довша.
Ерік Аутгольфер


@DestructibleWatermelon Я це робив навмисно. Є також інші особи: -:, :-, :-і -__-.
Ерік Аутгольфер

12

Баш, 153 байти

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

9
Зважаючи на те, скільки інших відповідей потрапило в пастку створення коду довше, ніж друк буквального пирога , я думаю, що це справді розумна відповідь. Крім того, це лише 153 байти по моєму підрахунку.
Лінн

3
@Lynn Тим не менш, це просто скидання прикладу на вихід без спроб проведення гольфу, і так не рекомендується. Принаймні інші відповіді доклали зусиль ...
Бета-розпад

Ви можете видалити пробіли до і після <<. А ваш номер рахунку становить 153 байти.
TuxCrafting

1
Чи не echo '()()()()()()...\__\|'4 байти коротше?
Ніл

@Lynn Я радий, що у мене не було такої проблеми; Пакет вимагає 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]

Поки поточна комірка не є пробілом {переміститься ліворуч, виконайте цикл: (Хоча клітинка не | рухатися вправо), рухатися вгору, вліво}


Чому не змагаються?
програміст5000

не конкурувати означає, що це новіше, ніж виклик
знищений лимон

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 байти

напевно, ще досить голфабале

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
Нічого собі, це найдовша програма, яку я коли-небудь бачив: o
Beta Decay

@BetaDecay, без сумніву, це можна зробити в 11 байт ...
Джонатан Аллан

3

Пітон 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? Ну, вугілля починає отримувати підтримку мови Wolfram, сподіваючись, що одного дня він може бути конкурентоспроможним у більшій кількості викликів!

Попередній, 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? Обчислення займає набагато більше місця, ніж Copy & Paste. Не має значення, що остання цифра тут вирізана, а не округла; але в 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);

На виході відсутнє пробіл (який ви можете виправити, змінивши це за 13допомогою a 14). І з якоїсь химерної причини вам не вистачає дужок, що закриваються вгорі. Внесення змін фіксує вихід.
Ісмаїл Мігель

Для відповідей PHP потрібен <?phpтег, інакше вони просто дають постійний вихід. PHP Привіт, світ! насправді від цього залежить. Однак, кажучи про постійний вихід, відповідь PHP, яка просто містить буквальний пиріг, і жоден <?phpтег взагалі не переможе ваших за великим запасом…
Lynn

@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+"\\__\\|"

Не справді нічого розумного. Просто створюється велика рядок, після чого роздруковується.

EDIT

Зменшено до 171 після прочитання відповіді @ Лінн та навчання. Вибачте, якщо неправильно (безсоромно) вкрасти у вас кілька байт, не пропонуючи це. Скажіть, будь ласка, якщо це так, і я поверну зміни.

Вихідні дані

python pi.pie.py

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

Чи знаєте ви, що print r'''(the pie)'''на 28 байт коротше? :)
Лінн

@Lynn Це не обман? ;-)
ElPedro

Це не обман, просто не дуже цікаво (і нам не потрібна відповідь на кожній мові, IMO. Відповідь на башти достатня). Більше схоже на те, що ви хотіли б згадати, публікуючи подібну відповідь, щоб визнати, що ваша спроба в гольфі закінчилася втратою. Можливо, все-таки варто опублікувати, якщо хтось інший побачить спосіб взяти вашу ідею з гольфу та вдосконалити її, можливо, обіграє наївний підхід.
Пітер Кордес

Я приймаю ваші коментарі на борту @Peter. я не намагався бути неповажним, отже, смайлик. Кожен може просто роздрукувати подібний виклик мистецтва ASCII. Я досить новий у цьому, і я тут, щоб навчитися. Якщо це означає що-небудь, я поставив коментар та +1 на відповідь Лінни, коли побачив, що це не просто друкована заява, а вирішено питання таким чином, що повністю перевершило мої зусилля. Я дізнався ...
ElPedro

Поки ваша відповідь все ще має інший підхід, добре отримувати ідеї з інших відповідей (тією ж мовою чи ні). Єдине, що було б не нормально, якби у вашій відповіді був абсолютно той самий код, що і у Лінни. Зазвичай, якщо ви побачите незначне поліпшення чужої відповіді, запропонуйте це у коментарі. Але якщо у вас є кілька нових ідей, побачивши чужу відповідь, ви навіть можете опублікувати свою вдосконалену версію як нову відповідь. Я не зовсім впевнений в етикеті цього, але думаю, що це добре, якщо ваша відповідь суттєво відрізняється.
Пітер Кордес

2

Рубі, 140 138 137 байт

Моє рішення цієї проблеми в рубіні, це моя перша відповідь на гольф з кодом: 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

Стакс , 63 байти

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

Запуск та налагодження в Інтернеті!

Коротше, ніж прийнята відповідь MATL. Однозначно було б коротше, якби більше цифр зберігалося як константа pi в Stax.

(Що це Pi<0в коді?)

Пояснення

Використовує еквівалент ASCII для пояснення, що таке

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

Розширення:

.()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 коротше, ніж загальний підхід.

Невикористаний і тестовий код:

Спробуйте тут.

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).
Кверп-Дерп

Здається, є дивні синтаксичні помилки, чи можете ви їх виправити?
програміст5000

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: Ласкаво просимо на сайт!
програміст5000

1
@ programmer5000 дякую за ваш внесок, я використав це на останньому налаштуванні. :-D
переможець_joiner

Збережіть 2 байти, видаливши параметр, ()що додається v. Схоже, у вашого виходу є додаткове місце перед другим та третім рядками. Крім того, вам не потрібно передавати 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.