解雇される前にパンを一斤作ってください!


7

バックストーリー

本当に本物じゃない、sshh!

ある日、同僚が上司の誕生日に自家製のパンを持ち込んだとき、それはすべて始まりました。

私の上司は本当にこのパンの塊が好きで、彼は別のパンを望んでいました。残念ながら、私の同僚は辞めたので、上司はに彼に別の塊を与える必要があります

問題は、私は持っていない、あるないアイデアパンを作る方法を。だから私は上司に、私はシェフではなく、そうでない人にはもっと厳しく見えるように言いました。

彼は言った、「確かに...でも、私がパンを作ることができないなら、あなたはあなたの仕事を失います。」

それから私は考えを持ちました。

私は彼を私のコーディングスキルでパンにします!彼は、1つの条件の下で「はい、351バイト未満で作成する必要があります」と述べました。残念ながら、私の最高のコードゴルフでは375バイトになりました。ええとああ。

次に、上司は2つのことを追加しました。「そのパンを1週間(4/13)で与える必要があります。そうすると、給与が増えます。使用するバイト数が少ないほど、給与は高くなります。ただし、 349を超えると失業します。」

だから私の仕事を続けるためにあなたが選んだ言語であなたの助けが必要です!

ルール

curl ... | shTinyURLで実行しようとしていましたが、上司から抜け穴のリストを使用できないと言われました。私はおそらくルールを回避することができますが、私の仕事は危機に瀕しているので、それは良い考えではありません。

パンとして数えるもの

プログラムまたは関数は、3つの正の整数を入力として受け取る必要があります。言語にリストまたは配列がある場合、それらの数値のリストまたは配列を取ることができます。関数またはプログラムの引数として、またはSTDINへのスペースで区切られた数値の文字列、コマンドラインまたは関数の引数などとしても使用できます。

最初の数字はあなたのパンの幅です

2番目の数値は、パンの高さです。

3番目の数値は、パンの深さです。

幅が3、高さが2、奥行きがのパンです1

 / --- \
/ --- \ |
| ||
| ___ | /

奇妙に見える?これは3x2x2です。

  / --- \
 / |
/ --- \ |
| | /
| ___ | /

3x3x3はどうですか:

   / --- \
  / |
 / |
/ --- \ |
| | /
| | /
| ___ | /

4x1x2:

  / ---- \
 / |
/ ---- \ /
| ____ | /

御理解いただけることを願います!例として、以下のJS(ES6)の回答を参照してください。

完全なテストケースもご覧ください

ノート:

  • 有効な入力について心配する必要はありません。すべてのサイズは正の整数になります。
  • 言語がサポートできる正の整数を受け入れる必要があります。
  • 数値が非常に高い場合、言語はStackOverflow、最大文字列長のオーバーフローなどからクラッシュしますが、問題ありません。

バイト単位の最短の答えが勝ちます!


2
チャコールを使っていたなら、10%のレイズを要求できたと思います... :)
ElPedro

350バイトはどうですか?
boboquack 2017

「351バイト未満で作成する必要があります」。「349バイトを超えると、職を失うことを覚えておいてください」。どういう意味ですか?自分と一致してください。
HyperNeutrino 2017

回答:


8

チャコール35 33 30バイト

@ASCIIのみのおかげで2バイト節約

@Neilのおかげで、線が描画される順序を再配置することで、3バイトを節約しました

NωNηNδ↓η↗→×_ω↑η←\←ω↗δ→/ω↓\↓η↙δ

オンラインでお試しください!

チャコールは初めてです。が得意だったので試してみました。

説明(古い)

NωNηNδ                  # Take the width, height and depth as input
↗¹                        # Write 1 /
↗δ                        # Write depth times /
¶ω                        # Move the cursor down and write - width times
\                         # Write \
↙↓η                       # Move the cursor one down and one left, and then write | height times
↙δ                        # Write / depth times

これでパンの後ろの部分が完成しました。今、正面が来ています。

↑↑η                       # Go up and write | height times
←\                        # Write a \ and move 1 to the left
←ω                        # Write - width times
↓↓η                       # Go down and write | height times
↗P×_ω                    # Go northeast and write _ width times

1
それだけでクールです!
ElPedro 2017

ははは、アスキーローフを見てすぐにわかった…!
Nelz

あなたは置き換えることができます↓→(改行)、および\←←←ω←\←ω
ASCIIのみ


説明があります←\←が、2番目ω次の行の前にあります。↗δ→/は1バイトより短いです↗¹↗δ¶が、線が描かれた順序を並べ替えることで、さらに数バイト節約しました。オンラインで試してみてください!
ニール、

4

C、270 290 320 328バイト

#define P printf(
p(n,s)char*s;{P s,--n&&p(n,s));}i,j,k;f(w,h,d){P "%*c",d+1,47);p(w,"-");P "\\\n");for(i=d,j=h,k=0;--i;)P "%*c%*c\n",i+1,47,w+d+1-i-k+!!k,j-->0?124:(++k>0)*47);P "/");p(w,"-");P "\\%*c\n",d-k,j-->0?124:47);for(k&&k++;++i<h;)P "|%*c%*c\n",w+1,124,d-k>!k?d+1-k-!k:0,j-->0?124:(++k>0)*47);P "|");p(w,"_");P "|/");}

最後に(2つの 3つの正しくないバージョンの後)、大きなサイズでも正しく動作します。

オンラインでお試しください!


2

JS(ES6)、375バイト

s=(s,t)=>s.repeat(t);(d,c,e)=>{z=" ",y=`
`,x="\\",w="/",v="|",u="-";a=s(z,e--);a=a+w+s(u,d);a+=x+y;for(b=0;b<e;b++)a+=s(z,e-b),b<c?(a+=w,a+=s(z,d+b+1),a+=v):(a+=w,a+=s(z,d+c+1),a+=w),a+=y;a=a+w+s(u,d);a+=x;f=0;b<c?(a+=s(z,e),a+=v):(a+=s(z,c-f),a+=w);b++;f++;a+=y;for(g=0;g<c;g++)a+=v,a+=s((g==c-1?"_":z),d),a+=v,b<c?(a+=s(z,e),a+=v):(a+=s(z,c-f),a+=w),b++,f++,a+=y;return a}

未ゴルフ:

var proc = function(width, height, depth){
    var str = "";

    //Back of loaf (depth)
    str += " ".repeat(depth);//initial padding before start of back of loaf
    str += "/";//top left corner of back of loaf
    str += "-".repeat(width);//top edge of back of loaf
    str += "\\";//top left corner of back of loaf
    str += "\n";//end line

    //Depth lines
    for(var i = 0; i < depth - 1; i++){
        console.log(i)
        str += " ".repeat(depth - i - 1);//space padding before start of left middle edge
        if(i < height){
            //str += " ".repeat(depth - i - 2);
            str += "/";//left middle edge
            str += " ".repeat(width + i + 1);//middle of loaf
            str += "|";//end that edge
            str += "\n";//end line
        }else{
            str += "/";//left middle edge
            str += " ".repeat(width + height + 1);//between two /s
            str += "/";//right middle edge
            str += "\n";//end line
        }
    }

    //front top edge of loaf
    str += "/";//top left corner
    str += "-".repeat(width);//top edge
    str += "\\";//top right corner

    var i3 = 0;

    if(i < height){
        str += " ".repeat(depth - 1);//space for the incoming far right edge
        str += "|";//far right edge
        i++;
        i3++;
    }else{
        str += " ".repeat(height - i3);//space for the incoming far right edge
        str += "/";//far right edge
        i++;
        i3++;
    }

    str += "\n";//newline


    for(var i2 = 0; i2 < height; i2++){
        str += "|";//left edge
        str += (i2 === height - 1 ? "_" : " ").repeat(width);//if we are at the bottom, use underscores to mark that, otherwise spaces.
        str += "|";
        if(i < height){
            str += " ".repeat(depth - 1);//space for the incoming far right edge
            str += "|";//far right edge
            i++;
            i3++;
        }else{
            str += " ".repeat(height - i3);//space for the incoming far right edge
            str += "/";//far right edge
            i++;
            i3++;
        }
        str += "\n";//newline
    }

    return str;
};

s=(s,t)=>s.repeat(t);
var bakeBread = (d,c,e)=>{z=" ",y=`
`,x="\\",w="/",v="|",u="-";a=s(z,e--);a=a+w+s(u,d);a+=x+y;for(b=0;b<e;b++)a+=s(z,e-b),b<c?(a+=w,a+=s(z,d+b+1),a+=v):(a+=w,a+=s(z,d+c+1),a+=w),a+=y;a=a+w+s(u,d);a+=x;f=0;b<c?(a+=s(z,e),a+=v):(a+=s(z,c-f),a+=w);b++;f++;a+=y;for(g=0;g<c;g++)a+=v,a+=s((g==c-1?"_":z),d),a+=v,b<c?(a+=s(z,e),a+=v):(a+=s(z,c-f),a+=w),b++,f++,a+=y;return a}
<input type = "number" id = "a1">
<br/>
<input type = "number" id = "a2">
<br/>
<input type = "number" id = "a3">
<br/>
<button onclick = "document.getElementById('textarea').innerText = bakeBread(+(document.getElementById('a1').value), +(document.getElementById('a2').value), +(document.getElementById('a3').value))">Bake Bread!</button>
<br/>
<textarea id = "textarea"></textarea>


"351バイト未満"誰かがちょうど解雇されました:(
シャドウ

@shadow、実際、上司に送信するには<351バイトのプログラムが必要です。以下の答えはどれでも機能します!
programmer5000

2

パイソン2234の 216 210バイト

w,h,d=input()
f,g='|','/';z,s=g+'-'*w+'\\',' '
print'\n'.join([s*d+z]+[s*(d-c)+g+s*(w+c)+(f,g)[c>h]for c in range(1,d)]+[z+s*(d-1)+(f,g)[d>h]]+[f+s*w+f+s*(h-e-1)+(f,s+g)[d>=h]for e in range(1,h)]+[f+'_'*w+f+g])

オンラインでお試しください!

もちろんもっともっとゴルフをすることができますが、それは始まりです。今のところ、210で十分です。


2

PHP、420バイト

<?php $a=$_GET["a"];$b=$_GET["b"];$c=$_GET["c"];$w="<br>";$s="&nbsp;";$u="&#95";$p="|";$k="/";$t=str_repeat;$l='';$r=$t($s,$c).$k.$t("-",$a)."\\".$w;for($i=0;$i<$c+$b-1;$i++){$i<=$b-1?($i<$c-1?$l=$t($s,$a+$i+1).$p:$l=$t($s,$c-1).$p):($i<$c-1?$l=$t($s,$a+$b+1).$k:$l=$t($s,$c+$b-$i-1).$k);$i<$c-1?$r.=$t($s,$c-$i-1).$k.$l.$w:($i==$c-1?$r.=$k.$t("-",$a)."\\".$l.$w:$r.=$p.$t($s,$a).$p.$l.$w);};echo$r.=$p.$t($u,$a).$p.$k?>

誰かが解雇されたように聞こえます-多分それはあなたのボスにそれがバックエンドではるかにクールだと説得してみてください。

入力はURL文字列に添付されます:?a=[width]&b=[height]&c=[depth] -ycouは私の安いホストでオンラインで試すことができます。このような状況では、GETリクエストを使用するのが大好きです。

透明性のためにゴルフをしない:

<?php 
$a=$_GET["a"];$b=$_GET["b"];$c=$_GET["c"];
$w="<br>";$s="&nbsp;";$u="&#95"; $p="|";$k="/";$t=str_repeat;$f=$v=$m=$l='';
//first line
$r=$t($s,$c).$k.$t("-",$a)."\\".$w;


for($i=0;$i<$c+$b-1;$i++){

    //right side of the loaf
    $i <= $b-1 
    ? ($i < $c-1 ? $l=$t($s,$a+$i+1).$p : $l=$t($s,$c-1).$p)  
    : ($i < $c-1 ? $l=$t($s,$a+$b+1).$k : $l=$t($s,$c+$b-$i-1).$k) ;

    //left side, with the right side attached
    $i<$c-1 
        ? $r.=$t($s,$c-$i-1).$k.$f.$l.$w
        : ($i==$c-1 
            ? $r.=$k.$t("-",$a)."\\".$f.$l.$w
            : $r.=$p.$t($s,$a).$p.$f.$l.$w);

};
    //final line
    echo $r.=$p.$t($u,$a).$p.$k;

?>

2

JavaScript(ES6)、204バイト

(w,h,d)=>[...Array(h-~d)].map((_,y)=>[...Array(w-~d)].map((_,x)=>x+y==d|x+y==h+w-~d?`/`:x==w+d&y<=h&&y||!x|x==w&&y>d?`|`:y==h+d&x<w?`_`:!y|y==d?x+y==w+d?`\\`:x+y>d&x+y<w+d?`-`:` `:` `).join``,++w).join`\n`

Where \nはリテラルの改行文字を表します。

これは、繰り返し文字をいじるのではなく、適切なサイズの配列を作成し、各セルに表示される文字を計算するだけです。

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