Nướng một lát Pi


82

Viết chương trình hoặc chức năng in hoặc xuất văn bản chính xác này (bao gồm 142 ký tự):

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

Chương trình của bạn phải không có đầu vào (ngoại trừ trong các ngôn ngữ không thể, chẳng hạn như sed) và tạo ra văn bản trên (và chỉ văn bản trên) làm đầu ra. Một dòng mới có thể được chấp nhận.

Đây là , vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.


9
@RohanJhunjhunwala Để chứng minh rằng điều này có thể được nén, Luis Mendo đã làm điều đó .
Erik the Outgolfer

1
Lol, tôi đã được chứng minh là sai (và tôi rất vui!) Rất ấn tượng
Rohan Jhunjhunwala

2
Bạn lạnh lùng đã khiến họ lấy một số nguyên đầu vào N để xuất ra một lát có số ()ở trên cùng là N. Nó sẽ rất phức tạp.
dùng6245072

5
Chỉ để bạn biết, bạn cần 43 chữ số thập phân của số thập phân.
Erik the Outgolfer

4
Rất gần với ý nghĩa của cuộc sống ....
A. Mirabeau

Câu trả lời:


90

MATL , 70 68 67 byte

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

Hãy thử trực tuyến!

Giải trình

Thật là một mớ hỗn độn. Nhưng này, có một tổ hợp!

Giải thích sẽ rõ ràng hơn nếu bạn có thể kiểm tra nội dung ngăn xếp sau một tuyên bố nhất định . Để làm điều đó, chỉ cần chèn X#0$%vào thời điểm đó. (Điều này có nghĩa là: X# hiển thị nội dung ngăn xếp, 0$không hiển thị ngầm bất cứ điều gì khác, %nhận xét phần còn lại của mã). Ví dụ, xem ngăn xếp ngay sau khi tích chập .

'()'       % 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
Luis Mendo, điều này thật ấn tượng. Tôi sẽ upvote hai lần nếu tôi có thể. Tôi nghĩ rằng đây sẽ là một thử thách kolmogorov không thể nén được. Cảm ơn bạn đã chứng minh tôi sai!
Rohan Jhunjhunwala

3
@Rohan Cảm ơn những lời tốt đẹp của bạn!
Luis Mendo

1
: D Không có vấn đề! : D
Rohan Jhunjhunwala

3
+1 cho mã :)xuất hiện trong mã của bạn.
Erik the Outgolfer

2
@Neil Xem mặt tươi sáng của cuộc sống ...
Erik the Outgolfer

37

Perl, 93 byte

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

Yêu cầu tùy chọn dòng lệnh -l71Mbignum=bpi, được tính là 14. \32Nên thay thế bằng ký tự 26.

Sử dụng mẫu

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

Perl, 111 byte

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

Phiên bản tham số. Yêu cầu tùy chọn dòng lệnh -nMbignum=bpi, được tính là 12.

Sử dụng mẫu

$ 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 byte

Đây là 1 byte ngắn hơn so với chỉ hiển thị văn bản đơn giản.

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
Có phải nó ngắn hơn một byte so với console.log ("") + 12 * 11 ký tự + 18 dấu gạch chéo ngược + 10 ngắt dòng?
Tít

@Titus - Bạn nói đúng. Tôi quên đếm dấu gạch chéo thoát. Cảm ơn!
Arnauld

18
Hơi thú vị, nhưng 2384626433832795028841971693 xảy ra là chính.
ElementW

1
@EuityW - Hài hước là bạn đã đề cập đến nó, vì tôi cũng đã kiểm tra điều đó. :)
Arnauld

Viết số dưới dạng hex và chuyển đổi nó thành một chuỗi có lưu bất kỳ byte nào không?
Nic Hartley

17

Python 2, 131 byte

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

Nỗ lực chung giữa Sp3000 và Lynn. Đồng cũng tiết kiệm một byte! Liên kết Ideone.


Đó là +1 thanh lịch
ElPedro

Bạn sẽ có thể lưu 1 byte bằng cách xóa dấu ngoặc trong forvòng lặp.
Đồng

16

/// , 129 127 byte

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

Hãy thử trực tuyến!


-2 byte nếu bạn thực hiện /!/()()/!!!thay thế ()()()()()()và thay thế /#/|\n%%/bằng /#/|\n%/và điều chỉnh phần còn lại của mã để làm cho nó hoạt động với điều đó.
acrolith

@daHugLenny Ồ cảm ơn, tôi không biết 4 * 3 là ứng cử viên hợp lệ để thay thế. Đối với đề nghị thứ hai của bạn, tôi nghĩ rằng nó sẽ dài hơn.
Erik the Outgolfer

@daHugLenny ^^ Tôi có thể xác nhận rằng đề xuất thứ hai của bạn thực sự dài hơn.
Erik the Outgolfer


@DeststallibleWateriwi Tôi đã cố tình làm điều đó. Ngoài ra còn có những gương mặt khác: -:, :-, :--__-.
Erik the Outgolfer

12

Bash, 153 byte

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

9
Xem xét có bao nhiêu câu trả lời khác rơi vào cái bẫy sản xuất mã lâu hơn so với in chiếc bánh theo nghĩa đen , tôi nghĩ đây thực sự là một câu trả lời thông minh. Ngoài ra, nó chỉ có 153 byte theo số lượng của tôi.
Lynn

3
@Lynn Tuy nhiên, nó chỉ đưa ra ví dụ cho đầu ra mà không có nỗ lực chơi gôn, và vì vậy không được khuyến khích. Ít nhất các câu trả lời khác đã nỗ lực ...
Beta Decay

Bạn có thể loại bỏ các khoảng trắng trước và sau <<. Và bytecount của bạn là 153 byte.
TuxCrafting

1
Không phải là echo '()()()()()()...\__\|'4 byte ngắn hơn?
Neil

@Lynn Tôi rất vui vì tôi không gặp phải vấn đề đó; Batch yêu cầu 100 byte chi phí để chỉ cần in chiếc bánh.
Neil

9

Hàng loạt, 195 byte

@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 byte (không cạnh tranh)

(trình thông dịch không thực sự hơi buggèd (nữa:]) , nhưng nó không ảnh hưởng đến chương trình này )

Bằng cách tái cấu trúc và viết lại chương trình của mình, tôi đã đánh gôn ... sáu byte

Và bây giờ tôi phải đưa ra lời giải thích mới ...

Vẫn có thể là probs ngắn hơn mặc dù


Ít nhất là giải pháp tốt nhất trong lang này không chỉ là ghi vào dữ liệu thô \ _ (ツ) _ /


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

Dùng thử trực tuyến

Giải trình

Thành thật mà nói, điều này không mô tả chương trình thực tế rất tốt, nhưng nó đưa ra gợi ý về các lệnh, vì vậy bạn có thể hiểu rõ hơn một chút

#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

Điều linh hoạt: CUỘC ĐỜI

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

Trong khi ô hiện tại không phải là không gian {di chuyển sang trái, hãy thực hiện vòng lặp: (Trong khi ô không |, hãy viết char hiện tại của biến chuỗi (hãy nhớ rằng pi?), Con trỏ chuỗi tăng, di chuyển sang trái), thực hiện vòng lặp: (trong khi ô không \, di chuyển sang phải), di chuyển lên, sang trái}


Tại sao không cạnh tranh?
lập trình

không cạnh tranh có nghĩa là nó mới hơn thử thách
Lemon phá hủy

5

Fourier, 196 190 byte

Cảnh báo tính năng mới!

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

Giải trình

Chương trình này là trình diễn chức năng đầu tiên của tôi trong Fourier:

Các hàm được định nghĩa như vậy:

|code goes here|f

Các ống đầu tiên bắt đầu khai báo chức năng. Sau đó, bạn đặt mã ở giữa các đường ống. Ống cuối cùng kết thúc khai báo hàm. Cuối cùng, flà biến trong đó hàm được lưu trữ. Đây có thể là bất kỳ ký tự nào, miễn là nó không phải là một chức năng dành riêng.

Ví dụ, trong mã của tôi, một trong các hàm s là:

|SaCaaSa|f

Trong đó biến Slưu trữ số 92 và Clưu trữ số 58.

Khi được gọi, hàm xuất ra như sau:

\::\

Vì nó là thứ lặp đi lặp lại nhiều nhất trong chiếc bánh.

Tương tự, để đánh golf đầu ra, tôi đã sử dụng một vòng lặp:

6(40a41ai^~i)

Mà lặp lại mã 40a41a6 lần. 40a41atrên đầu ra của chính nó:

()

Vì vậy, lặp lại mã sáu lần đầu ra:

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

Qua đó xuất ra lớp vỏ bánh.

Hãy thử nó trên FourIDE!

Vì tôi chưa triển khai các chức năng trong trình thông dịch Python, chương trình này sẽ không hoạt động trên http://tryitonline.net


4

Bình thường, 89 byte

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

Hãy thử trực tuyến!

Thay thế \xx(thập lục phân) bằng ký tự ASCII tương ứng nếu bạn sao chép / dán mã từ câu trả lời này; nó chứa các ký tự không thể in được trong chuỗi đóng gói mà SE lọc ra.

Giải trình

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

Thạch , 83 byte

chắc chắn vẫn còn khá golfabale

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

Dùng thử

Làm sao?

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
Ồ, đó là chương trình Jelly dài nhất tôi từng thấy: o
Beta Decay

@BetaDecay không còn nghi ngờ gì nữa, nó có thể được thực hiện trong 11 byte ...
Jonathan Allan

3

Python 2, 193 176 byte

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

Hoặc một câu trả lời ngắn hơn, nhàm chán hơn:

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

3
Bạn có biết rằng print r'''(the pie)'''ngắn hơn 38 byte? :)
Lynn

+1 cho nỗ lực thứ hai của bạn nhưng sử dụng dấu ngoặc đơn làm cho nó ngắn hơn để xem xét. Số lượng pixel tốt hơn :)
ElPedro

3

C # 220 213 209 208 202 201 (171 *) byte

* Tôi thấy điều này là không nguyên bản và gian lận

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

201 byte:

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 byte:

Tôi chắc chắn rằng có một cái gì đó để được chơi golf ở đây

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

Cảm ơn câu trả lời! Bạn có thể tiết kiệm ít nhất một byte bằng cách loại bỏ không gian thừa .Substring(j, i).
Đồng

Đó là một sự giám sát từ định dạng tự động trong VS, nhưng dù sao tôi cũng đã lưu một bó theo một cách khác =)
Pinkfloydx33

Một hàm ẩn danh trả về nguyên văn chiếc bánh ngắn hơn> 25%: ()=>@"(pie)"là 149 byte .
Lynn

Nó cũng nhàm chán và cảm thấy như gian lận. Quy tắc nói để in, không trả lại
Pinkfloydx33

@ Pinkfloydx33 In và trả lại đều được cho phép theo mặc định theo sự đồng thuận của cộng đồng.
mbomb007

3

PowerShell , 105 byte

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

Hãy thử trực tuyến!

Không chắc làm thế nào tôi không bao giờ trả lời thử thách này ... Tôi đã nâng cao nó và một số câu trả lời khác. Oh tốt, muộn còn hơn không?

Điều này đặt sáu parens cân bằng dưới dạng một chuỗi trên đường ống, sau đó là một chuỗi bằng chữ (lưu hai byte) của hai hàng tiếp theo. Sau đó, chúng tôi lặp qua các con số còn lại, mỗi lần lặp tăng dần số lượng khoảng trắng được chuẩn bị ( $i) được nối với \::<number>|. Cuối cùng, chúng tôi tạo ra một chuỗi của đầu của chiếc bánh. Tất cả các chuỗi đó đều được để lại trên đường ống và một đường dẫn ẩn ẩn Write-Outputmột dòng mới giữa.

Đây là 39 byte ngắn hơn so với chỉ in bánh.


3

Than , 31 byte

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

Hãy thử trực tuyến!

Bạn có thể tự hỏi: phép thuật này là gì? Làm thế nào bạn có thể điền vào UGPi? Chà, Char than đang bắt đầu nhận được sự hỗ trợ của Wolfram Language, với hy vọng một ngày nào đó nó có thể cạnh tranh trong nhiều thử thách hơn!

Trước đó, 71 byte

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

Hãy thử trực tuyến!

Rực rỡ

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

Lưu ý rằng điều này là khác nhau vì deverbosifier tự động nén các chuỗi và không loại bỏ các lệnh dư thừa.

Với chuỗi nén, 52 byte

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

đầu ra 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..

Hãy thử trực tuyến!


2

PHP, 170 byte

không có độ chính xác Pi trong PHP? Tính toán chiếm nhiều không gian hơn so với Sao chép & Dán. Không có vấn đề rằng chữ số cuối cùng ở đây bị cắt, không được làm tròn; nhưng trong 64 bit Pi, chữ số cuối cùng được làm tròn lên.

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

Chạy với php -r '<code>'

sự cố không hoàn thành

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

Đầu ra bị thiếu 1 khoảng trống (mà bạn có thể sửa bằng cách thay đổi nó 13bằng a 14). Và, vì một số lý do kỳ quái, Bạn đang thiếu dấu ngoặc đơn đóng ở đầu. Làm cho sự thay đổi sửa chữa đầu ra.
Ismael Miguel

Các câu trả lời PHP cần một <?phpthẻ, nếu không chúng chỉ tạo ra đầu ra không đổi. Xin chào, Thế giới! thực sự phụ thuộc vào điều này. Tuy nhiên, nói về đầu ra không đổi, một câu trả lời PHP chỉ chứa bánh theo nghĩa đen và hoàn toàn không có <?phpthẻ nào sẽ đánh bại bạn bởi một biên lợi nhuận lớn
Lynn

@Lynn: PHP không cần <?phpthẻ khi bạn chạy nó -r.
Tít

2

Python 2, 183 171 byte

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

Không thực sự làm bất cứ điều gì thông minh. Chỉ cần xây dựng một chuỗi lớn sau đó in nó ra.

BIÊN TẬP

Giảm xuống 171 sau khi đọc câu trả lời và học hỏi của @ Lynn. Xin lỗi nếu nó sai (không biết xấu hổ) ăn cắp một số byte từ bạn mà không gợi ý cho bạn. Xin vui lòng cho tôi biết nếu như vậy và tôi sẽ quay trở lại thay đổi.

Đầu ra

python pi.pie.py

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

Bạn có biết rằng print r'''(the pie)'''ngắn hơn 28 byte? :)
Lynn

@Lynn Đó không phải là gian lận sao? ;-)
ElPedro

Đó không phải là gian lận, chỉ là không thú vị lắm (và chúng tôi không cần câu trả lời đó cho mọi ngôn ngữ, IMO. Câu trả lời bash là đủ). Giống như một cái gì đó bạn muốn đề cập khi đăng một câu trả lời như thế này, để thừa nhận rằng nỗ lực chơi gôn của bạn đã kết thúc là một mất mát. Có thể vẫn còn giá trị đăng trong trường hợp người khác thấy một cách để lấy ý tưởng chơi golf của bạn và cải thiện nó, có thể đánh bại cách tiếp cận ngây thơ.
Peter Cordes

Tôi lấy ý kiến ​​của bạn trên tàu @Peter. Tôi đã không cố tỏ ra thiếu tôn trọng vì thế mà cười. Bất cứ ai cũng có thể in ra một thách thức nghệ thuật ASCII như thế này. Tôi khá mới với điều này và đang ở đây để tìm hiểu. Nếu nó có nghĩa là bất cứ điều gì tôi đã đưa ra một nhận xét và +1 cho câu trả lời của Lynn khi tôi thấy rằng đó không chỉ là một tuyên bố in mà còn giải quyết vấn đề theo cách hoàn toàn vượt xa nỗ lực của tôi. Tôi đã học được ...
ElPedro

Miễn là câu trả lời của bạn vẫn có cách tiếp cận khác, bạn vẫn có thể lấy ý tưởng từ các câu trả lời khác (có cùng ngôn ngữ hay không). Điều duy nhất sẽ không ổn là nếu câu trả lời của bạn kết thúc với cùng một mã giống như của Lynn. Thông thường nếu bạn thấy một cải tiến nhỏ cho câu trả lời của người khác, bạn sẽ đề xuất điều đó trong một bình luận. Nhưng nếu bạn có nhiều ý tưởng mới sau khi thấy câu trả lời của người khác, bạn thậm chí có thể đăng phiên bản cải tiến của mình dưới dạng câu trả lời mới. Tôi không hoàn toàn chắc chắn về nghi thức của việc này, nhưng tôi nghĩ nó vẫn ổn miễn là câu trả lời của bạn khác biệt đáng kể.
Peter Cordes

2

Ruby, 140 138 137 byte

Giải pháp của tôi cho vấn đề này trong ruby, đây là câu trả lời golf mã đầu tiên của tôi: 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)}

Phiên bản có thể đọc và giải thích:

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

Không có gì thực sự thông minh, chỉ cần sử dụng một số vòng lặp đơn giản :)

Đầu ra:

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

2
Chào mừng đến với PPCG! Bài đăng đầu tiên rất hay!
Rɪᴋᴇʀ

2

Stax , 63 byte

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

Chạy và gỡ lỗi trực tuyến!

Ngắn hơn câu trả lời MATL được chấp nhận. Nó chắc chắn sẽ ngắn hơn nếu nhiều chữ số được lưu trữ dưới dạng số pi không đổi trong Stax.

( Pi<0Mã đó là gì?)

Giải trình

Sử dụng ASCII tương đương để giải thích, đó là

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

Trả giá:

.()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 byte

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

Thở dài, chỉ đơn giản là xuất ra chiếc bánh ngắn hơn, thậm chí với tất cả các dấu gạch chéo ngược đã thoát ..>.>
Đây là câu trả lời trước đây với một chút khả năng, mặc dù vẫn không chung chung hoặc ưa thích ( 236 byte ):

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)+"\\__\\|";}

Một câu trả lời khá nhàm chán, vì chỉ đơn giản là đưa ra kết quả mà không có quá nhiều thứ ưa thích thì ngắn hơn trong Java so với cách tiếp cận chung.

Mã thử nghiệm & mã hóa:

Hãy thử nó ở đây.

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

Đầu ra:

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

1

Qbasic, 175 byte

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

1

Lua, 152 byte

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

Hãy thử như tôi có thể tôi không thể nén pi này.

Lua chỉ là quá dài dòng để làm điều đó, có thể là một pi có kích thước lớn hơn, nhưng không phải cái này.

Một giải pháp khác, 186 Byte.

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..'       \\__\\|')

Làm phiền pi của Lua không đủ chính xác để thậm chí lấp đầy pi. :(


1

Javascript, 172 byte

Dán vào bàn điều khiển của bạn để chạy.

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)

Chào mừng đến với PPCG! Để bạn biết, bạn có thể định dạng mã của mình bằng bốn khoảng trắng (xem phần chỉnh sửa của tôi). Ngoài ra, đặt số lượng byte trong chương trình của bạn ở đầu câu trả lời của bạn (ví dụ Javascript: 100 bytes).
Qwerp-Derp

Có vẻ có lỗi cú pháp kỳ lạ, bạn có thể sửa chúng không?
lập trình

1

JavaScript (ES6), 170 byte 165 byte

là một chút "gian lận", vì nếu chạy trên bàn điều khiển, giá trị trả về sẽ được hiển thị

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?"\\::":"\\__\\|"):""))

Sau một số thao tác, hàm trông như thế này (hàm phải được gọi với tham số có giá trị 0):

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

Nếu bạn muốn gọi hàm 167 byte:

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: Cần thêm paren đóng. 2: thay thế "|\n"với |<newline>nơi <newline>là một dòng mới theo nghĩa đen. 3: Thêm y=>vào đầu và nó sẽ không gian lận. 4: Chào mừng đến với trang web!
lập trình

1
@ lập trình5000 cảm ơn cho đầu vào của bạn, tôi đã sử dụng nó trên tinh chỉnh mới nhất của tôi. :-D
chiến thắng_joiner

Lưu 2 byte bằng cách loại bỏ tham số ()kèm theo v. Đầu ra của bạn dường như có thêm một khoảng trống ở phía trước của dòng thứ 2 và thứ 3. Ngoài ra, bạn không cần phải vượt qua 0như một đối số, chức năng của bạn sẽ hoạt động tốt mà không có nó và nó cũng không được phép thách thức.
Xù xì

vâng cảm ơn bạn, tôi đã có trước giá trị mặc định. :-D
chiến thắng_joiner

0

PHP, 142 byte

Sneaky-sneaky :) phpchỉ in mọi thứ ra mà không cố diễn giải chúng thành mã PHP nếu nó không thấy bất kỳ <?php ?>cặp nào .

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.