Mềm mại như Teflon


10

Nghĩa đen! Ngày 6 tháng 4 là Ngày Quốc tế Teflon , được tổ chức với chảo phủ Teflon (những gì chúng ta sẽ làm). Vì vậy, với một số nguyên dương n, tạo một chảo Teflon. Phần "pan" của pan là một hình bát giác với mỗi cạnh của nó bao gồm các nký tự, sẽ thay đổi tùy thuộc vào phía nào ngoại trừ các mặt sử dụng ký tự {hoặc }. Những mặt đó sẽ có chiều dài nhân vật luôn. Nếu nlà 1:

  _
 / \
{   }
 \_/

Như bạn có thể thấy, mỗi bên gồm một ký tự (hoặc {, }, /, \, hoặc _). Nếu nlà 2:

   __
  /  \
 /    \
{      }
 \    /
  \__/

Tay cầm sẽ được tạo bằng n+3 ='s và kết thúc bằng 0 ( 0).


Nếu nlà một:

  _
 / \
{   }====0
 \_/

n là 2:

   __
  /  \
 /    \
{      }=====0
 \    /
  \__/  

n là 3:

    ___
   /   \
  /     \
 /       \
{         }======0
 \       /
  \     /
   \___/  

Nếu nlà 4:

     ____
    /    \
   /      \
  /        \
 /          \
{            }=======0
 \          /
  \        /
   \      /
    \____/  

Quy tắc và tiêu chí

  • Không có sơ hở cho phép

  • Tay cầm đi ra phía bên tay phải (phía làm từ }nhân vật)

  • Đầu vào là số nguyên dương

  • Nếu bên không bao gồm một trong hai {hoặc }(không phải bên trái hoặc bên phải), họ sẽ bao gồm các nký tự tương ứng:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Vì đây là , nên đoạn mã ngắn nhất sẽ thắng!

Bạn có thể vui lòng thêm nhiều trường hợp thử nghiệm?
xnor

@xnor Đã thêm hai người nữa
Anthony Phạm

Các trường hợp thử nghiệm cho n = 3 và n = 4 không có đúng số lượng ký tự ở các cạnh trên hoặc dưới
fəˈnɛtɪk

@ fəˈnɛtɪk Cảm ơn! Điều đó đã được sửa
Anthony Phạm

Tôi có thể lấy Othay vì 0cho các núm?
Tít

Câu trả lời:


9

Than ,  41 38 36 30 28 byte

Cảm ơn @Emigna đã giúp lưu hai byte, cảm ơn @ ASCII - chỉ để lưu sáu byte và cảm ơn @Neil vì đã lưu hai byte khác!

Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0

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

Giải trình:

Nη                 // Take the size of the pan as input.
↙η                 // Draw a line of η '\'s going down to the left.
↑←×_η              // Move one step up and print η underscores to the left.
↖η↗{↗η             // Print a line of η '\'s going up to the left.
                   // Then move one step north-east and print '{'.
                   // Then print a line of η '/'s going up to the right.
×_η↓               // Print '_' η times and move one step down.
↘η}                // Draw a line of η '\'s going down to the right, then print '}'.
×=⁺³η              // Print '=' η+3 times.
0                  // Print '0'

1
Bạn có thể di chuyển sang trái điểm bắt đầu trong Than không? Nếu vậy, bắt đầu từ đầu của tay cầm nên tiết kiệm một vài byte bằng cách không phải quay lại không gian đã in.
Emigna

@Emigna Cảm ơn, tôi không biết điều đó. Tôi chưa bao giờ sử dụng Than củi trước đây.
Steadybox

1
@Steadybox 30 byte:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
ASCII

1
28 byte: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 byte được lưu bằng cách in nửa dưới của pan trước tiên làm cho không cần thiết và 1 byte được lưu bằng cách đảo ngược các tham số ×thành không cần thiết.)
Neil

7

JavaScript (ES6), 171 byte

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

Toàn bộ chảo pizza rất lặp đi lặp lại nên hàm r (đượ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 đầu vào n lần. Điều này xử lý trên cùng và giữa và dòng của chảo. Phần còn lại đượ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. Cuối cùng, các _s được điền vào dòng cuối cùng vì nó khác biệt tinh tế so với dòng thứ hai về mặt đó.


7

JavaScript + HTML, 575 byte (chỉ 451 byte JS) 376 byte (chỉ 482 byte JS)

y=document,y.y=y.getElementById,a=(b,c)=>{w="";for(z=0;z<b;z++)w+=c;return w},d=_=>{n=Number(y.y("n").value);s="";u=" ";j="<br>",m="\\",o="/";for(i=-2;i<=2*n;i++)-2==i?s+=a(n+1,u)+a(n,"_")+j:i<n-1?s+=a(n-i-1,u)+o+a(2*(i+1)+n,u)+m+j:i==n-1?s+="{"+a(3*n,u)+"}"+a(n+3,"=")+"0"+j:i+1==2*n?s+=a(n,u)+m+a(n,"_")+o:i+1<2*n&&(s+=a(i-n+1,u)+m+a(5*n-2*i-2,u)+o+j);y.y("p").innerHTML=s};
<input type="number" id='n'><button onclick='d()'>Do</button><p id='p' style='font-family:monospace;'></p>

Không phải là một cách tiếp cận phức tạp: một số cách nối chuỗi sử dụng các điều kiện cho năm phần khác nhau của pan: các dòng trên cùng, dưới cùng và giữa và nửa trên và dưới.

Tôi rút ngắn hết mức có thể, nhưng đó là giới hạn với phương pháp này.

EDIT: không phải - được thêm vào bởi @ lập trình5000


Câu trả lời tuyệt vời đầu tiên! Chào mừng bạn đến với Câu đố lập trình và Code Golf!
Anthony Phạm

Thật tuyệt phải không? Ý tôi là, phải mất nhiều thời gian hơn để làm hơn nó nên và thậm chí không thực sự ngắn - nhưng dù sao cũng cảm ơn!
Zoltán Schmidt

Bạn nên truy cập câu hỏi về mẹo chơi gôn cho Javascript
Anthony Phạm

Không biết có lời khuyên quá - cảm ơn!
Zoltán Schmidt

2
Chào mừng đến với PPCG. Đối với tôi, bất kỳ câu trả lời nào cho thấy một số nỗ lực và nỗ lực nghiêm túc để đáp ứng thử thách là một câu trả lời tốt và xứng đáng nhận được sự ủng hộ. Chúc may mắn với những gợi ý và lời khuyên. Lời khuyên đầu tiên của tôi là, hãy ngừng suy nghĩ như kiểu lập trình viên mà bạn muốn làm việc trong một dự án và bắt đầu thực hiện tất cả những điều mà bạn ghét khi bạn tiếp quản mã của ai đó (biến một chữ cái, phím tắt nếu câu lệnh, v.v. .) :)
ElPedro

4

PHP, 174 byte

echo($p=str_pad)("",-$i=-1-$n=$argn),$p(_,$n,_);for(;$i++<$n;)echo$p("
",1+$a=abs($i)),$i?$p("\/"[$i<0],1+$n*3-$a*2,"_ "[$i<$n])."\/"[$i>0]:$p("{",$n*3).$p("} ",5+$n,"="). 0;

Lấy đầu vào từ STDIN; chạy với -nRhoặc kiểm tra nó trực tuyến .

phá vỡ

// first line
echo($p=str_pad)("",-$i=-1-$n=$argn),$p(_,$n,_);
// loop $i from -$n to $n
for(;$i++<$n;)echo
    $p("\n",1+$a=abs($i)),                  // 1. left padding
$i?                     // if not middle line:
    $p("\/"[$i<0],1+$n*3-$a*2,"_ "[$i<$n])  // 2. left edge and inner padding
    ."\/"[$i>0]                             // 3. right edge
:                       // else:
    $p("{",$n*3)                            // 2. left edge and inner padding
    .$p(" }",5+$n,"=")                      // 3. right edge
    . 0                                     // 4. knob
;

4

Python 3, 196 byte

n=int(input())
p=print
s=' '
def m(i,f,b,c=s):p(s*(n-i)+f+c*(n+2*i)+b)
p(s*n+s+'_'*n)
for i in range(n):m(i,*'/\\')
p('{'+s*n*3+'}'+'='*(n+3)+'0')
for i in range(n-1,0,-1):m(i,*'\\/')
m(0,*'\\/_')

Tôi đã sử dụng một vài biến để rút ngắn mã, nhưng chủ yếu là đơn giản. Đây là phiên bản dài hơn, dễ đọc hơn:

n = int(input())

def middle_part(i, first_slash, second_slash, middle_char=' '):
    print(' ' * (n-i) + first_slash + middle_char * (n + 2*i) + second_slash)

print(' ' * (n+1) + '_' * n)

for i in range(n):
    middle_part(i, '/', '\\')

print('{' + ' ' * n*3 + '}' + '=' * (n+3) + '0')

for i in range(n-1, 0, -1):
    middle_part(i, '\\', '/')

middle_part(0, '\\', '/', middle_char='_')

Chỉnh sửa: đã thay đổi để đọc n từ stdin, 181 → 196 byte


3

Python 2 , 180 178 byte

s,i=' ',input();R=range(i)
print'\n'.join([s+s*i+'_'*i]+[s*(i-a)+'/'+s*(i+a*2)+'\\'for a in R]+['{'+s*i*3+'}'+'='*(i+3)+'0']+[s*(i-c)+'\\'+'_ '[c>0]*(i+c*2)+'/'for c in R[::-1]])

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


3

Python 2.7, 194 195 191 187 185 byte

n=input();s=' ';a='\\';z='/'
def m(f,b,i,c=s):print(n-i)*s+f+c*(n+2*i)+b
m(s,s,0,'_')
for i in range(n):m(z,a,i)
print'{'+s*n*3+'}'+'='*(n+3)+'0';exec"m(a,z,i);i-=1;"*(n-1);m(a,z,0,'_')

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

Mở để chỉnh sửa đề xuất để làm cho nó nhỏ hơn. :)

Chỉnh sửa 1: +1 byte - Tín dụng cho ElPedro để chỉ ra lỗi trong mã, khiến nó dài hơn 1 byte.

Chỉnh sửa 2: -4 byte - Tín dụng cho piyush-ravi để xóa các đối số không cần thiết.

Chỉnh sửa 3: -4 byte - Làm thế nào tôi không thấy điều đó? : P

Chỉnh sửa 4: -2 byte - Thay thế '\ n' bằng ';'


Có vẻ như dòng đầu tiên bên dưới dòng giữa không nên ở đó khi tôi thử nó cục bộ. đã thử nó cho đầu vào 4 và 3 và nó có vẻ sai. Không rút lại upvote cho đến khi bạn có thời gian để xem xét và giải thích hoặc khắc phục. Lỗi của tôi vì đã không nhìn đủ cứng :)
ElPedro

Cảm ơn đã chỉ ra ElPedro . Đã sửa lỗi :)
Koishore Roy

2

PowerShell , 165 byte

param($n)($a=' '*$n)+" "+($b='_'*$n);$n..1|%{' '*$_+"/"+' '*($n+2*$i++)+"\"};"{$($a*3)}$('='*($n+3))0";if($n-1){1..($n-1)|%{' '*$_+"\"+' '*($n+2*--$i)+"/"}};"$a\$b/"

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

Đưa đầu vào $n, đặt $athành một loạt các khoảng trắng,$b cho một loạt các dấu gạch dưới và chuỗi kết hợp nó với một . Đó là trái trên đường ống.

Vòng lặp từ $nxuống đến 1. Nếu $n=1, điều này sẽ chỉ thực hiện một lần. Mỗi lần lặp, chúng tôi thực hiện nối chuỗi các khoảng trắng, a /, nhiều khoảng trắng hơn với bộ đếm $i\ . Những thứ đó đều còn lại trên đường ống.

Sau đó đến phần giữa với tay cầm, trùng hợp$a*3khoảng trống ở giữa, và $n+3 =các dấu hiệu, sau đó a 0. Đó là trái trên đường ống.

Nếu $nlớn hơn 1, thì đó $n-1là sự thật vì vậy chúng ta nhập điều kiện, trong đó chúng ta lặp theo hướng khác để tạo thành đáy của chảo. Nếu $n=1, thì chúng ta không cần phần này do cách thức hoạt động của các dòng. Những thứ đó đều còn lại trên đường ống. Chúng tôi kết thúc với các khoảng trắng và gạch chân với $a\$b/đáy chảo.

Tất cả các chuỗi từ đường ống được gửi qua ẩn Write-Outputmà in chúng với dòng mới ở giữa các yếu tố.


2

JavaScript + HTML - 346 byte

JavaScript - 314 byte, HTML - 32 byte

function o(a){a=parseInt(a),String.prototype.r=String.prototype.repeat;c=console.log,d=" ".r(a),e="_".r(a);c(" "+d+e);for(f=a-1,g=a;f>=0;f--,g+=2)c(" ".r(f+1)+"/"+" ".r(g)+"\\");c("{ }=0".replace(" "," ".r(3*a)).replace("=","=".r(a)));for(f=0,g=3*a;f<a-1;f++,g-=2)c(" ".r(f+1)+"\\"+" ".r(g-2)+"/");c(d+"\\"+e+"/")}
<input id=n onkeyup=o(n.value)>

Không chơi gôn

function o(sides) {

  String.prototype.r = String.prototype.repeat;
  var middle = '{ }=0',
  log = console.log,
  ss = ' '.r(sides),
  u = '_'.r(sides),
  sides = parseInt(sides);

  // top
  log(' ' + ss + u);

  // top mid
  for (var i = sides - 1, j = sides; i >= 0; i--, j += 2) {
    log(' '.r(i + 1) + '/' + ' '.r(j) + '\\');
  }

  // mid
  log('{ }=0'.replace(' ', ' '.r(sides * 3)).replace('=', '='.r(sides)));

  // bottom mid
  for (var i = 0, j = sides * 3; i < sides - 1; i++, j -= 2) {
    log(' '.r(i + 1) + '\\' + ' '.r(j - 2) + '/');
  }

  // bottom
  log(ss + '\\' + u + '/');

}
<input id="n" onkeyup="o(n.value)">


0

C, 249 byte

o(c,a){for(;a--;)putchar(c);}s;p(n){o(32,n+1);o(95,n);o(10,1);for(s=0;s<n;s++)o(32,n-s),o(47,1),o(32,n+s*2),o(92,1),o(10,1);o(123,1);o(32,n*3);o(125,1);o(61,3+n);o(48,1);o(10,1);for(s=n-1;s>-1;s--)o(32,n-s),o(92,1),o(s?32:95,n+s*2),o(47,1),o(10,1);}

Dùng thử trực tuyến

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.