테플론으로 부드럽게


10

말 그대로! 4 월 6 일은 National Teflon Day로 , 테플론 코팅 팬 (우리가 만드는 것)으로 축하됩니다. 따라서 양의 정수가 주어지면 n테플론 팬을 만듭니다. 팬의 "팬"섹션으로 구성된 그 변의 각각 팔각형이고 n그것이 어떤 측면에 따라 달라질 문자, 문자 사용 측면을 제외하고 {이상 }. 그 변의 문자 길이는 항상 1입니다. n1 인 경우 :

  _
 / \
{   }
 \_/

당신이 볼 수 있듯이, 각면은 하나 개의 문자로 구성 (중 {, }, /, \, 또는 _). n2 인 경우 :

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

핸들은로 만들어지고 n+3 =영 ( 0)으로 끝납니다 .


n하나 인 경우 :

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

n 2 :

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

n 3 :

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

n4 인 경우 :

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

규칙과 기준

  • 허점 없음

  • 핸들이 오른쪽 ( }캐릭터 제)

  • 입력은 양의 정수입니다

  • 면이 구성되지 않은 경우 중 하나 {또는 }(안 왼쪽 또는 오른쪽)가 구성됩니다 n각각의 문자 :

                _
               / \
    Left side {   } Right side
               \_/
    
  • 이것이 이므로 가장 짧은 코드가 승리합니다!

테스트 사례를 더 추가 할 수 있습니까?
xnor

@xnor 추가로 2 개 추가
Anthony Pham

n = 3 및 n = 4에 대한 테스트 케이스의 위쪽 또는 아래쪽 가장자리에 올바른 수의 문자가 없습니다.
fəˈnɛtɪk

@ fəˈnɛtɪk 감사합니다! 그것은 수정되었습니다
Anthony Pham

손잡이 O대신 가져갈 수 있습니까 0?
Titus

답변:


9

,  41 38 36 30 28 바이트

6 바이트를 저장하는 @ASCII 전용과 2 바이트를 더 저장 한 @Neil 덕분에 2 바이트 절약에 도움을 준 @Emigna에게 감사드립니다!

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

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

1
28 바이트는 : Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1 바이트 팬 먼저 제조 아래쪽 인쇄하여 저장된 상기 파라미터를 반전 저장된 불필요한 1 바이트 ×만들기 불필요한.)

7

자바 스크립트 (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>

복잡한 접근 방식은 아닙니다 : 팬의 다섯 가지 다른 부분에 대한 조건을 사용하는 여러 개의 문자열 연결 : 맨 위, 맨 아래 및 가운데 선 및 위와 아래 반.

나는 가능한 한 많이 단축했지만이 방법의 한계였습니다.

편집 : 그것은 아니었다-@ programmer5000에 의해 추가로 골프


훌륭한 첫 번째 답변! 프로그래밍 퍼즐과 코드 골프에 오신 것을 환영합니다!
Anthony Pham

대단 했어? 내 말은, 이전보다 훨씬 더 많은 시간이 걸렸으며 실제로 짧지는 않지만 어쨌든 감사합니다!
Zoltán Schmidt

당신은 자바 스크립트에 대한 골프 팁에 대한 질문을 방문해야합니다
Anthony Pham

팁도 몰랐습니다-감사합니다!
Zoltán Schmidt

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

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

편집 : stdin, 181 → 196 바이트에서 n을 읽도록 변경되었습니다 .



3

파이썬 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 바이트-어떻게 보지 못했습니까? :피

편집 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한 번만 실행됩니다. 반복 할 때마다 공백으로 문자열 연결, /카운터로 더 많은 공백 $i\ . 그것들은 모두 파이프 라인에 남아 있습니다.

그리고 손잡이와 중간 부분 온다 우연히$a*3중간에 공백 및 $n+3 =다음 징후, 0. 그것은 파이프 라인에 남아 있습니다.

경우 $n보다 큰 1다음, $n-1우리는 우리가 루프 다른 방향이 팬의 바닥을 형성 할 수있는 조건을 입력 할 수 있도록 truthy입니다. 인 경우 $n=1선의 작동 방식으로 인해이 부분이 필요하지 않습니다. 그것들은 모두 파이프 라인에 남아 있습니다. 우리 $a\$b/는 팬 바닥 과 공백과 밑줄로 마무리합니다 .

파이프 라인의 모든 문자열은 암시 적으로 전송 Write-Output되어 요소 사이에 줄 바꿈으로 인쇄됩니다.


2

자바 스크립트 + HTML-346 바이트

자바 스크립트-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);}

온라인으로 사용해보십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.