อบชิ้น Pi


82

เขียนโปรแกรมหรือฟังก์ชั่นที่พิมพ์หรือพิมพ์ข้อความที่แน่นอน (ประกอบด้วย 142 ตัวอักษร):

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

โปรแกรมของคุณต้องไม่ป้อนข้อมูล (ยกเว้นในภาษาที่เป็นไปไม่ได้เช่นsed) และสร้างข้อความด้านบน (และเฉพาะข้อความด้านบน) เป็นผลลัพธ์ บรรทัดใหม่ต่อท้ายเป็นที่ยอมรับ

นี่คือดังนั้นคำตอบที่สั้นที่สุด (เป็นไบต์) ชนะ


9
@RohanJhunjhunwala สำหรับหลักฐานที่ว่านี้จะสามารถบีบอัด, หลุยส์ Mendo ไม่ได้
Erik the Outgolfer

1
ฮ่า ๆ ฉันได้รับการพิสูจน์ผิด (และฉันดีใจ!) น่าประทับใจมาก
Rohan Jhunjhunwala

2
คุณทำให้พวกมันเย็นแล้วป้อนจำนวนเต็ม N เพื่อเอาท์พุทชิ้นที่มีจำนวน()ที่ด้านบนคือ N มันจะซับซ้อนมาก
user6245072

5
เพื่อให้คุณรู้ว่าคุณต้องมีทศนิยม 43 ตำแหน่งเป็นπ
Erik the Outgolfer

4
ใกล้เคียงกับความหมายของชีวิต ....
A. Mirabeau

คำตอบ:


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
หลุยส์เมนโดนี่น่าประทับใจมาก ฉันจะโหวตสองครั้งถ้าทำได้ ฉันคิดว่านี่จะเป็นความท้าทายที่อัดไม่ได้ของ kolmogorov ขอบคุณสำหรับการพิสูจน์ฉันผิด!
Rohan Jhunjhunwala

3
@Rohan ขอบคุณสำหรับคำพูดของคุณ!
Luis Mendo

1
: D ไม่มีปัญหา! : D
Rohan Jhunjhunwala

3
+1 สำหรับสิ่ง:)ที่ปรากฏในรหัสของคุณ
Erik the Outgolfer

2
@Neil ดูด้านสว่างของชีวิต ...
Erik the Outgolfer

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 backslashes + 10 linebreaks?
ติตัส

@Titus - คุณพูดถูก ฉันลืมนับ backslash escaping ขอบคุณ!
Arnauld

18
น่าสนใจเล็กน้อย แต่ 2384626433832795028841971693 เป็นสิ่งสำคัญ
ElementW

1
@ElementW - ตลกที่คุณพูดถึงเพราะฉันก็ตรวจสอบเช่นกัน :)
Arnauld

จะเขียนตัวเลขเป็นเลขฐานสิบหกและแปลงเป็นสตริงเพื่อบันทึกไบต์ใด ๆ หรือไม่?
Nic Hartley

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 ทองแดงบันทึกไบต์ด้วยเช่นกัน! ลิงค์ Ideone


ยอดเยี่ยม +1
ElPedro

คุณควรจะสามารถบันทึก 1 ไบต์ได้โดยการลบวงเล็บในforลูป
ทองแดง

16

/// , 129 127 ไบต์

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

ลองออนไลน์!


-2 ไบต์ถ้าคุณทำ/!/()()/!!!แทน()()()()()()และแทนที่/#/|\n%%/ด้วย/#/|\n%/และปรับส่วนที่เหลือของรหัสเพื่อให้มันทำงานกับที่
acrolith

@daHugLenny โอ้ขอบคุณฉันไม่รู้ว่า 4 * 3 เป็นตัวเลือกที่ถูกต้องสำหรับการแทนที่ สำหรับคำแนะนำที่สองของคุณฉันคิดว่ามันจะนานขึ้น
Erik the Outgolfer

@daHugLenny ^^ ฉันสามารถยืนยันได้ว่าคำแนะนำที่สองของคุณนั้นนานกว่านั้น
Erik the Outgolfer


@ ทำลายแตงโมฉันทำโดยเจตนา นอกจากนี้ยังมีใบหน้าอื่น ๆ : -:, :-, และ:- -__-
Erik the Outgolfer

12

Bash, 153 ไบต์

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

9
เมื่อพิจารณาถึงจำนวนคำตอบอื่น ๆที่ตกหลุมพรางของการสร้างรหัสได้นานกว่าการพิมพ์วงกลมตัวอักษรฉันคิดว่านี่เป็นคำตอบที่ฉลาดแน่นอน ยิ่งไปกว่านั้นฉันแค่ 153 ไบต์เท่านั้น
ลินน์

3
@Lynn อย่างไรก็ตามมันเป็นเพียงการทิ้งตัวอย่างไปยังเอาต์พุตโดยไม่พยายามเล่นกอล์ฟและไม่สนับสนุน อย่างน้อยคำตอบอื่น ๆ ก็ใช้ความพยายาม ...
Beta Decay

<<คุณสามารถลบช่องว่างก่อนและหลัง และจำนวนไบต์ของคุณคือ 153 ไบต์
TuxCrafting

1
ไม่echo '()()()()()()...\__\|'สั้นลง 4 ไบต์ใช่ไหม
Neil

@ ลินน์ฉันดีใจที่ฉันไม่มีปัญหานั้น รุ่นที่ต้องการค่าใช้จ่าย 100 ไบต์เพื่อพิมพ์วงกลม
Neil

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 ไบต์ (ไม่ใช่การแข่งขัน)

(ล่ามไม่ได้เป็นbuggèd จริง ๆเล็กน้อย (อีกต่อไป:]) แต่ไม่มีผลกับโปรแกรมนี้ )

ด้วยการปรับโครงสร้างและเขียนโปรแกรมของฉันใหม่ฉันเล่นกอล์ฟ ... หกไบต์

และตอนนี้ฉันต้องอธิบายใหม่ ...

ยังคงเป็นโพรบที่สั้นกว่าได้


อย่างน้อยที่สุดทางออกที่ดีที่สุดใน lang นี้ไม่เพียงเขียนในข้อมูลดิบ¯ \ _ (ツ) _ / ¯


#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

ไม่ใช่การแข่งขันหมายความว่ามันใหม่กว่าความท้าทาย
Destructible Lemon

5

ฟูริเยร์, 196 190 ไบต์

การแจ้งเตือนคุณสมบัติใหม่!

รหัส

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

การอธิบาย

โปรแกรมนี้เป็นการสาธิตฟังก์ชั่นครั้งแรกของฉันในฟูริเยร์:

ฟังก์ชั่นที่ถูกกำหนดเช่นนั้น:

|code goes here|f

ไพพ์แรกเริ่มการประกาศฟังก์ชัน จากนั้นคุณใส่รหัสในระหว่างท่อ ไพพ์สุดท้ายสิ้นสุดการประกาศฟังก์ชัน สุดท้ายfคือตัวแปรที่จัดเก็บฟังก์ชัน นี่อาจเป็นตัวละครใดก็ได้ตราบใดที่มันไม่ใช่ฟังก์ชั่นที่สงวนไว้

ตัวอย่างเช่นในรหัสของฉันฟังก์ชันหนึ่งคือ:

|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 สำหรับความพยายามครั้งที่สองของคุณ แต่การใช้อัญประกาศเดี่ยวจะทำให้มองสั้นลง จำนวนพิกเซลนั้นดีกว่า :)
23414 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+'\__\|'

ลองออนไลน์!

ไม่แน่ใจว่าฉันไม่เคยตอบคำถามนี้ได้อย่างไรฉันลุกขึ้นสู้และตอบคำถามอีกหลายข้อ ดีกว่าไม่สาย

สิ่งนี้ทำให้ parens ที่สมดุลหกตัวเป็นสตริงบนไพพ์ไลน์จากนั้นสตริงตัวอักษร (บันทึกสองไบต์) ของสองแถวถัดไป จากนั้นเราจะห่วงผ่านส่วนที่เหลือของตัวเลขแต่ละย้ำการเพิ่มจำนวนของช่องว่าง prepended (คน$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")

โปรดทราบว่าสิ่งนี้จะแตกต่างกันเนื่องจาก deverbosifier บีบอัดสตริงโดยอัตโนมัติและไม่ลบคำสั่งซ้ำซ้อน

ด้วยสตริงที่บีบอัด 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 ไบต์

ไม่มีความแม่นยำพี่ใน PHP? การคำนวณใช้เนื้อที่มากกว่าการคัดลอกและวาง ไม่สำคัญว่าตัวเลขสุดท้ายที่นี่ถูกตัดแล้วไม่ถูกปัดเศษ แต่ใน 64 บิต Pi ตัวเลขสุดท้ายจะถูกปัดเศษขึ้น

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ด้วย14) และด้วยเหตุผลที่แปลกประหลาดบางอย่างคุณไม่พบวงเล็บปิดที่ด้านบน การเปลี่ยนแปลงแก้ไขการส่งออก
Ismael Miguel

คำตอบ 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 หลังจากอ่านคำตอบและการเรียนรู้ของ @ Lynn ขออภัยถ้ามันผิดที่จะขโมยบางอย่างจากคุณโดยที่คุณไม่ได้แนะนำ โปรดบอกฉันถ้าเป็นเช่นนั้นและฉันจะย้อนกลับการเปลี่ยนแปลง

เอาท์พุต

python pi.pie.py

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

คุณรู้หรือไม่ว่าprint r'''(the pie)'''มีขนาดสั้นลง 28 ไบต์ :)
ลินน์

@ ลินน์นั่นมันไม่โกงเหรอ? ;-)
ElPedro

มันไม่ได้โกงไม่น่าสนใจมาก (และเราไม่ต้องการคำตอบสำหรับทุกภาษา IMO คำตอบ bash นั้นเพียงพอ) สิ่งที่คุณต้องการพูดถึงเมื่อโพสต์คำตอบเช่นนี้เพื่อรับทราบว่าความพยายามตีกอล์ฟของคุณกลายเป็นการสูญเสีย อาจยังมีมูลค่าการโพสต์ในกรณีที่คนอื่นเห็นวิธีที่จะใช้ความคิดการเล่นกอล์ฟของคุณและปรับปรุงมันอาจจะตีวิธีการไร้เดียงสา
Peter Cordes

ฉันจะแสดงความคิดเห็นของคุณบนกระดาน @Peter ฉันไม่ได้พยายามที่จะดูถูกเหยียดหยามดังนั้นยิ้ม ทุกคนสามารถพิมพ์งานท้าทาย ASCII แบบนี้ได้ ฉันค่อนข้างใหม่กับสิ่งนี้และอยู่ที่นี่เพื่อเรียนรู้ ถ้ามันหมายถึงสิ่งใดก็ตามที่ฉันใส่ความคิดเห็นและ +1 ในคำตอบของ Lynn เมื่อฉันเห็นว่ามันไม่ใช่แค่คำสั่งพิมพ์ แต่ให้ความสำคัญกับปัญหาที่ทำให้ความพยายามของฉันหมดไป ฉันได้เรียนรู้ ...
ElPedro

ตราบใดที่คำตอบของคุณยังคงมีวิธีการที่แตกต่างกันก็เป็นเรื่องดีที่จะได้แนวคิดจากคำตอบอื่น ๆ (ในภาษาเดียวกันหรือไม่) สิ่งเดียวที่จะไม่โอเคคือถ้าคำตอบของคุณจบลงด้วยรหัสเดียวกับของลินน์ โดยปกติถ้าคุณเห็นการปรับปรุงเล็กน้อยสำหรับคำตอบของคนอื่นคุณจะแนะนำสิ่งนั้นในความคิดเห็น แต่ถ้าคุณมีแนวคิดใหม่หลายอย่างหลังจากเห็นคำตอบของคนอื่นคุณสามารถโพสต์เวอร์ชันที่ปรับปรุงแล้วของคุณเป็นคำตอบใหม่ได้ ฉันไม่แน่ใจเกี่ยวกับมารยาทของสิ่งนี้ทั้งหมด แต่ฉันคิดว่ามันดีถ้าคำตอบของคุณแตกต่างกันอย่างมีนัยสำคัญ
Peter Cordes

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

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

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

. เฮ้อเพียง outputting พายสั้นแม้จะมีทั้งหมด backslashes หนี .. >>
นี่คือคำตอบก่อนหน้านี้ด้วยบิตเล็ก ๆ ของที่แม้ว่าจะยังไม่ทั่วไปมากหรือแฟนซี ( 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)+"\\__\\|";}

คำตอบที่น่าเบื่อเนื่องจากการแสดงผลลัพธ์โดยที่ไม่มีสิ่งแฟนซีมากเกินไปในภาษาจาวาจึงสั้นกว่าวิธีทั่วไป

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

Lua, 152 ไบต์

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

พยายามอย่างที่ฉันไม่สามารถบีบอัด pi

Lua เป็นเพียง verbose เกินไปที่จะทำมันอาจจะเป็นไพขนาดใหญ่กว่า แต่ไม่ใช่อันนี้

อีกวิธีการแก้ปัญหา 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..'       \\__\\|')

Pi ที่น่ารำคาญของ Lua นั้นไม่แม่นยำพอที่จะเติมไพ :(


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)
Qwerp-Derp

ดูเหมือนว่าจะมีข้อผิดพลาดทางไวยากรณ์แปลกคุณสามารถแก้ไขได้หรือไม่
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: ต้องการ paren การปิดพิเศษ 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|
       \__\|
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.