Panggang sepotong Pi


82

Tulis program atau fungsi yang mencetak atau menampilkan teks yang persis sama ini (terdiri dari 142 karakter):

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

Program Anda tidak boleh mengambil input (kecuali dalam bahasa yang tidak memungkinkan, seperti sed), dan menghasilkan teks di atas (dan hanya teks di atas) sebagai output. Newline tambahan dapat diterima.

Ini adalah , jadi jawaban tersingkat (dalam byte) menang.


9
@RohanJhunjhunwala Sebagai bukti bahwa ini dapat dikompresi, Luis Mendo melakukannya .
Erik the Outgolfer

1
Lol, saya telah terbukti salah (dan saya senang!) Sangat mengesankan
Rohan Jhunjhunwala

2
Anda dingin telah membuat mereka mengambil input bilangan bulat N untuk menghasilkan sepotong yang jumlah ()di atas adalah N. Ini akan sangat kompleks.
user6245072

5
Asal tahu saja, Anda perlu 43 desimal π.
Erik the Outgolfer

4
Begitu dekat dengan makna hidup ....
A. Mirabeau

Jawaban:


90

MATL , 70 68 67 byte

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

Cobalah online!

Penjelasan

Berantakan sekali. Tapi hei, ada belitan!

Penjelasan akan lebih jelas jika Anda dapat memeriksa isi tumpukan setelah pernyataan yang diberikan . Untuk melakukannya, cukup masukkan X#0$%pada titik itu. (Ini berarti: X# tampilkan isi tumpukan, 0$jangan secara tersirat menampilkan yang lain, %komentar di luar kode). Misalnya, lihat tumpukan tepat setelah konvolusi .

'()'       % 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, ini mengesankan. Saya akan memilih dua kali jika saya bisa. Saya pikir ini akan menjadi tantangan kolmogorov yang tak tertandingi. Terima kasih telah membuktikan saya salah!
Rohan Jhunjhunwala

3
@Rohan Terima kasih atas kata-kata baikmu!
Luis Mendo

1
: D Tidak masalah! : D
Rohan Jhunjhunwala

3
+1 untuk :)yang muncul dalam kode Anda.
Erik the Outgolfer

2
@Neil Melihat sisi terang kehidupan ...
Erik the Outgolfer

37

Perl, 93 byte

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

Membutuhkan opsi baris perintah -l71Mbignum=bpi, dihitung sebagai 14. Yang \32harus diganti dengan karakter literal 26.

Contoh Penggunaan

$ 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

Versi parameter. Membutuhkan opsi baris perintah -nMbignum=bpi, dihitung sebagai 12.

Contoh Penggunaan

$ 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

Ini lebih pendek 1 byte daripada hanya menampilkan teks biasa.

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
Bukankah satu byte lebih pendek dari console.log ("") + 12 * 11 karakter + 18 garis miring terbalik + 10 linebreak?
Titus

@Itus - Anda benar. Saya lupa menghitung backslash yang lolos. Terima kasih!
Arnauld

18
Cukup menarik, tetapi 2384626433832795028841971693 kebetulan prima.
ElementW

1
@ElementW - Lucu bahwa Anda menyebutkannya, karena saya sudah memeriksanya juga. :)
Arnauld

Apakah menulis nomor sebagai hex dan mengubahnya menjadi string menghemat byte?
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))

Upaya bersama antara Sp3000 dan Lynn. Tembaga juga menghemat satu byte! Tautan ideone.


Itu elegan +1
ElPedro

Anda harus dapat menyimpan 1 byte dengan menghapus tanda kurung di forloop.
Tembaga

16

/// , 129 127 byte

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

Cobalah online!


Byte -2 jika Anda melakukan /!/()()/!!!bukannya ()()()()()()dan mengganti /#/|\n%%/dengan /#/|\n%/dan menyesuaikan sisa kode untuk membuatnya bekerja dengan itu.
acrolith

@daHugLenny Oh terima kasih, saya tidak tahu 4 * 3 adalah kandidat pengganti yang valid. Untuk saran kedua Anda, saya pikir itu akan lebih lama.
Erik the Outgolfer

@daHugLenny ^^ Saya dapat mengkonfirmasi bahwa saran kedua Anda memang lebih lama.
Erik the Outgolfer


@DestructibleWatermelon Saya sengaja melakukannya. Ada juga wajah lain: -:, :-, :-dan -__-.
Erik the Outgolfer

12

Bash, 153 byte

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

9
Mempertimbangkan berapa banyak jawaban lain yang jatuh ke dalam perangkap menghasilkan kode lebih lama daripada mencetak pie literal , saya pikir ini memang jawaban yang cerdas. Juga, itu hanya 153 byte menurut hitungan saya.
Lynn

3
@ Lynn Namun, itu hanya membuang contoh ke output tanpa upaya golf, dan jadi berkecil hati. Setidaknya jawaban lain berusaha ...
Beta Decay

Anda dapat menghapus spasi sebelum dan sesudah <<. Dan bytecount Anda adalah 153 byte.
TuxCrafting

1
Bukankah echo '()()()()()()...\__\|'4 byte lebih pendek?
Neil

@ Lynn Saya senang saya tidak punya masalah itu; Batch membutuhkan 100 byte overhead untuk mencetak pai.
Neil

9

Batch, 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 (tidak bersaing)

(penafsir tidak benar-benar sedikit disadap (lagi:]) , tetapi tidak mempengaruhi program ini )

Dengan merestrukturisasi dan menulis ulang program saya, saya bermain golf ... enam byte

Dan sekarang saya harus membuat penjelasan baru ...

Namun, masih bisa menjadi prob yang lebih pendek


Setidaknya solusi terbaik dalam lang ini bukan hanya menulis dalam data mentah ¯ \ _ (ツ) _ / ¯


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

Cobalah online

Penjelasan

Jujur, ini tidak menggambarkan program yang sebenarnya dengan sangat baik, tetapi itu memberikan petunjuk tentang perintah, sehingga Anda mungkin mengerti sedikit lebih baik

#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

HAL KOMPLEKS: LOOP TERPUNGGUNG

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

Sementara sel saat ini bukan spasi {bergerak ke kiri, jalankan loop: (Sementara sel tidak |, tulis variabel char dari string saat ini (ingat pi itu?), Kenaikan pointer string, pindah ke kiri), jalankan loop: (sedangkan sel tidak \, pindah ke kanan), pindah ke atas, ke kiri}


Kenapa tidak bersaing?
programmer5000

tidak bersaing berarti lebih baru dari tantangan
Destructible Lemon

5

Fourier, 196 190 byte

Lansiran fitur baru!

Kode

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

Penjelasan

Program ini adalah demonstrasi pertama saya fungsi di Fourier:

Fungsi didefinisikan seperti ini:

|code goes here|f

Pipa pertama memulai deklarasi fungsi. Anda kemudian memasukkan kode di antara pipa. Pipa terakhir mengakhiri deklarasi fungsi. Akhirnya, fadalah variabel di mana fungsi disimpan. Ini bisa berupa karakter apa saja, asalkan itu bukan fungsi yang dipesan.

Misalnya, dalam kode saya, salah satu fungsi s adalah:

|SaCaaSa|f

Di mana variabel Smenyimpan angka 92 dan Cmenyimpan angka 58.

Saat dipanggil, fungsi menghasilkan yang berikut:

\::\

Karena itu adalah hal yang paling berulang di dalam pie.

Demikian pula, untuk menurunkan output, saya telah menggunakan loop:

6(40a41ai^~i)

Yang mengulangi kode 40a41a6 kali. 40a41apada outputnya sendiri:

()

Jadi ulangi kode enam kali keluaran:

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

Dengan demikian mengeluarkan kerak pie.

Cobalah di FourIDE!

Karena saya belum mengimplementasikan fungsi dalam interpreter Python, program ini tidak akan berfungsi di http://tryitonline.net


4

Pyth, 89 byte

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

Cobalah online!

Ganti \xx(heksadesimal) dengan karakter ASCII yang sesuai jika Anda menyalin / menempelkan kode dari jawaban ini; itu berisi karakter yang tidak patut dicetak dalam string dikemas yang SE filter keluar.

Penjelasan

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

Jelly , 83 byte

pasti masih cukup golf

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

TryItOnline

Bagaimana?

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
Wow, itu program Jelly terpanjang yang pernah saya lihat: o
Beta Decay

@BetaDecay tidak diragukan lagi itu bisa dilakukan dalam 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+"\__\|"

Atau jawaban yang lebih pendek dan lebih membosankan:

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

3
Apakah Anda sadar bahwa print r'''(the pie)'''38 byte lebih pendek? :)
Lynn

Memberi +1 untuk upaya kedua Anda, tetapi menggunakan tanda kutip tunggal membuatnya lebih pendek untuk dilihat. Hitungan piksel lebih baik :)
ElPedro

3

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

* Saya menemukan ini tidak asli dan curang

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

201 Bytes:

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:

Saya yakin ada sesuatu yang bisa bermain golf di sini

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

Terima kasih atas jawabannya! Anda dapat menghemat setidaknya satu byte dengan menghapus ruang ekstra di .Substring(j, i).
Tembaga

Itu adalah kekeliruan dari pemformatan otomatis di VS, tapi saya menyimpan banyak cara yang berbeda bagaimanapun juga =)
pinkfloydx33

Fungsi anonim mengembalikan pie kata demi kata> 25% lebih pendek: ()=>@"(pie)"adalah 149 byte .
Lynn

Ini juga membosankan dan rasanya seperti selingkuh. Aturan mengatakan untuk mencetak, tidak kembali
pinkfloydx33

@ pinkfloydx33 Pencetakan dan pengembalian keduanya diizinkan secara default sesuai dengan konsensus komunitas.
mbomb007

3

PowerShell , 105 byte

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

Cobalah online!

Tidak yakin bagaimana saya tidak pernah menjawab tantangan ini ... Saya membatalkannya dan beberapa jawaban lainnya. Oh well, lebih baik terlambat daripada tidak pernah?

Ini menempatkan enam parens seimbang sebagai string pada pipeline, kemudian string literal (menyimpan dua byte) dari dua baris berikutnya. Kemudian, kami mengulangi angka-angka lainnya, setiap iterasi menambah jumlah ruang yang ditambahkan ( $i) yang digabungkan dengan \::<number>|. Akhirnya, kami membuat string ujung pai. String-string itu semuanya ditinggalkan di dalam pipa, dan sebuah implisit Write-Outputmenempelkan sebuah baris baru di antara keduanya.

Ini lebih pendek 39 byte daripada hanya mencetak pai.


3

Arang , 31 byte

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

Cobalah online!

Anda mungkin bertanya-tanya: apa sihir ini? Bagaimana Anda bisa mengisinya UGPi? Nah, Charcoal mulai mendapatkan dukungan Bahasa Wolfram, dengan harapan suatu hari nanti ia bisa bersaing dalam lebih banyak tantangan!

Sebelumnya, 71 byte

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

Cobalah online!

Verbose

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

Perhatikan bahwa ini berbeda karena deverbosifier secara otomatis memampatkan string dan tidak menghapus perintah yang berlebihan.

Dengan string terkompresi, 52 byte

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

output 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..

Cobalah online!


2

PHP, 170 byte

tidak ada pi presisi arbritrary di PHP? Menghitung membutuhkan lebih banyak ruang daripada Salin & Tempel. Tidak masalah bahwa digit terakhir di sini dipotong, bukan bulat; tetapi dalam 64 bit Pi digit terakhir akan ditangkap.

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

Jalankan dengan php -r '<code>'

kerusakan tanpa komentar

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

Output tidak memiliki 1 spasi (yang dapat Anda perbaiki dengan mengubahnya 13dengan a 14). Dan, untuk beberapa alasan aneh, Anda kehilangan tanda kurung penutup di bagian atas. Membuat perubahan akan memperbaiki output.
Ismael Miguel

Jawaban PHP memerlukan <?phptag, jika tidak mereka hanya menghasilkan output konstan. PHP Halo, Dunia! sebenarnya tergantung pada ini. Namun, berbicara tentang output konstan, jawaban PHP yang hanya berisi kue literal dan tanpa <?phptag sama sekali akan mengalahkan Anda dengan selisih besar ...
Lynn

@ Lynn: PHP tidak memerlukan <?phptag saat Anda menjalankannya -r.
Titus

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

Tidak benar-benar melakukan sesuatu yang pintar. Hanya membangun string besar kemudian mencetaknya.

SUNTING

Mengurangi menjadi 171 setelah membaca jawaban dan pembelajaran @ Lynn. Maaf jika salah (tanpa malu-malu) mencuri beberapa byte dari Anda tanpa Anda menyarankannya. Tolong beritahu saya jika demikian dan saya akan mengembalikan perubahan.

Keluaran

python pi.pie.py

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

Apakah Anda sadar bahwa print r'''(the pie)'''28 byte lebih pendek? :)
Lynn

@ Lynn Apakah itu tidak curang? ;-)
ElPedro

Itu tidak curang, hanya tidak terlalu menarik (dan kami tidak membutuhkan jawaban itu untuk setiap bahasa, IMO. Jawaban bash cukup). Lebih seperti sesuatu yang Anda ingin sebutkan ketika memposting jawaban seperti ini, untuk mengakui bahwa upaya golf Anda berakhir dengan kerugian. Mungkin masih layak diposkan jika orang lain melihat cara untuk mengambil ide golf Anda dan memperbaikinya, mungkin mengalahkan pendekatan naif.
Peter Cordes

Saya mengambil komentar Anda di papan @Peter. Saya tidak berusaha untuk tidak sopan karena itu tersenyum. Siapa pun bisa mencetak tantangan seni ASCII seperti ini. Saya cukup baru dalam hal ini dan saya di sini untuk belajar. Jika itu berarti apa pun, saya memberikan komentar dan +1 pada jawaban Lynn ketika saya melihat bahwa itu bukan hanya pernyataan cetak tetapi juga mengatasi masalah tersebut dengan cara yang benar-benar mengungguli upaya saya. Saya telah belajar ...
ElPedro

Selama jawaban Anda masih memiliki pendekatan yang berbeda, boleh saja mendapat ide dari jawaban lain (dalam bahasa yang sama atau tidak). Satu-satunya hal yang tidak beres adalah jika jawaban Anda berakhir dengan kode yang persis sama dengan Lynn. Biasanya jika Anda melihat sedikit peningkatan pada jawaban orang lain, Anda akan menyarankan itu dalam komentar. Tetapi jika Anda memiliki banyak ide baru setelah melihat jawaban orang lain, Anda bahkan dapat memposting versi yang disempurnakan sebagai jawaban baru. Saya tidak sepenuhnya yakin tentang etiket ini, tetapi saya pikir itu baik-baik saja asalkan jawaban Anda sangat berbeda.
Peter Cordes

2

Ruby, 140 138 137 byte

Solusi saya untuk masalah ini di ruby, ini adalah jawaban golf kode pertama saya: 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)}

Versi dan penjelasan yang mudah dibaca:

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

Tidak ada yang benar-benar pintar, hanya menggunakan beberapa loop sederhana :)

Keluaran:

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

2
Selamat datang di PPCG! Posting pertama yang bagus!
Rɪᴋᴇʀ

2

Stax , 63 byte

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

Jalankan dan debug online!

Lebih pendek dari jawaban MATL yang diterima. Pasti akan lebih pendek jika lebih banyak digit disimpan sebagai pi konstan di Stax.

(Apa itu Pi<0dalam kode?)

Penjelasan

Menggunakan ASCII yang setara untuk menjelaskan, yaitu

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

Ekspansi:

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

Huh, hanya mengeluarkan pie lebih pendek, bahkan dengan semua backslash yang lolos ..>.>
Berikut adalah jawaban sebelumnya dengan sedikit kemampuan, meskipun masih tidak terlalu generik atau mewah ( 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)+"\\__\\|";}

Sebuah jawaban yang cukup membosankan, karena hanya mengeluarkan hasilnya tanpa terlalu banyak hal-hal mewah lebih pendek di Jawa daripada pendekatan generik.

Tidak digabungkan & kode uji:

Coba di sini.

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

Keluaran:

()()()()()()
|\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 Bytes

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

Cobalah sekuat tenaga saya tidak bisa mengompres pi ini.

Lua terlalu verbose untuk melakukannya, mungkin pi dengan ukuran lebih besar, tetapi tidak yang ini.

Solusi lain, 186 Bytes.

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

Mengganggu pi Lua tidak cukup akurat untuk bahkan mengisi pi. :(


1

Javascript, 172 byte

Rekatkan ke konsol Anda untuk menjalankan.

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)

Selamat datang di PPCG! Asal tahu saja, Anda bisa memformat kode Anda dengan empat spasi (lihat edit saya). Juga, letakkan jumlah byte dalam program Anda di bagian atas jawaban Anda (mis Javascript: 100 bytes.).
Qwerp-Derp

Tampaknya memiliki kesalahan sintaksis aneh, dapatkah Anda memperbaikinya?
programmer5000

1

JavaScript (ES6), 170 byte 165 byte

sedikit "curang", karena jika dijalankan pada konsol, nilai kembali akan ditampilkan

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

Setelah beberapa teaking, fungsinya terlihat seperti ini (fungsi harus dipanggil dengan parameter dengan nilai 0):

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

Jika Anda ingin memanggil fungsi 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: Membutuhkan tambahan paren penutup. 2: ganti "|\n"dengan di |<newline>mana <newline>baris baru literal. 3: Tambahkan y=>ke awal dan itu tidak akan curang. 4: Selamat datang di situs!
programmer5000

1
@ programmer5000 terima kasih atas masukan Anda, saya menggunakannya pada tweak terbaru saya. :-D
winner_joiner

Simpan 2 byte dengan menghapus parameter ()terlampir v. Output Anda tampaknya memiliki ruang ekstra di depan garis 2 & 3. Juga, Anda tidak perlu memberikan 0argumen, fungsi Anda akan berfungsi dengan baik tanpanya dan itu juga tidak diizinkan oleh tantangan.
Shaggy

ya terima kasih, saya sudah sebelum nilai default. :-D
winner_joiner

0

PHP, 142 byte

Sneaky-sneaky :) phphanya mencetak semuanya tanpa mencoba menafsirkannya sebagai kode PHP jika tidak melihat <?php ?>pasangan.

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.