Pizza, Pizza, Derin Yemek Pizza!


11

5 Nisan , bu mücadelenin teması Ulusal Derin Dalış Pizza Günü. Pozitif bir tamsayı n( n0'dan büyük) verildiğinde , bir ASCII derin tabak pizza oluşturun. Gösterilen gerçek derin tabak pizza:

Bir pizza!

Gördüğünüz gibi, altta ve pizzanın geri kalanını çevreleyen bir kabuk tabakası var.

Pizza nasıl yapılır

Kabuk iki katmandan oluşur. İlk katman nuzun ve n*3uzun olacaktır. Uzunluk, en yüksek satırdaki karakterlerin (boşluklar dahil) sayısıdır. Yani verilen n1'dir, ilk katman şöyle görünür:

\_/  1 character tall
 3 characters long

Eğer niki geçerli:

\    /   2 characters tall
 \__/
  6 characters long

Şimdi kabuğun ikinci tabakası için. İlk, iç kabuğun dışına çıkacak , bu yüzden n+2karakter uzunluğunda ve (n*3)+6)karakter uzunluğunda olacak. Verilen nbir:

\       /  3 characters tall
 \     /
  \___/
   9 characters long (3 underscores, 3 slashes on either side)

Eğer niki geçerli:

\          / 4 characters high
 \        /
  \      /
   \____/
    12 characters long

Daha sonra \/iç ve dış kabuk için en yüksek iki çiftini birbiriyle eşleştireceksiniz . İçinde n1:

\ \   / /
 \ \_/ /
  \___/

Doğru yapılırsa, her katman arasında bir karakter farkı olan üstleri olmayan bir V gibi görünecektir. Üst kısımlardan bahsetmişken, kabuk , kabuğunu ve pizzayı tamamlamak için uzun /\bir alt çizgi çizgisiyle ayrılmış bir çift ile birleştirilecektir (n*3)+2.

Örnekler

Eğer n1'dir:

/\_____/\
\ \   / /
 \ \_/ /
  \___/

n 2:

/\________/\
\ \      / /
 \ \    / /
  \ \__/ /
   \____/ 

n 3:

/\___________/\
\ \         / /
 \ \       / /
  \ \     / /
   \ \___/ /
    \_____/

Kazanan Ölçüt

Bu , yani bayt içindeki en kısa kod kazanır!


1
İç kabuk örneklerinde bir şey göze çarpıyor. N = 1 için olanı küçük görünüyor, n = 2 için olanı son n = 1 örneğindeki iç kabuğa benziyor, vb ...
Adám

Biz kullanabilir miyim -yerine ait _?
Okx

@Okx Hayır yapamazsın
Anthony Pham

Deep Dish Pizza Günü Kutlu Olsun!
Arjun

Yanıtlar:


2

Odun kömürü , 35 bayt

Nθ←_←×_θ↖θ↖²M→/P×_⁺²×²θ↘θ↘¹\×_θ‖BOθ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

Nθ

Pizza boyutunu girin.

←_←×_θ

Dış kabuk tabanının bir kısmını yazdırın.

↖θ↖²

Dış kabuğun sol tarafını yazdırın.

M→/P×_⁺²×²θ

Üst kabuğun bir kısmını yazdırın.

↘θ↘¹\

İç kabuğun sol tarafını yazdırın.

×_θ

İç kabuk tabanının bir kısmını yazdırın.

‖BOθ

Pizza tamamlamak için yansıtın.

Kömürün modern ilavelerinin boyutu 31 bayta düşürdüğünü unutmayın:

Nθ←×_⊕θ↖θ↖²M→/P×_⊗⊕θ↘⊕θ\×_θ‖BOθ

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur.


Yanlışlıkla bir hata eklediğimden emin değilim, ancak dolgu düzgün çalışmıyor gibi görünüyor mu?
Sadece ASCII

@ Sadece ASCII Dolum? Test durumu en azından bana doğru görünüyor; sence ne işe yaramıyor?
Neil

Bence 4 ve üstü girişlerle çalışmıyor?
Sadece ASCII

@ Sadece ASCII Huh, bunu nasıl görmezden geldim ...
Neil

5

JavaScript (ES6), 136 bayt

f=
n=>"/\\"+(r=s=>s[0][0].repeat(n-1)+s)`_`+r`_`+r`___/\\
`+r` `.replace(/ /g,"$`\\ \\$`   $'$'$'/ /\n")+r` \\ \\`+r`_/ /
`+r`  \\`+r`___/`
<input type=number min=1 oninput=o.textContent=f(this.value)><pre id=o>

Tüm pizza çok tekrarlayıcıdır, bu nedenle r(etiketli bir şablon hazır olarak tasarlanmıştır) işlevi, giriş nsürelerinin ilk karakterini tekrarlar . Bu, pizzanın üst ve alt iki çizgisini işler. Orta, bir dizi boşluk değiştirilerek tekrarlanır; $`ve $'subsitutions otomatik olarak böylece konumlandırma artan ve boşlukları sayısındaki azalmanın uygun \ \ve / /uygun bir şekilde.


2

Python 2, 153 151 bayt

Çevrimiçi deneyin

n=input()
a=' '*n
b='_'*n
print'/\\__'+b*3+'/\\'
i=0
exec"print' '*i+'\ \\\\'+' '*(3*n-2*i)+'/ /';i+=1;"*n
print a+'\ \\'+b+'/ /'
print a+' \\_'+b+'_/'

@KoishoreRoy sayesinde tekrarlanan değerleri değişkenlerle değiştirerek -2 bayt


1
Yerine print' '*=~n+'\\'+'_'*-~n+'_/'yazamaz print' '*i+' \\_'+'_'*n+'_/'mısın? (Ya da nyerine i, ama önceki satırı kopyalıyordum.)
Neil

Ben değiştiremem @Neil -~niçin içünkü bu noktada i==n. Ancak ikinci değişiklik iyidir. Ayrıca fikriniz -~nsayesinde kısaltıldım
Dead Possum

Ben sadece değiştirmiyordu -~niçin iSüreye ekleyerek çünkü. (Ama yine de bunu kendi başınıza hallediyor gibi görünüyorsunuz. Ayrıca bunu zaten fark ettim nve ibu noktada
Neil

2

MATLAB, 333 bayt

(Lazy-ish girişimi)

function t(n);p=@(q)fprintf(q);s=@(x)p(' ');r=@()p('/ /');l=@()p('\\ \\');f=@()p('/');b=@()p('\\');u=@(x)p('_');h=@()p('/\\');e=@()p('\n');h();arrayfun(u,1:3*n+2);h();e();for i=1:n;arrayfun(s,1:i-1);l();arrayfun(s,1:3*n-2*(i-1));r();e();end;arrayfun(s,1:n);l();arrayfun(u,1:n);r();e();arrayfun(s,1:n+1);b();arrayfun(u,1:n+2);f();e();

biçimlendirilmiş:

function d(n)
p=@(q)fprintf(q);
s=@(x)p(' ');
r=@()p('/ /');
l=@()p('\\ \\');
f=@()p('/');
b=@()p('\\');
u=@(x)p('_');
h=@()p('/\\');
e=@()p('\n');
h();arrayfun(u,1:3*n+2);h();e();
for i=1:n
arrayfun(s,1:i-1); l(); arrayfun(s,1:3*n-2*(i-1)); r();e();
end
arrayfun(s,1:n); l(); arrayfun(u,1:n); r();e();
arrayfun(s,1:n+1); b(); arrayfun(u,1:n+2); f();e();

Temel fikir, her şeyi basmak için işlev tutamaçlarım var ve sonra hemen hemen kaba kuvvet uyguladım. Döngü için nolanı, iç katmanın en üstü ve altı arasındaki katmanlar içindir. (Boşlukların) tekrarı ve dizi girişleri ile _yapılır arrayfun. Daha sonra daha fazla zaman alırsam bunu yapmanın daha ilginç yollarını düşünmeye çalışacağım.



2

Kömür , 54 52 bayt

A⁺N²β↖M↓↙¹M→↘βM↑×_β↗βM←↖¹M↓↙βM↑←×_⁺β±²↖βM↘M→×_⁺×β³±⁴

Açıklama:

A⁺N²β       Assign input + 2 to the variable β
↖             Move up and left one, printing a \
M↓           Move pointer down one
↙¹            Move down and left one, printing a /
M→           Move pointer right one
↘β            Move down and right β times
M↑           Move pointer up
×_β           Write underscores β times
↗β            Move up and right β times
M←           Move pointer right one
↖¹           Move up and left one
M↓           Move pointer down one
↙β           Move down and right β times
M↑           Move up one
←             Set direction to left
×_⁺β±²        Write underscores β - 2 times
↖β            Move up and left β times
M↘           Move down and right one
M→           Move right one
×_⁺×β³±⁴      Write underscores (β * 3) - 4 times

Önceki cevabım, daha önce cevaplamadığım bir dil olan Retina idi. Şimdi, daha önce cevaplamadığım bir cevabın var.

Çevrimiçi deneyin!


2

PHP, 209200131313 bayt

sonunda JS atıyor :)

echo($f=str_pad)("/\\",1+3*$x=$n=1+$argn,_),"/\\
";for(;$n;)echo$f("\\ \\",2*$n+$x," _"[!--$n]),"/ /
",$p.=" ";echo$f("\\",2+$x,_),"/";

STDIN'den girdi alır; ile çalıştırın -nRveya bir aile pizza sipariş .

Yıkmak

// print top
echo($f=str_pad)("/\\",1+3*$x=$n=1+$argn,_),"/\\\n";
// loop N+1 times
for(;$n;)
    // print current line and left padding for next line
    echo$f("\\ \\",2*$n+$x," _"[!--$n]),"/ /\n",$p.=" ";
// print bottom
echo$f("\\",2+$x,_),"/";

2

JavaScript (ES6), 205 bayt


Bu benim ilk yayınım!

f=Başlangıçta bir ekleyin ve beğen f(arg).

n=>{a=[];w=" ";u="_";t=`/\\${u.repeat(n*3+2)}/\\
`;for(i=0;i<n+1;i++){c=i==n?u:w;a.push(`${w.repeat(i)}\\ \\${c.repeat((n+1-i*2)+n+(n-1))}/ /
`)};return [t,...a,`${w.repeat(i)}\\${u.repeat(n+2)}/`].join``}

Not: Tüm satır kesmeleri gereklidir!


f=n=>{a=[];w=" ";u="_";t=`/\\${u.repeat(n*3+2)}/\\
`;for(i=0;i<n+1;i++){c=i==n?u:w;a.push(`${w.repeat(i)}\\ \\${c.repeat((n+1-i*2)+n+(n-1))}/ /
`)};return [t,...a,`${w.repeat(i)}\\${u.repeat(n+2)}/`].join``}

document.querySelector("#elem").innerHTML = f(+prompt("Enter a Number"));
<pre id="elem">


açıklama

Kod önce bir Dizi bildirir a. Daha sonra, beyan wve usırasıyla boşluk ve alt çizgi değerine sahip olan. Daha sonra, kabuğun değerini tutmak için bir String değişkeni bildirir ( /\+(n*3+2 underscores)+/\Challenge'da belirtildiği gibi hesaplanabilir ). Bundan sonra, bir forilmek ve a ile Template Literal, pizzanın ortası oluşturulur (her katmanın ibaşında beyaz boşluklar ve ve (n+1-i*2)+n+(n-1)arasındaki boşluklar \ \ve / /burada döngü idizinini temsil eder for). Sonunda, pizzanın alt kısmı oluşturulur ( (i whitespaces)+\+(n+2 underscores)+/). Tüm parçalar birleştirilir ve çıktılanır (ted).


Snippet herhangi bir nedenle ASCII resmini doğru görüntülemiyorsa, buraya bir göz atın .

Herkese Mutlu Deep Dish Pizza Günü!



1

Toplu, 200 bayt

@set l=@for /l %%i in (1,1,%1)do @call 
@set t=
@set s=
%l%set s=___%%s%%
@echo /\_%s%_/\
%l%echo %%t%%\ \%%s:_= %%/ /&call set t= %%t%%&call set s=%%s:~2%%
@echo %t%\ \%s%/ /
@echo %t% \_%s%_/

tsiçeri girerken sol girintiyi içerir; Bunu _s orta sıralar üzerinde boşluklu sübstitüe edilir. lsadece tekrardan kaçınmak için var.


0

V , 57 bayt

i\ \´ / /ÙãxX2r_>>Ù>>lxxE2r_À­ñHãyêP>GÄXã2é ñHÄÒ_R/\$h.

Çevrimiçi deneyin!

(Her zamanki gibi) bu, çok sayıda ASCII olmayan kötü karakter ve yazdırılamaz karakter içerdiğinden, burada bir hexdump var:

00000000: 695c 205c b420 2f20 2f1b d9e3 7858 3272  i\ \. / /...xX2r
00000010: 5f3e 3ed9 3e3e 6c78 7845 3272 5fc0 adf1  _>>.>>lxxE2r_...
00000020: 48e3 79ea 503e 47c4 58e3 32e9 20f1 48c4  H.y.P>G.X.2. .H.
00000030: d25f 522f 5c1b 2468 2e                   ._R/\.$h.

Yakında daha ayrıntılı bir açıklama yapacağım, ancak işte üst düzey bir genel bakış:

i\ \´ / /ÙãxX2r_>>Ù>>lxxE2r_
"Create 
"\ \    / /
" \ \__/ /
"  \____/
"This can probably be compressed a lot more

À­ñHãyêP>GÄXã2é ñ
"*arg1 times*, expand the pizza slice

HÄÒ_R/\$h.
"Add the crust

0

C (clang) , 211 215 bayt

i,l;f(n){l=n*3+6;char u[l];for(i=0;i<l;)u[i++]='_';u[l-1]=i=0;printf("/\\%.*s/\\\n",l-4,u);for(;i<n;i++)printf("%*s\\ \\%*.s/ /\n",i,"",n*3-(2*i),"");printf("%*.s\\ \\%.*s/ /\n%*.s\\%.*s/\n",i,"",n,u,i+1,"",n+2,u);}

Çevrimiçi deneyin!

Güzel Kod:

i,l;
f(n) {
    l = n*3+6;
    char u[l];

    // Initialize u[] with a full line of underscores,
    for (i=0;i<l;)
        u[i++] = '_';

    // Make sure the string ends in a valid way
    u[l] = i = 0;

    /* Print the crust 'top'
     * l-4 dashes are needed because '/\/\'
     * %.*s notation to pad (l-4) bytes of the underscore string
     */
    printf("/\\%.*s/\\\n", l-4,u);

    /* Print n rows of just 'walls' \ \  / /
     * each row has i=0++ leading spaces,
     * and each row has n*3-(2i) center spaces
     */
    for(; i<n; i++)
        printf("%*s\\ \\%*.s/ /\n", i,"", n*3-(2*i), "");

    /* Print i spaces, '\ \', n underlines, '/ /'
     * then i+1 spaces, '\', n+2 underlines, and '/'
     */
    printf("%*.s\\ \\%.*s/ /\n%*.s\\%.*s/\n",i,"",n,u,i+1,"",n+2,u);
}

Düzenlemeler:

  • s [l] çıkarıldı ve% 'den değiştirilerek ilişkilendirildi. % .s için s gösterimi
  • uyumluluk için işlev sarıcı eklendi ve çevrimiçi deneyin


0

CJam, 74 Bayt

Yol çok uzun. Başka bir yaklaşım deneyeceğim.

"/\\"ri:M3*:A2+'_*1$NL{"\ \\"AS*"/ /"3$S+A((:A;N\}M*4$A'_*4$N4$S'\A2+'_*'/

Dizeyi satır satır oluşturur. Çok çılgın bir şey yok.


0

CJam, 89 bayt

Aslında bu benim şu andaki diğer çözümümden daha uzun, ama bence daha golf edilebilir:

ri{:T)_S*a*ee_{~'\t}%TS*aTU+*'_f+@{~'/t}%W%++z}:K~2S*f{\+}T1:U+K..e>"/\\"'_T3*(*1$++a\+N*

Yığın izleme:

"2" ; r
2 ; i
2 {:T)_S*a*ee_{~'\t}%TS*aTU+*'_f+@{~'/t}%W%++z} ; {}
2 {:T)_S*a*ee_{~'\t}%TS*aTU+*'_f+@{~'/t}%W%++z} ; :K
2 ; ~
2 ; :T
3 ; )
3 3 ; _
3 3 " " ; S
3 "   " ; *
3 ["   "] ; a
["   " "   " "   "] *
[[0 "   "] [1 "   "] [2 "   "]] ; ee
[[0 "   "] [1 "   "] [2 "   "]] [[0 "   "] [1 "   "] [2 "   "]] ; _
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ; {~'\t}%
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] 2 ; T
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] 2 " " ; S
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] "  " ; *
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] ; a
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] 2 ; T
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] 2 0 ; U
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  "] 2 ; +
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  " "  "] ; *
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  " "  "] '_ ; '_
[[0 "   "] [1 "   "] [2 "   "]] ["\  " " \ " "  \\"] ["  _" "  _"] ; f+
["\  " " \ " "  \\"] ["  _" "  _"] [[0 "   "] [1 "   "] [2 "   "]] ; @
["\  " " \ " "  \\"] ["  _" "  _"] ["/  " " / " "  /"] ; {~'/t}%
["\  " " \ " "  \\"] ["  _" "  _"] ["  /" " / " "/  "] ; W%
["\  " " \ " "  \\" "  _" "  _" "  /" " / " "/  "] ; ++
["\      /" " \    / " "  \__/  "] ; z
["\      /" " \    / " "  \__/  "] "  " ; 2S*
["  \      /" "   \    / " "    \__/  "] ; f{\+}
["  \      /" "   \    / " "    \__/  "] 2 ; T
["  \      /" "   \    / " "    \__/  "] 2 1 ; 1
["  \      /" "   \    / " "    \__/  "] 2 1 ; :U
["  \      /" "   \    / " "    \__/  "] 3 ; +
["  \      /" "   \    / " "    \__/  "] ["\          /" " \        / " "  \      /  " "   \____/   "] ; K
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] ; ..e>
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" ; "/\\"
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ ; '_
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ 3 ; T
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ 9 ; 3*
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" '_ 8 ; (
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" "________" ; *
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\\" "________" "/\\" ; 1$
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] "/\________/\\" ; ++
["\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] ["/\________/\\"] ; a
["/\________/\\" "\ \      / /" " \ \    / / " "  \ \__/ /  " "   \____/   "] ; \+
"/\________/\
\ \      / /
 \ \    / / 
  \ \__/ /  
   \____/   " ; N*
; [implicit output]
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.