Pizza, Pizza, Deep Dish Pizza!


11

Ngày 5 tháng 4 là Ngày Pizza Quốc gia Deep DIsh, chủ đề của thử thách này. Cho một số nguyên dương n( nlớn hơn 0), tạo ra một chiếc bánh pizza sâu ASCII. Thực tế món pizza sâu hiển thị:

Một cái pizza!

Như bạn có thể thấy, có một lớp vỏ ở dưới cùng và bao quanh phần còn lại của pizza.

Cách làm pizza

Lớp vỏ được làm bằng hai lớp. Lớp đầu tiên sẽ ncao và n*3dài. Độ dài là số lượng ký tự (bao gồm khoảng trắng) trong dòng cao nhất. Vì vậy, được đưa ra nlà 1, lớp đầu tiên sẽ trông như thế này:

\_/  1 character tall
 3 characters long

Nếu nlà hai:

\    /   2 characters tall
 \__/
  6 characters long

Bây giờ cho lớp thứ hai của lớp vỏ. Nó sẽ đi ra ngoài lớp vỏ đầu tiên, bên trong, do đó, nó sẽ là những n+2nhân vật cao và (n*3)+6)dài. Cho nlà một:

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

Nếu nlà hai:

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

Sau đó, bạn sẽ ghép hai cặp cao nhất \/với nhau cho lớp vỏ bên trong và bên ngoài. Trong nlà 1:

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

Nếu được thực hiện chính xác, nó sẽ trông giống như một chữ V không có đỉnh với sự khác biệt một ký tự giữa mỗi lớp. Nói về ngọn, lớp vỏ sẽ được nối với nhau bằng một cặp /\, cách nhau bởi một hàng (n*3)+2dài bên dưới để hoàn thành lớp vỏ và bánh pizza.

Ví dụ

Nếu nlà 1:

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

n là 2:

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

n là 3:

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

Tiêu chí chiến thắng

Đây là , vì vậy mã ngắn nhất tính bằng byte sẽ thắng!


1
Một cái gì đó nhìn ra trong các ví dụ lớp vỏ bên trong. Cái cho n = 1 dường như nhỏ, cái cho n = 2 trông giống như lớp vỏ bên trong từ ví dụ n = 1 cuối cùng, v.v ...
Adám

Chúng ta có thể sử dụng -thay vì một _?
Okx

@Okx Không bạn có thể không
Anthony Phạm

Chúc mừng ngày Deep Dish Pizza!
Arjun

Câu trả lời:


2

Than , 35 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

Nθ

Nhập kích thước của pizza.

←_←×_θ

In một phần của lớp vỏ ngoài.

↖θ↖²

In lớp vỏ bên trái.

M→/P×_⁺²×²θ

In một phần của lớp vỏ trên cùng.

↘θ↘¹\

In lớp vỏ bên trong bên trái.

×_θ

In một phần của lớp vỏ bên trong.

‖BOθ

Phản ánh để hoàn thành chiếc bánh pizza.

Lưu ý rằng các bổ sung hiện đại cho Than thu nhỏ kích thước xuống còn 31 byte:

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã.


Không chắc chắn nếu tôi vô tình giới thiệu một lỗi, nhưng điền có vẻ không hoạt động đúng?
ASCII-chỉ

@ Chỉ điền ASCII? Các trường hợp thử nghiệm ít nhất có vẻ đúng với tôi; Bạn nghĩ gì không hiệu quả?
Neil

Tôi nghĩ rằng nó không hoạt động với đầu vào từ 4 trở lên?
ASCII-chỉ

@ Huh chỉ có ASCII, làm thế nào tôi bỏ qua điều đó ...
Neil

5

JavaScript (ES6), 136 byte

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>

Toàn bộ bánh pizza rất lặp đi lặp lại vì vậy rchức năng (được thiết kế dưới dạng mẫu được gắn thẻ) lặp lại ký tự đầu tiên của nthời gian nhập liệu . Điều này xử lý hai dòng trên cùng và dưới cùng của bánh pizza. Giữa được lặp lại bằng cách thay thế một chuỗi khoảng trống; $`và các phần phụ $'tự động tương ứng với số lượng khoảng trống tăng và giảm do đó định vị \ \/ /thích hợp.


2

Python 2, 153 151 byte

Dùng thử trực tuyến

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+'_/'

-2 byte bằng cách thay thế các giá trị lặp lại bằng các biến nhờ vào @KoishoreRoy


1
Thay vì print' '*=~n+'\\'+'_'*-~n+'_/'bạn không thể viết print' '*i+' \\_'+'_'*n+'_/'? (Hoặc nthay vì i, nhưng tôi đã sao chép dòng trước đó.)
Neil

@Neil tôi không thể thay đổi -~nđể i, bởi vì vào thời điểm này i==n. Nhưng thay đổi thứ hai là tốt. Ngoài ra tôi đã rút ngắn -~n, nhờ vào ý tưởng của bạn
Dead Possum

Tôi đã không chỉ đơn giản là thay đổi -~nđể i, bởi vì tôi đã bổ sung thêm không gian. (Nhưng bạn dường như đã làm việc đó ra vào anyway riêng bạn Ngoài ra tôi đã lưu ý rằng. niđều giống nhau ở điểm này.)
Neil

2

MATLAB, 333 byte

(Nỗ lực lười biếng)

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

Định dạng:

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

Ý tưởng cơ bản là tôi có tay cầm chức năng để in mọi thứ, và sau đó tôi chỉ dùng vũ lực khá nhiều. Vòng lặp for là dành cho các nlớp nằm giữa lớp trên cùng và dưới cùng của lớp bên trong. Sự lặp lại của (khoảng trắng) và _được thực hiện bằng cách sử dụng arrayfun, với các đầu vào mảng. Sẽ cố gắng nghĩ ra những cách thú vị hơn để làm điều này nếu tôi có thêm thời gian sau đó.



2

Than , 54 52 byte

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

Giải trình:

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

Câu trả lời trước của tôi là ở Retina, một ngôn ngữ mà tôi chưa đăng câu trả lời trước đó. Bây giờ, bạn đã có câu trả lời trong Char than mà trước đây tôi chưa đăng câu trả lời.

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


2

PHP, 209 200 137 135 byte

cuối cùng cũng đánh bại được :)

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

Lấy đầu vào từ STDIN; chạy với -nRhoặc đặt một chiếc bánh pizza gia đình .

phá vỡ

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


Đây là bài viết đầu tiên của tôi !

Thêm một f=ở đầu và gọi như thế 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``}

Lưu ý: Tất cả các ngắt dòng là cần thiết!


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


Giải trình

Mã đầu tiên khai báo một mảng a. Sau đó, nó tuyên bố wucó giá trị của khoảng trắng và dấu gạch dưới tương ứng. Sau đó, nó tuyên bố một biến Chuỗi để giữ giá trị của lớp vỏ (có thể được tính bằng /\+(n*3+2 underscores)+/\, như đã đề cập trong Thử thách). Sau đó, với một forvòng lặp và a Template Literal, phần giữa của bánh pizza được tạo ra (với mỗi lớp có ikhoảng trắng ở đầu và (n+1-i*2)+n+(n-1)khoảng trắng giữa \ \/ /, trong đó iđại diện cho chỉ số của forvòng lặp). Cuối cùng, phần lớn phần dưới cùng của pizza được tạo ra ( (i whitespaces)+\+(n+2 underscores)+/). Tất cả các phần được nối với nhau và đầu ra (ted).


Nếu vì một lý do nào đó, đoạn trích không hiển thị chính xác nghệ thuật ASCII, hãy xem tại đây .

Chúc mừng ngày Deep Dish Pizza đến mọi người!



1

Mẻ, 200 byte

@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%_/

tchứa thụt lề trái trong khi schứa bên trong; _s của nó được đặt dưới các khoảng trắng trên các hàng ở giữa. lchỉ tồn tại để tránh một số sự lặp lại.


0

V , 57 byte

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

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

Vì, (như thường lệ), phần này chứa rất nhiều ký tự không phải ASCII khó chịu và không thể in được, nên đây là một dấu thập phân:

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.

Tôi sẽ sớm đăng một lời giải thích chi tiết hơn, nhưng đây là một tổng quan cấp cao:

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 (tiếng kêu) , 211 215 byte

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

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

Mã đẹp:

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

Chỉnh sửa:

  • đã xóa s [l] và được liên kết bằng cách chuyển từ%. ký hiệu s đến% .s
  • thêm chức năng bao bọc để tuân thủ và thử trực tuyến


0

CJam, 74 byte

Con đường quá dài. Tôi sẽ thử một cách tiếp cận khác.

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

Xây dựng chuỗi theo từng dòng. Không có gì quá điên rồ.


0

CJam, 89 byte

Chà, điều này thực sự dài hơn giải pháp khác của tôi vào lúc này, nhưng tôi nghĩ nó dễ chơi hơn:

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

Dấu vết ngăn xếp:

"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]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.