テフロンのように滑らか


10

文字通り!4月6日は、テフロンコーティングされたフライパン(私たちが作るもの)で祝われるNational Teflon Dayです。したがって、正の整数nを指定して、テフロン鍋を作成します。パンの「パン」セクションは八角形で、各面はn文字で構成されています。これは、文字{またはを使用する面以外の}面によって異なりますこれらの辺の文字長は常に1になります。n1の場合:

  _
 / \
{   }
 \_/

あなたが見ることができるように、それぞれの側は1つの文字で構成され(いずれか{}/\、または_)。n2の場合:

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

ハンドルはで作成されn+3 =、ゼロ(0)で終わります。


n1つの場合:

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

n 2:

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

n 3です:

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

n4の場合:

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

ルールと基準

  • 抜け穴は許可されていません

  • ハンドルは右側(}キャラクター製の面)が出てきます

  • 入力は正の整数です

  • サイドが(左側または右側ではなく){またはで構成されていない場合、それぞれの文字で}構成されますn

                _
               / \
    Left side {   } Right side
               \_/
    
  • これはので、最短のコードが勝ちます!

テストケースを追加していただけませんか?
xnor 2017

@xnorがさらに2つ追加
Anthony Phamが

n = 3およびn = 4のテストケースでは、上端または下端に適切な数の文字がありません
fəˈnɛtɪk

@ fəˈnɛtɪkありがとう!それは修正されました
Anthony Pham 2017

つまみのO代わりに使用できます0か?
タイタス

回答:


9

チャコール 41 38 36 30 28バイト

2バイトの節約に貢献してくれた@Emignaに感謝します。6バイトを節約した@ASCIIのみに感謝し、さらに2バイトを節約してくれた@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 2017

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

1
28バイト:Nη↙η↑←×_η↖η↗{↗η×_η↓↘η}×=⁺³η0(1つのバイトを作るパン第一の下半分を印刷して保存するパラメータを逆にすることによって保存された不要と1バイト×行う。不要に)
ニール

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自動的に対応/し、\適切。最後の_行は、2行目とは微妙に異なるため、最後の行に入力されます。


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>

複雑なアプローチではありません。パンの5つの異なる部分(最上部、最下部、中央の線、および上半分と下半分)の条件を使用したいくつかの文字列連結。

できるだけ短くしましたが、この方法では限界でした。

編集:それはされませんでした-@ programmer5000によってさらにゴルフされました


素晴らしい最初の答え!プログラミングパズルとコードゴルフへようこそ!
Anthony Pham 2017

すごかった?つまり、作成するのに通常よりもはるかに時間がかかったし、実際には短くもありませんでした-とにかくありがとう!
ゾルタンシュミット

Javascriptのゴルフのヒントに関する質問をご覧ください
Anthony Pham 2017

ヒントもあるのを知らなかった-ありがとう!
ゾルタンシュミット

2
PPCGへようこそ。私にとっては、いくらかの努力と挑戦に真剣に取り組む試みを示す答えは良い答えであり、賛成に値します。ヒントとヒントで頑張ってください。私の最初のヒントは、あなたがプロジェクトに取り組むようなプログラマーのように考えるのをやめ、誰か他の人のコード(1文字の変数、ショートカットのifステートメントなど)を引き継ぐときに嫌いなことすべてを始めることです。 。):)
ElPedro 2017

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

編集: stdinからnを読み取るように変更、181→196バイト



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 2017

ElPedroを指摘していただきありがとうございます。修正しました:)
Koishore Roy 2017

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と一連のアンダースコアに設定し、stringはそれをスペースと連結します。それはパイプラインに残っています。

$n下からにループし1ます。の場合$n=1、これは一度だけ実行されます。反復ごとに、スペースのストリング連結、a /、counterを使用したより多くのスペース$i、およびaを実行し\ます。それらはすべてパイプラインに残されています。

次に、中央部分にハンドルが付いています。これに偶然$a*3に中央にスペースがあり$n+3 =、次に記号が表示され0ます。それはパイプラインに残っています。

場合$nよりも大きい1場合、$n-1我々はループ、他の方向は鍋の底に形成するための条件を入力するようtruthyです。の場合$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)">


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.