Pi bir dilim fırında


82

Bu tam metni basan veya çıkaran bir program veya işlev yazın (142 karakterden oluşur):

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

Programınız giriş yapmamalı (örneğin bunun mümkün olmadığı diller hariç sed) ve yukarıdaki metni (ve yalnızca yukarıdaki metni) çıktı olarak üretmelidir . Sondaki yeni satır kabul edilebilir.

Bu , bu yüzden en kısa cevap (bayt cinsinden) kazanır.


9
@RohanJhunjhunwala Bunun sıkıştırılabileceğini kanıtlamak için, Luis Mendo yaptı .
Outgolfer Erik

1
Lol, çok etkileyici olduğumu kanıtladım (ve çok memnunum!) Çok etkileyici
Rohan Jhunjhunwala

2
Soğuk algınlığı (), üstündeki sayısı N olan bir dilimi çıkarmak için N tamsayı girişini almalarını sağladınız .
user6245072

5
Sadece bildiğiniz gibi, 43 ondalık basamağa ihtiyacınız var.
Outgolfer Erik

4
Yaşamın anlamına bu kadar yakın ....
A. Mirabeau

Yanıtlar:


90

MATL , 70 68 67 bayt

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

Çevrimiçi deneyin!

açıklama

Ne dağınıklık. Ama hey, bir evrim var!

Belirli bir ifadeden sonra yığın içeriğini inceleyebilirseniz açıklama daha açık olacaktır . Bunu yapmak için, sadece X#0$%o noktaya yerleştirin . (Bunun anlamı: X# yığın içeriğini gösterme, 0$örtük olarak başka bir şey %gösterme, kodun kalanına yorum yapma). Örneğin , evrişimden hemen sonra yığına bakın .

'()'       % 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, bu etkileyici. Yapabilseydim iki kez daha fazla oy kullanırdım. Bunun sıkıştırılamaz bir kolmogorov mücadelesi olacağını düşündüm. Beni yanlış anladığın için teşekkür ederim!
Rohan Jhunjhunwala

3
@Rohan Nazik sözleriniz için teşekkürler!
Luis Mendo

1
: D Sorun değil! : D
Rohan Jhunjhunwala

3
:)Kodunuzda görünenler için +1 .
Outgolfer Erik

2
@Neil Hayatın aydınlık tarafını gör ...
Outgolfer Erik

37

Perl, 93 bayt

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

Komut satırı seçeneğini gerektirir, -l71Mbignum=bpi14 olarak sayılır \32. Değişmez karakter 26 ile değiştirilmelidir.

Örnek Kullanım

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

Perl, 111 bayt

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

Parametreli versiyon -nMbignum=bpi12 olarak sayılan komut satırı seçeneğini gerektirir .

Örnek Kullanım

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

Bu, sadece düz metin görüntülemekten 1 bayt daha kısadır .

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 karakter + 18 ters eğik çizgi + 10 satır arası karakterden bir bayt daha kısa değil mi?
Titus,

@Titus - Haklısın. Kaçan ters eğik çizgiyi saymayı unuttum. Teşekkürler!
Arnauld

18
Hafif ilginç, ama 2384626433832795028841971693 asal olur.
ElementW

1
@ElementW - Bundan bahsetmen çok komik, çünkü ben de kontrol ettim. :)
Arnauld

Sayıyı hex olarak yazmak ve onu bir dizgeye dönüştürmek herhangi bir baytı kurtarır mı?
Nic Hartley

17

Python 2, 131 bayt

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 ve Lynn arasındaki ortak çaba. Bakır da bir bayt kurtardı! İdeone bağlantısı.


Bu zarif + 1
ElPedro 18:16

forDöngüdeki parantezleri kaldırarak 1 byte tasarruf edebilmelisiniz .
Bakır,

16

/// , 129 127 bayt

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

Çevrimiçi deneyin!


-2 bayt bunu yaparsanız /!/()()/!!!yerine ()()()()()()ve değiştirme /#/|\n%%/ile /#/|\n%/ve bu kadarla çalışması için kodun geri kalanını ayarlayın.
16'da

@daHugLenny Oh teşekkürler, 4 * 3'ün yerini almak için geçerli bir aday olduğunu bilmiyordum. İkinci öneriniz için daha uzun olacağını düşünüyorum.
Outgolfer Erik

@daHugLenny ^^ İkinci önerinizin gerçekten daha uzun olduğunu onaylayabilirim.
Outgolfer Erik


@ Yıkılmaz Karpuz Kasıtlı olarak yaptım. Orada başka yüzler de vardır: -:, :-, :-ve -__-.
Outgolfer Erik

12

Bash, 153 bayt

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

9
Diğer cevapların ne kadarının değişmez pastayı basmaktan daha uzun kod üretme tuzağına düştüğünü göz önünde bulundurarak , bunun gerçekten akıllıca bir cevap olduğunu düşünüyorum. Ayrıca, sayım sadece 153 bayt.
Lynn

3
@Lynn Ancak, golf oynamak için hiçbir çaba göstermeden sadece örneği çıktıya atıyor ve bu yüzden cesareti kırılıyor. En azından diğer cevaplar çaba gösterdi ...
Beta Decay

Önce ve sonra boşlukları kaldırabilirsiniz <<. Ve bayt sayınız 153 bayttır.
TuxCrafting 18:16

1
echo '()()()()()()...\__\|'4 bayt daha kısa değil mi?
Neil

@ Lynn, bu sorunu yaşamadığım için mutluyum; Toplu iş, yalnızca pastayı yazdırmak için 100 baytlık ek yük gerektirir.
Neil

9

Toplu iş, 195 bayt

@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 bayt (yarışmıyor)

(tercüman gerçekten değil biraz :)] artık (dinlenmişti ama bu programı etkilemez )

Programımı yeniden yapılandırarak ve yeniden yazarak, altı bayt golf oynadım.

Ve şimdi yeni bir açıklama yapmalıyım ...

Yine de daha kısa problar olabilir


En azından bu dilde en iyi çözüm sadece ham verilere yazmak değil ¯ \ _ (ツ) _ / ¯


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

Çevrimiçi deneyin

açıklama

Açıkçası, bu gerçek programı çok iyi tanımlamıyor, ancak komutlar hakkında ipucu veriyor, bu yüzden biraz daha iyi anlayabilirsiniz.

#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

KOMPLEKS ŞEY: NESTED LOOPS

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

Geçerli hücre boşluk bırakmadan (sola hareket et, döngü yürüt:: hücre değil |, string değişkeninin geçerli karakterini yaz (hatırla ki pi?), Artan string gösterici, sola git), döngü yürüt: (hücre değil \, sağa taşı), yukarı taşı, sola


Neden rekabet etmiyorsun?
programmer5000

rekabet etmemek, meydan okumadan daha yeni olduğu anlamına geliyor
Destruct Lemon,

5

Fourier, 196 190 bayt

Yeni özellik uyarısı!

kod

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

açıklama

Bu program benim Fourier'deki ilk işlevlerim:

İşlevler şöyle tanımlanır:

|code goes here|f

İlk boru fonksiyon bildirimini başlatır. Daha sonra kodu boruların arasına yerleştirin. Son boru fonksiyon bildirimini sonlandırır. Son olarak, ffonksiyonun içinde saklandığı değişkendir. Bu, ayrılmış bir işlev olmadığı sürece herhangi bir karakter olabilir.

Örneğin, kodumda, s işlevlerinden biri:

|SaCaaSa|f

Değişkenin S92 sayısını kaydettiği ve C58 sayısını kaydettiği yer.

Çağrıldığında, işlev aşağıdakileri verir:

\::\

Çünkü börek en çok tekrarlanan şey.

Benzer şekilde çıktıyı düşürmek için bir döngü kullandım:

6(40a41ai^~i)

Hangi 40a41a6 kez kod tekrarlar . 40a41akendi çıktıları ile:

()

Yani kodu altı kez tekrarlamak çıktıları:

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

Böylece, turtanın kabuğunu çıkarır.

FourIDE'da dene!

Python yorumlayıcısında işlevler uygulamadığım için bu program http://tryitonline.net adresinde çalışmayacaktır.


4

Pyth, 89 bayt

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

Çevrimiçi deneyin!

\xxBu cevaptan kodu kopyalar / yapıştırırsanız ilgili ASCII karakteriyle değiştirin (onaltılık); SE'nin filtrelendiği paketlenmiş dizgede yazdırılamayan karakterler içeriyor.

açıklama

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

Jöle , 83 bayt

elbette hala oldukça golfabale

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

TryItOnline

Nasıl?

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
Vay, bu şimdiye kadar gördüğüm en uzun Jelly programı: o
Beta Decay

@ BetaDecay 11 baytta yapılabileceğinden şüphe yok ...
Jonathan Allan

3

Python 2, 193 176 bayt

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

Veya daha kısa, daha sıkıcı bir cevap:

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

3
Bunun print r'''(the pie)'''38 bayt daha kısa olduğunu biliyor musunuz ? :)
Lynn

İkinci çabanız için +1, ancak tek tırnak işareti kullanmak, aramayı kısaltır. Piksel sayısı daha iyi :)
ElPedro

3

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

* Bunun orijinal ve aldatıcı olduğunu buluyorum

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

201 Bayt:

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

Burada golf oynayacak bir şeyler olduğuna eminim

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

Cevap için teşekkürler! Fazladaki boşluğu kaldırarak en az bir bayttan tasarruf edebilirsiniz .Substring(j, i).
Bakır,

Bu,
VS'de

Pasta sözünü döndüren adsız bir işlev>% 25 daha kısadır: ()=>@"(pie)"149 bayttır .
Lynn

Aynı zamanda sıkıcı ve hile gibi hissediyor. Kurallar yazdırmak, geri dönmek demek değil
pinkfloydx33

@ pinkfloydx33 Topluluk görüş birliğine göre varsayılan olarak yazdırma ve iade işlemlerine varsayılan olarak izin verilir .
mbomb007 19:16

3

PowerShell , 105 bayt

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

Çevrimiçi deneyin!

Bu zorluğa nasıl cevap vermediğimden emin değilim ... Onu ve diğer cevapların bir çoğunu iptal ettim. Oh, peki, hiç olmadığı kadar iyi geç?

Bu, altı dengeli pareni boru hattına bir dize olarak koyar, ardından sonraki iki satırın değişmez dizesini (iki bayttan kurtarır). Sonra, her bir yineleme $iile birleştirilmiş hazır alanların sayısını ( ) artıran geri kalan sayılar arasında dolaşıyoruz.\::<number>| . Sonunda, turtanın ucundan oluşan bir ip yaratırız. Bu dizgilerin tümü boru hattında bırakılmış ve üstü kapalı Write-Outputbir çizgi arasına yeni bir çizgi yapışıyor.

Bu sadece pastayı basmaktan 39 bayt daha kısa .


3

Kömür , 31 bayt

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

Çevrimiçi deneyin!

Merak ediyor olabilirsiniz: Bu büyücülük nedir? Nasıl doldurabilirsinizUGPi ? Kömür Wolfram Language desteği almaya başlıyor, umarım bir gün daha fazla zorlukla rekabet edebilecek!

Önceki, 71 bayt

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

Çevrimiçi deneyin!

gereksiz sözlerle dolu

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'ın otomatik olarak dizeleri sıkıştırdığından ve gereksiz komutları kaldırmadığından bunun farklı olduğunu unutmayın.

Sıkıştırılmış dizelerle, 52 bayt

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

xxd çıkışı

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

Çevrimiçi deneyin!


2

PHP, 170 bayt

PHP'de rasgele kesinlik yok mu? Hesaplamak, Kopyala ve Yapıştır işleminden çok daha fazla alan gerektirir. Buradaki son hanenin kesik olduğu, yuvarlanmadığı önemli değil; ancak 64 bit Pi'de son rakam yukarı yuvarlanır.

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

İle koş php -r '<code>'

sıralanmamış arıza

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

Çıktıda 1 alan eksik (ki bunu 13a ile değiştirerek düzeltebilirsiniz 14). Ve, tuhaf bir nedenden dolayı, üstteki kapanış parantezini kaçırıyorsunuz. Değişiklik yapmak çıktıyı düzeltir.
Ismael Miguel

PHP cevapları bir <?phpetikete ihtiyaç duyar , aksi halde sadece sabit çıktı üretirler. PHP Merhaba, Dünya! aslında buna bağlı. Ancak, sabit çıktının konuşması, sadece değişmez pastayı içeren ve hiç <?phpetiketi olmayan bir PHP cevabını büyük bir farkla yenebilirdi…
Lynn

@Lynn: Çalıştığınızda PHP'nin <?phpetikete ihtiyacı yoktur -r.
Titus

2

Python 2, 183 171 bayt

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

Zekice bir şey yapmaz. Sadece büyük bir dize oluşturur ve sonra yazdırır.

DÜZENLE

Lynn'in cevabını ve öğrenimini okuduktan sonra 171'e düşürüldü. Üzgünüm (utanmadan) sizden bazı baytları siz çalmadan çalmak yanlışsa. Lütfen öyleyse söyle bana değişikliği geri alacağım.

Çıktı

python pi.pie.py

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

Bunun print r'''(the pie)'''28 bayt daha kısa olduğunu biliyor musunuz ? :)
Lynn

@ Lynn Bu hile değil mi? ;-)
ElPedro 18:16

Hile yapmak değil, çok ilginç değil (ve her dil için bu cevaba ihtiyacımız yok, IMO. Bash cevabı yeterli). Daha çok, böyle bir cevabı gönderirken bahsetmek isteyeceğiniz bir şey gibi, golf oynama girişiminizin bir kayıp olduğunu kabul etmek için. Belki bir başkası golf fikrinizi almak ve geliştirmek için bir yol görürse, belki de naif yaklaşımı yenmek için göndermeye değer.
Peter Cordes

Yorumlarınızı @Peter gemide alıyorum. saygısız olmaya çalışmıyordum, bu yüzden gülen yüz. Herkes böyle bir ASCII sanat mücadelesini basabilir. Bu konuda oldukça yeniyim ve öğrenmek için buradayım. Eğer bir şey ifade ediyorsa, sadece bir açıklama olmadığını gördüğümde, konuyu çabalarımı tamamen aşacak şekilde ele aldığımda Lynn'in cevabına bir yorum ve +1 yazdım. Ben öğrendim ...
ElPedro

Cevabınız hala farklı bir yaklaşıma sahip olduğu sürece, diğer cevaplardan fikirleri almak iyidir (aynı dilde olsun veya olmasın). Doğru olmaz tek şey, cevabınız Lynn'inkiyle aynı kodla bittiyse olur. Genellikle başkasının cevabında küçük bir gelişme görürseniz, bunu bir yorumda önerirsiniz. Ancak, başkasının cevabını gördükten sonra birden fazla yeni fikriniz varsa, gelişmiş versiyonunuzu yeni bir cevap olarak bile gönderebilirsiniz. Bunun görgü kurallarından tamamen emin değilim, ancak cevabınız önemli ölçüde farklı olduğu sürece bunun iyi olduğunu düşünüyorum.
Peter Cordes

2

Ruby, 140 138 137 bayt

Yakuttaki bu soruna çözümüm, bu benim ilk kod golf cevap: 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)}

Okunabilir versiyon ve açıklama:

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

Hiçbir şey akıllıca değil, sadece basit döngüler kullanarak :)

Çıktı:

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

2
PPCG'ye Hoşgeldiniz! Güzel ilk mesaj!
Rɪᴋᴇʀ

2

Stax , 63 bayt

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

Çevrimiçi çalıştırın ve hata ayıklayın!

Kabul edilen MATL cevabından daha kısa. Stax'ta sabit pi olarak daha fazla basamak depolanırsa, kesinlikle daha kısa olacaktır.

(Koddaki nedir Pi<0?)

açıklama

Açıklamak için ASCII eşdeğerini kullanır;

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

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

. Kederlen, basitçe ..> bile tüm kaçan ters eğik çizgi ile, pasta kısadır çıkışı>
Burada, göze bir nebze önceki cevaptır hala çok genel değil ya fantezi (her ne kadar 236 bayt ):

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

Oldukça sıkıcı bir cevap, çünkü sonucu çok fazla süslü şeyler olmadan çıkarmak, genel bir yaklaşımdan daha kısadır.

Ungolfed ve test kodu:

Burada dene.

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

Çıktı:

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

1

Qbasic, 175 bayt

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

1

Lua, 152 Bayt

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

Bu pi'yi sıkıştıramadığımdan emin olabilirim.

Lua bunu yapmak için çok ayrıntılı, belki daha büyük bir pi, ama bu değil.

Başka bir çözüm, 186 Bayt.

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

Can sıkıcı bir şekilde Lua'nın pi'si pi'yi dolduracak kadar bile doğru değil. :(


1

Javascript, 172 bayt

Çalıştırmak için konsolunuza yapıştırı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>1?'::':'||'}\\`[y-x]||' ';console.log(s)

PPCG'ye Hoşgeldiniz! Sadece bildiğiniz gibi, kodunuzu dört boşlukla biçimlendirebilirsiniz (düzenlememe bakın). Ayrıca, programınıza bayt miktarını cevabınızın en üstüne yerleştirin (örn. Javascript: 100 bytes).
Qwerp-Derp 21:16

Garip sözdizimi hataları var gibi görünüyor, bunları düzeltebilir misiniz?
programmer5000

1

JavaScript (ES6), 170 bayt 165 bayt

biraz "hile yaptı", çünkü eğer konsolda çalıştırılsaydı, dönüş değeri görüntülenirdi

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

Biraz tikladıktan sonra, işlev şöyle görünür (işlev, 0 değerine sahip parametreyle çağrılmalıdır):

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

Fonksiyonu 167 bayt olarak çağırmak istiyorsanız:

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: Ekstra kapanış paren ihtiyacı var. 2: değiştirme "|\n"ile |<newline>burada <newline>değişmez bir satır olduğunu. 3: Başına ekle y=>ve hile olmayacak. 4: Siteye Hoşgeldiniz!
programmer5000

1
@ programmer5000 girişiniz için teşekkürler, son tweak'ımda kullandım. :-D
winner_joiner

Parametreyi ()içine alarak 2 bayt tasarruf edin v. Çıktınızın 2. ve 3. satırların önünde fazladan bir boşluğu var gibi görünüyor. Ayrıca, 0bir argüman olarak geçmenize gerek yok , işleviniz onsuz iyi çalışacak ve bu zorluğa izin verilmez.
Shaggy

evet teşekkür ederim, daha önce varsayılan değer vardı. :-D
winner_joiner

0

PHP, 142 bayt

Sinsi-sinsi :) phpsadece herhangi bir <?php ?>çift görmüyorsa, onları PHP kodu olarak yorumlamaya çalışmadan her şeyi basar .

()()()()()()
|\3.1415926|
|:\53589793|
\::\2384626|
 \::\433832|
  \::\79502|
   \::\8841|
    \::\971|
     \::\69|
      \::\3|
       \__\|
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.