เรียบเนียนเหมือนเทฟลอน


10

แท้จริง! วันที่ 6 เมษายนเป็นวันชาติเทฟลอนซึ่งเฉลิมฉลองด้วยกระทะเคลือบเทฟลอน (เราจะทำ) ดังนั้นให้เป็นจำนวนเต็มบวกnสร้างกระทะเทฟลอน ส่วน "แพน" ของกระทะเป็นรูปแปดเหลี่ยมกับแต่ละด้านประกอบด้วยnตัวอักษรซึ่งจะแตกต่างกันไปขึ้นอยู่กับที่ด้านข้างมันเป็นยกเว้นด้านข้างโดยใช้ตัวอักษรหรือ{ }ด้านนั้นจะมีความยาวตัวอักษรหนึ่งเสมอ ถ้าnเป็น 1:

  _
 / \
{   }
 \_/

ในขณะที่คุณสามารถดูแต่ละด้านประกอบด้วยตัวละครตัวหนึ่ง (อย่างใดอย่างหนึ่ง{, }, /, \หรือ_) ถ้าnเป็น 2:

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

ที่จับจะถูกสร้างขึ้นด้วยn+3 ='และสิ้นสุดด้วยศูนย์ ( 0)


หากnเป็นหนึ่ง:

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

n คือ 2:

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

n คือ 3:

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

ถ้าnเป็น 4:

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

กฎและเกณฑ์

  • ไม่อนุญาตช่องโหว่

  • มือจับยื่นออกมาทางด้านขวา (ด้านที่ทำจาก}ตัวละคร)

  • อินพุตเป็นจำนวนเต็มบวก

  • หากด้านไม่ประกอบด้วยอย่างใดอย่างหนึ่ง{หรือ}(ไม่ใช่ด้านซ้ายหรือด้านขวา) พวกเขาจะประกอบด้วยnอักขระที่เกี่ยวข้อง:

                _
               / \
    Left side {   } Right side
               \_/
    
  • ตั้งแต่นี้เป็นรหัสที่สั้นที่สุดชนะ!

คุณช่วยเพิ่มกรณีทดสอบเพิ่มเติมได้ไหม
xnor

@xnor เพิ่มอีกสองคน
Anthony Pham

กรณีทดสอบสำหรับ n = 3 และ n = 4 ไม่มีจำนวนอักขระที่ถูกต้องที่ขอบบนหรือล่าง
fəˈnɛtɪk

@ fəˈnɛtɪk ขอบคุณ! ได้รับการแก้ไขแล้ว
Anthony Pham

ฉันสามารถใช้Oแทน0ลูกบิดได้หรือไม่?
ติตัส

คำตอบ:


9

ถ่าน ,  41 38 36 30 28 ไบต์

ขอบคุณ @Emigna ที่ช่วยให้ประหยัดสองไบต์ขอบคุณ @ ASCII เท่านั้นสำหรับการบันทึกหกไบต์และขอบคุณ @Neil สำหรับการบันทึกอีกสองไบต์!

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

ลองออนไลน์!

คำอธิบาย:

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
คุณสามารถเลื่อนไปทางซ้ายของจุดเริ่มต้นใน Charcoal ไม่ได้เหรอ? ถ้าเป็นเช่นนั้นการเริ่มต้นที่ส่วนปลายของหมายเลขอ้างอิงควรบันทึกสองสามไบต์โดยไม่ต้องย้อนกลับพื้นที่ที่พิมพ์แล้ว
Emigna

@Emigna ขอบคุณฉันไม่รู้เหมือนกัน ฉันไม่เคยใช้ถ่านมาก่อน
Steadybox

1
@Steadybox 30 ไบต์:Nη↖ηG←η_↙↙η{↓↘ηM↑×η_↗η}×⁺³η=P0
ASCII เท่านั้นเท่านั้น

1
28 ไบต์: Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(บันทึก 1 ไบต์โดยการพิมพ์ครึ่งล่างของถาดแรกทำให้ไม่จำเป็นและบันทึก 1 ไบต์โดยย้อนกลับพารามิเตอร์เพื่อ×ทำให้ไม่จำเป็น)
Neil

7

JavaScript (ES6), 171 ไบต์

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>

ถาดพิซซ่าทั้งหมดมีการทำซ้ำมากดังนั้นฟังก์ชั่น r (ออกแบบเป็นเทมเพลตที่ติดแท็ก) จะทำซ้ำอักขระตัวแรกของอินพุต n ครั้ง นี้จัดการด้านบนและกลางและเส้นของกระทะ ส่วนที่เหลือจะถูกทำซ้ำโดยแทนที่สตริงของช่องว่าง; $`และ$'subsitutions โดยอัตโนมัติสอดคล้องกับการเพิ่มและลดจำนวนช่องว่างจึงวางตำแหน่ง/และ\เหมาะสม ในที่สุด_s จะถูกกรอกในบรรทัดสุดท้ายเนื่องจากมันแตกต่างอย่างละเอียดจากบรรทัดที่สองในส่วนนั้น


7

JavaScript + HTML, 575 ไบต์ (451 ไบต์เท่านั้น JS) 376 ไบต์ (482 ไบต์เท่านั้น 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>

ไม่ใช่วิธีการที่ซับซ้อน: การต่อสายสตริงหลายครั้งโดยใช้เงื่อนไขสำหรับห้าส่วนที่แตกต่างกันของกระทะ: เส้นบนสุด, เส้นที่ต่ำที่สุดและตรงกลางและครึ่งบนและล่าง

ฉันสั้นลงเท่าที่จะทำได้ แต่มันก็เป็นข้อ จำกัด ของวิธีนี้

แก้ไข: มันไม่ใช่ - นอกจากนี้ golfed โดย @ programmer5000


คำตอบแรกที่ดี! ยินดีต้อนรับสู่การเขียนโปรแกรมปริศนาและรหัสกอล์ฟ!
Anthony Pham

มันยอดเยี่ยมหรือไม่ ฉันหมายความว่ามันต้องใช้เวลามากกว่าที่จะทำและไม่ได้สั้นจริงๆ - แต่ต้องขอบคุณ!
Zoltán Schmidt

คุณควรเยี่ยมชมคำถามเกี่ยวกับเคล็ดลับการเล่นกอล์ฟสำหรับ Javascript
Anthony Pham

ไม่ทราบว่ามีคำแนะนำด้วย - ขอบคุณ!
Zoltán Schmidt

2
ยินดีต้อนรับสู่ PPCG สำหรับฉันคำตอบใด ๆ ที่แสดงให้เห็นถึงความพยายามและความพยายามอย่างจริงจังเพื่อตอบสนองความท้าทายคือคำตอบที่ดีและสมควรได้รับการโหวต ขอให้โชคดีกับคำแนะนำและเคล็ดลับ เคล็ดลับแรกของฉันคือหยุดคิดเหมือนโปรแกรมเมอร์ที่คุณอยากทำงานกับโปรเจ็กต์และเริ่มทำทุกสิ่งที่คุณเกลียดเมื่อคุณใช้รหัสของคนอื่น (ตัวแปรตัวอักษรตัวหนึ่งทางลัดถ้าคำสั่ง ฯลฯ ) .) :)
ElPedro

4

PHP, 174 ไบต์

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;

รับอินพุตจาก STDIN; ทำงานด้วย-nRหรือทดสอบออนไลน์

ทำให้พังถล่ม

// 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 ไบต์

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

ฉันใช้ตัวแปรสองสามตัวเพื่อทำให้รหัสสั้นลง แต่ส่วนใหญ่ตรงไปตรงมา นี่คือเวอร์ชันที่ยาวและอ่านได้มากขึ้น:

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

แก้ไข:เปลี่ยนเป็นอ่าน n จาก stdin, 181 → 196 bytes



3

Python 2.7, 194 195 191 187 185 ไบต์

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

ลองออนไลน์!

เปิดเพื่อแก้ไขข้อเสนอแนะเพื่อทำให้เล็กลง :)

แก้ไข 1: +1 byte - มอบเครดิตให้แก่ElPedroสำหรับการชี้ข้อผิดพลาดในรหัสซึ่งทำให้ 1 ไบต์ยาวขึ้น

แก้ไข 2: -4 bytes - มอบเครดิตให้กับpiyush-raviสำหรับการลบอาร์กิวเมนต์ที่ไม่จำเป็น

แก้ไข 3: -4 bytes - ฉันไม่เห็นได้อย่างไร : P

แก้ไข 4: -2 ไบต์ - การแทนที่ '\ n' ด้วย ';'


ดูเหมือนว่าบรรทัดแรกด้านล่างเส้นกลางไม่ควรอยู่ที่นั่นเมื่อฉันลองใช้ในเครื่อง ลองใช้กับอินพุต 4 และ 3 และมันผิดปกติ จะไม่ถอนการโหวตจนกว่าคุณจะมีเวลาในการตรวจสอบและอธิบายหรือแก้ไข ความผิดของฉันไม่ได้ดูหนักพอ :)
ElPedro

ขอขอบคุณที่ชี้ออกElPedro แก้ไขได้ :)
Koishore Roy

2

PowerShell , 165 ไบต์

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

ลองออนไลน์!

รับอินพุต$n, ตั้งค่า$aเป็นพวงของช่องว่าง, $bไปยังกลุ่มของขีดล่างและสตริงเชื่อมต่อกับช่องว่าง ที่เหลืออยู่ในท่อ

ลูปจากลงไป$n 1หาก$n=1สิ่งนี้จะดำเนินการเพียงครั้งเดียว การวนซ้ำแต่ละครั้งเราทำสตริงการต่อเชื่อมของช่องว่าง a /, ช่องว่างเพิ่มเติมด้วยตัวนับ$iและ a\และสิ่งเหล่านั้นถูกทิ้งไว้บนท่อ

แล้วก็มาถึงส่วนตรงกลางที่มีการจัดการซึ่งบังเอิญมี$a*3ช่องว่างในกลางและสัญญาณแล้ว$n+3 = 0ที่เหลืออยู่ในท่อ

หาก$nมีขนาดใหญ่กว่า1นั้นก็$n-1เป็นความจริงดังนั้นเราจึงป้อนเงื่อนไขโดยที่เราวนรอบทิศทางอื่นเพื่อสร้างส่วนล่างของกระทะ ถ้า$n=1เราไม่ต้องการส่วนนี้เนื่องจากวิธีการทำงานของเส้น สิ่งเหล่านั้นถูกทิ้งไว้บนท่อ เราเสร็จสิ้นด้วยช่องว่างและขีดเส้นใต้ที่$a\$b/ด้านล่างของกระทะ

สตริงเหล่านั้นทั้งหมดจากไปป์ไลน์จะถูกส่งผ่านทาง implicit Write-Outputซึ่งพิมพ์ออกมาด้วยบรรทัดใหม่ในระหว่างอิลิเมนต์


2

JavaScript + HTML - 346 ไบต์

JavaScript - 314 ไบต์, HTML - 32 ไบต์

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

ยกเลิกแข็งแรงเล่นกอล์ฟ

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


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.