Làm cho tôi một ổ bánh mì trước khi tôi bị sa thải!


7

Backstory

Không thực sự, sshh!

Mọi chuyện bắt đầu vào một ngày khi một đồng nghiệp mang một ổ bánh mì tự làm cho ngày sinh nhật của sếp tôi.

Ông chủ của tôi thực sự thích ổ bánh mì này, và ông muốn một cái khác. Thật không may, đồng nghiệp của tôi đã nghỉ việc, vì vậy ông chủ của tôi cần tôi đưa cho anh ta một ổ bánh khác.

Vấn đề là, tôi không có ý tưởng làm bánh mì. Vì vậy, tôi đã nói với sếp của mình rằng tôi không phải là một đầu bếp và để tìm kiếm một người khó hơn.

Anh ta nói, "Chắc chắn ... nhưng bạn mất việc nếu bạn không thể biến tôi thành một ổ bánh."

Sau đó, tôi đã có một ý tưởng.

Tôi sẽ làm cho anh ta một ổ bánh với skilz mã hóa của tôi! Ông nói có, dưới 1 điều kiện: "Bạn phải làm cho nó dưới 351 byte." Thật không may cho tôi, việc chơi golf mã tốt nhất của tôi đã đưa tôi tới 375 byte. À ồ.

Sau đó, ông chủ của tôi đã thêm 2 điều: "Bạn phải cho tôi ổ bánh đó trong một tuần (4/13), và nếu bạn làm như vậy bạn sẽ được tăng lương. Lượng byte bạn sử dụng càng thấp, mức lương càng tốt. Nhưng hãy nhớ, nếu bạn vượt quá 349 bạn sẽ mất việc. "

Vì vậy, tôi cần sự giúp đỡ của bạn trong ngôn ngữ của bạn để giúp tôi giữ công việc của mình!

Quy tắc

Tôi chuẩn bị thực hiện một curl ... | shTinyURL, nhưng ông chủ của tôi nói với tôi rằng tôi không thể sử dụng một danh sách các sơ hở . Tôi có thể có thể tuân theo các quy tắc, nhưng công việc của tôi đang bị đe dọa, vì vậy đó không phải là một ý tưởng tốt.

Những gì được coi là một ổ bánh

Chương trình hoặc chức năng của bạn phải lấy 3 số nguyên dương làm đầu vào. Nếu ngôn ngữ của bạn có một danh sách hoặc mảng, bạn có thể lấy một danh sách hoặc mảng của những số đó. Bạn cũng có thể lấy chúng làm đối số cho một hàm hoặc chương trình hoặc một chuỗi số được phân tách bằng dấu cách thành STDIN, một đối số dòng lệnh hoặc hàm, v.v.

Số đầu tiên là chiều rộng của ổ bánh của bạn

Số thứ hai là chiều cao của ổ bánh của bạn.

Số thứ ba là độ sâu của ổ bánh của bạn.

Đây là một ổ bánh có chiều rộng 3, chiều cao 2và chiều sâu 1:

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

Trông wierd? Đây là 3x2x2:

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

Làm thế nào về một 3x3x3:

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

Một 4x1x2:

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

Tôi hy vọng bạn hiểu! Xem câu trả lời JS (ES6) của tôi dưới đây để biết ví dụ.

Cũng xem trường hợp kiểm tra đầy đủ

Ghi chú:

  • Đừng lo lắng về đầu vào hợp lệ. Tất cả các kích thước sẽ là số nguyên dương.
  • Bạn phải chấp nhận bất kỳ số nguyên dương nào mà ngôn ngữ của bạn có thể hỗ trợ.
  • Nếu số lượng quá cao, ngôn ngữ của bạn gặp sự cố từ StackOverflow, tràn chiều dài chuỗi tối đa, v.v ... không sao cả.

Câu trả lời ngắn nhất trong byte chiến thắng!


2
Tôi đoán rằng nếu bạn đã sử dụng Than, bạn có thể đã yêu cầu tăng 10% ... :)
ElPedro

350 byte thì sao?
boboquack

"Bạn phải làm cho nó dưới 351 byte". "Hãy nhớ rằng, nếu bạn vượt quá 349 byte, bạn sẽ mất việc". Bạn thực sự có ý nghĩa gì? Hãy kiên định với chính mình.
HyperNeutrino

Câu trả lời:


8

Than , 35 33 30 byte

Đã lưu 2 byte chỉ nhờ @ ASCII

Đã lưu 3 byte nhờ @Neil bằng cách sắp xếp lại thứ tự các dòng được vẽ

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

Hãy thử trực tuyến!

Đây là lần thử đầu tiên của tôi tại Char than. Tôi nghe nói nó rất giỏi về , vì vậy tôi đã thử nó.

Giải thích (lỗi thời)

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

Bây giờ phần sau của ổ đã hoàn thành. Bây giờ đến mặt trước.

↑↑η                       # 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
Điều đó thật tuyệt!
ElPedro

hahaha tôi biết điều đó ngay khi nhìn thấy ổ ascii ...!
Nelz

Bạn có thể thay thế ↓→bằng (dòng mới) và \←←←ωbằng←\←ω
ASCII - chỉ

@ Chỉ ASCII Cảm ơn các mẹo :)
user41805

Giải thích của bạn có ←\←nhưng thứ hai thuộc về trước ωtrên dòng tiếp theo. ↗δ→/là một byte ngắn hơn ↗¹↗δ¶, nhưng tôi cũng đã lưu thêm một vài byte bằng cách sắp xếp lại thứ tự các dòng được vẽ: Hãy thử trực tuyến!
Neil

4

C, 270 290 320 328 byte

#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 "|/");}

Cuối cùng (sau hai ba phiên bản không chính xác) nó cũng hoạt động chính xác với kích thước lớn.

Hãy thử trực tuyến!


2

JS (ES6), 375 byte

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}

Ung dung:

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>


"dưới 351 byte" Ai đó vừa bị sa thải :(
Shadow

@shadow, thực sự, tôi cần một chương trình <351 byte để gửi cho sếp của tôi. Bất kỳ câu trả lời dưới đây sẽ làm việc!
lập trình

2

Python 2 , 234 216 210 byte

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

Hãy thử trực tuyến!

Chắc chắn nó có thể được chơi gôn nhiều hơn nhưng đó là một sự khởi đầu. 210 sẽ làm cho tôi bây giờ.


2

PHP, 420 byte

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

Âm thanh như ai đó bị sa thải - có thể thử thuyết phục sếp của bạn rằng nó tuyệt hơn nhiều vào phần phụ trợ.

Đầu vào được đính kèm với chuỗi URL: ?a=[width]&b=[height]&c=[depth] - ycou có thể thử trực tuyến trên máy chủ giá rẻ của tôi. Trong những tình huống này, tôi thực sự thích sử dụng các yêu cầu GET.

Ung dung cho sự minh bạch:

<?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 byte

(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`

Trường hợp \nđại diện cho nhân vật dòng chữ mới.

Thay vì loay hoay với các ký tự lặp lại, điều này chỉ tạo ra một mảng có kích thước phù hợp và tính toán ký tự nào xuất hiện trong mỗi ô.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.