Halus seperti Teflon

10

Secara harfiah! 6 April adalah Hari Teflon Nasional , yang dirayakan dengan panci berlapis Teflon (apa yang akan kita buat). Jadi, diberi bilangan bulat positif n, buat panci Teflon. Bagian "wajan" dari wajan adalah segi delapan dengan masing-masing sisinya terdiri dari nkarakter, yang akan bervariasi tergantung pada sisi mana itu kecuali sisi yang menggunakan karakter {atau }. Sisi-sisi itu akan memiliki panjang karakter yang selalu. Jika n1:

  _
 / \
{   }
 \_/

Seperti yang Anda lihat, setiap sisi terdiri dari satu karakter (baik {, }, /, \, atau _). Jika n2:

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

Pegangan akan dibuat dengan n+3 ='s dan diakhiri dengan nol ( 0).


Jika nsatu:

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

n adalah 2:

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

n adalah 3:

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

Jika n4:

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

Aturan dan Kriteria

  • Tidak ada celah yang diizinkan

  • Pegangan keluar sisi kanan (sisi terbuat dari }karakter)

  • Input adalah bilangan bulat positif

  • Jika sisi tidak terdiri dari salah satu {atau }(bukan sisi kiri atau kanan), mereka akan terdiri dari nkarakter masing - masing:

                _
               / \
    Left side {   } Right side
               \_/
    
  • Karena ini adalah , kode terpendek menang!
Anthony Pham
sumber
Bisakah Anda menambahkan lebih banyak test case?
xnor
@ xnor Menambahkan dua lagi
Anthony Pham
Kasing
@ fəˈnɛtɪk Terima kasih! Itu telah diperbaiki
Anthony Pham
Bisakah saya mengambil Oalih 0untuk kenop?
Titus

Jawaban:

9

Arang ,  41 38 36 30 28 byte

Terima kasih kepada @Emigna karena telah membantu menghemat dua byte, terima kasih kepada @ ASCII saja karena telah menghemat enam byte, dan terima kasih kepada @Neil karena telah menyimpan dua byte lagi!

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

Cobalah online!

Penjelasan:

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'
Steadybox
sumber
1
Anda dapat bergerak ke kiri dari titik awal di Arang bukan? Jika demikian, mulai dari ujung pegangan harus menghemat beberapa byte dengan tidak harus mundur ruang cetak.
Emigna
@Emigna Terima kasih, saya tidak tahu itu. Saya belum pernah menggunakan Arang sebelumnya.
Steadybox
1
@Steadybox 30 byte:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
ASCII-satunya
1
28 byte: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 byte disimpan dengan mencetak bagian bawah panci pertama-tama membuat yang tidak perlu dan 1 byte disimpan dengan membalikkan parameter untuk ×membuat yang tidak perlu.)
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>

Seluruh wajan pizza sangat berulang sehingga fungsi r (dirancang sebagai templat templat yang ditandai) mengulangi karakter pertama dari inputnya n kali. Ini menangani bagian atas dan tengah dan garis-garis panci. Sisanya diulangi dengan mengganti string kosong; yang $`dan $'subsitutions otomatis sesuai dengan peningkatan dan penurunan jumlah kosong sehingga positioning /dan \tepat. Akhirnya _s diisi pada baris terakhir karena agak berbeda dari baris kedua dalam hal itu.

Neil
sumber
7

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

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>

Bukan pendekatan yang rumit: beberapa rangkaian string menggunakan kondisi untuk lima bagian panci yang berbeda: garis paling atas, paling bawah, dan tengah dan bagian atas dan bawah.

Saya memperpendek sebanyak mungkin, tetapi itu adalah batas dengan metode ini.

EDIT: bukan - juga golf oleh @ programmer5000

Zoltán Schmidt
sumber
Jawaban pertama yang bagus! Selamat Datang di Programming Puzzles dan Code Golf!
Anthony Pham
Bagus Maksudku, butuh lebih banyak waktu untuk membuat daripada yang seharusnya dan bahkan tidak terlalu pendek - tapi terima kasih!
Zoltán Schmidt
Anda harus mengunjungi pertanyaan tentang tip golf untuk Javascript
Anthony Pham
Tidak tahu ada tips juga - terima kasih!
Zoltán Schmidt
2
Selamat datang di PPCG. Bagi saya setiap jawaban yang menunjukkan upaya dan upaya serius untuk memenuhi tantangan adalah jawaban yang baik dan layak mendapat dukungan. Semoga berhasil dengan petunjuk dan kiatnya. Kiat pertama saya adalah, berhentilah berpikir seperti jenis programmer yang Anda inginkan untuk mengerjakan proyek dan mulailah melakukan semua hal yang Anda benci ketika Anda mengambil alih kode orang lain (satu variabel huruf, pintasan jika pernyataan, dll. .) :)
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;

Mengambil input dari STDIN; jalankan dengan -nRatau coba online .

kerusakan

// 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
;
Titus
sumber
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,*'\\/_')

Saya menggunakan beberapa variabel untuk mempersingkat kode, tetapi kebanyakan langsung. Ini versi yang lebih panjang dan lebih mudah dibaca:

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='_')

Sunting: diubah untuk membaca n dari stdin, 181 → 196 byte

ArkaneMoose
sumber
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]])

Cobalah online!

ElPedro
sumber
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,'_')

Cobalah online!

Buka untuk mengedit saran agar lebih kecil. :)

Edit 1: +1 byte - Kredit ke ElPedro untuk menunjukkan kesalahan dalam kode, yang membuatnya 1 byte lebih lama.

Sunting 2: -4 byte - Kredit ke piyush-ravi untuk menghapus argumen yang tidak perlu.

Sunting 3: -4 byte - Bagaimana saya tidak melihatnya? : P

Sunting 4: -2 byte - Mengganti '\ n' dengan ';'

Koishore Roy
sumber
Sepertinya terlihat garis pertama di bawah garis tengah seharusnya tidak ada ketika saya mencobanya secara lokal. mencobanya untuk input 4 dan 3 dan terlihat salah. Tidak akan menarik upvote sampai Anda punya waktu untuk meninjau dan menjelaskan atau memperbaiki. Kesalahan saya karena tidak terlihat cukup keras :)
ElPedro
Terima kasih telah menunjukkannya ElPedro . Memperbaikinya :)
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/"

Cobalah online!

Membawa input $n, set $ake sekelompok spasi, $bke sekelompok garis bawah, dan string menyatukannya dengan spasi. Tersisa di saluran pipa.

Loop dari $nbawah ke 1. Jika $n=1, ini hanya akan dijalankan sekali. Setiap iterasi kita melakukan rangkaian string ruang, a /, lebih banyak ruang dengan penghitung $i, dan a \. Itu semua ada di dalam pipa.

Kemudian muncul bagian tengah dengan pegangan, yang kebetulan memiliki $a*3ruang di tengah, dan $n+3 =tanda - tanda, lalu a 0. Tersisa di saluran pipa.

Jika $nlebih besar dari 1, maka $n-1itu benar sehingga kita memasuki kondisi, di mana kita memutar arah lain untuk membentuk bagian bawah panci. Jika $n=1, maka kita tidak perlu bagian ini karena cara kerja garis. Itu semua ada di dalam pipa. Kami menyelesaikan dengan spasi dan menggarisbawahi dengan bagian $a\$b/bawah panci.

Semua string dari pipa dikirim melalui implisit Write-Outputyang mencetaknya dengan baris baru di antara elemen.

AdmBorkBork
sumber
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)>

Tidak bermain golf

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

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

Cobalah online

Johan du Toit
sumber