像铁氟龙一样光滑


10

从字面上看!4月6日是美国国家聚四氟乙烯节,用聚四氟乙烯涂层锅庆祝(我们将做些什么)。因此,给定一个正整数n,创建一个特富龙锅。锅的“锅”部分是一个八边形,其侧面各由n字符组成,除了使用字符{或的侧面外,}视其侧面而定这些边的字符长度始终为1。如果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旋钮吗?
泰特斯

Answers:


9

木炭 41 38 36 30 28字节

感谢@Emigna帮助保存两个字节,感谢@ ASCII-only保存六个字节,以及感谢@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
您可以在木炭的起点左移,不是吗?如果是这样,则从句柄的顶端开始应该节省一些字节,因为不必回溯已打印的空间。
Emigna

@Emigna谢谢,我不知道。我以前从未用过木炭。
Steadybox'4

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字节(仅JS 451字节) 376字节(仅JS 482字节)

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>

这不是一个复杂的方法:使用锅中五个不同部分的条件进行多个字符串连接:最上,最下和中线以及上半部和下半部。

我尽可能地缩短了时间,但这是这种方法的局限性。

编辑:不是-由@ programmer5000打高尔夫球


很棒的第一答案!欢迎来到编程难题和Code Golf!
安东尼·法姆

很棒吗?我的意思是,制作花了比原本应该多的时间,而且还不算很短-还是谢谢!
佐尔坦施密特

您应该访问Java高尔夫提示的问题
Anthony Pham

也不知道有什么提示-谢谢!
佐尔坦施密特

2
欢迎来到PPCG。对我而言,任何显示出一些努力和认真尝试以应对挑战的答案都是一个很好的答案,应予以赞扬。提示和技巧祝您好运。我的第一个提示是,不要像想与一个项目一起工作的那种程序员那样思考,而要开始处理别人代码时讨厌的所有事情(一个字母变量,if语句的快捷方式等) 。):)
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,181→196个字节


3

Python 2中180个 178字节

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

在线尝试!


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字节-感谢ElPedro指出代码中的错误,从而使该错误增加了1个字节。

编辑2:-4字节-感谢piyush-ravi删除了不必要的参数。

编辑3:-4个字节-我怎么没看到?:P

编辑4:-2个字节-将'\ n'替换为';'


当我在本地尝试时,看起来中间线以下的第一行不应出现。尝试输入4和3,它看起来是错误的。在您没有时间审查,解释或解决之前,请不要撤消投票。我的错是因为看上去不够努力:)
ElPedro '17

感谢您指出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/"

在线尝试!

接受input $n,设置$a为一堆空格,$b下划线为一串,字符串将其与一个空格连接。那留在管道上。

$n向下循环到1。如果为$n=1,则只会执行一次。每次迭代,我们做的空间,一个字符串连接/,更多的空间与计数器$i和一个\。这些都留在管道上。

然后是带有手柄的中间部分,该部分恰好$a*3在中间有空格,并$n+3 =带有符号,然后是a 0。那留在管道上。

如果$n大于1$n-1则为真,因此我们输入条件,在其中循环另一个方向以形成锅底。如果为$n=1,则由于行的工作方式,我们不需要此部分。这些都留在管道上。我们以空格结束并在$a\$b/锅底划线。

管道中的所有这些字符串都是通过隐式发送的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)">


0

C,249字节

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

在线尝试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.