Đánh gôn cho mình một ly bia


26

Hôm nay là thứ sáu! Điều đó có nghĩa là đã đến lúc uống bia!
Đáng buồn thay, hôm nay chúng ta sẽ chơi bia thay vì uống nó. :

Thử thách

Xuất ra một ly bia và uống nó. Số lượng ngụm bạn thay đổi đầu ra của bạn.

Nhấm nháp

Chương trình của bạn sẽ có một chuỗi đầu vào. Chuỗi này chỉ có thể bao gồm các sips được nối .
Nếu đầu vào là một chuỗi rỗng, bạn nên xuất một ly bia đầy đủ, bao gồm cả bọt.

Càng uống nhiều ngụm, ly bia của bạn sẽ càng trống.

Nếu bạn uống 0 ngụm, bia của bạn vẫn có bọt. Đầu ra của bọt này luôn giống nhau (xem ví dụ).

Nếu bạn uống 1 ngụm, bạn nên xuất ly bia, theo sau là một dòng mới và chuỗi Yuck, foam..

Nếu bạn uống 1 ngụm trở lên, lớp vỏ của bạn không nên chứa bọt nữa mà sẽ hiển thị phần trên cùng của ly. Uống bọt được tính là một ngụm.

Nếu bạn uống 6 ngụm trở lên, bạn nên xuất ra một ly bia rỗng, theo sau là một dòng mới và chuỗi Burp.

Đối với mỗi ngụm bạn uống, ly bia của bạn sẽ trở nên trống rỗng hơn. Làm thế nào đầy đủ beerglass của bạn là tùy thuộc vào số lượng bong bóng °( °) trong bia của bạn. Đối với mỗi ngụm bạn uống sau khi bọt, một dòng bong bóng nên được loại bỏ. Mỗi dòng bia có thể chứa tối thiểu 1và tối đa 5bong bóng. Vị trí của các bong bóng này phải là 100% ngẫu nhiên.

Ví dụ

đầu vào

empty input string, or no input at all

đầu ra

  oo  o oo 
 oooooooooooo
o|  °     ° |\
 |     °    | \
 | °°    °  |} |
 |  °    °  | /
 |     °   °|/
 \__________/

đầu vào

sip sip sip

đầu ra

 ____________
 |          |\
 |          | \
 |     °    |} |
 |° °     ° | /
 | °    °   |/
 \__________/

đầu vào

sip sip sip sip sip sip sip sip sip sip

đầu ra

 ____________
 |          |\
 |          | \
 |          |} |
 |          | /
 |          |/
 \__________/
Burp

Pastebin này chứa một danh sách các đầu vào và đầu ra. Hãy nhớ rằng các bong bóng trong beerglass nên là ngẫu nhiên!

Chấm điểm

Đây là , mã ngắn nhất tính bằng byte thắng!

Chúc bạn uống golf vui vẻ !


Bạn có thể muốn lưu ý rằng đó °là ký tự có mã điểm 176.
Martin Ender

2
176 bằng tiếng Latin-1 và Unicode, cụ thể hơn.
Mego

Một dòng mới trên các đầu vào ngoại trừ 1 và 6+ có được chấp nhận không?
Sản phẩm ETH

@ETHsản phẩm có. Sẽ chỉnh sửa khi trên máy tính xách tay
Bassdrop Cumberwubwubwub

1
Các đầu ra cốc nên giữ nguyên. Số lượng bong bóng trên mỗi dòng nên khác nhau mỗi lần chạy. Chỉ có thể có một bong bóng trên mỗi dòng hoặc tối đa 5. Đó là phần ngẫu nhiên của thử thách
Bassdrop Cumberwubwubwub

Câu trả lời:


9

Japt , 189 byte

Tôi gần như phát điên khi cố gắng làm cho nó hoạt động bình thường ...

U?S+'_pC +R:"  oo  o oo\n "+'opC +"\no")+"\\, \\,} |, /,/"q', £(V=(!Y«U?"|: |" +SpA +'|+X,(1+5*Mr)o mZ=>Ul <Y*4+4©(V=Vh2+A*Mr ,'° ),V)qR +"\n \\"+'_pA +'/+R+(Ul ¥3?"Yuck, foam.":Ug22 ?`B¨p:

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

(Lưu ý: Chương trình này được tạo cho phiên bản Japt cũ hơn và hiện không hoạt động trong phiên bản mới nhất. Để giải quyết vấn đề này, phiên bản cũ hơn được chỉ định trong URL. Thật không may, điều này cũng có nghĩa là hộp mã trên cùng bên phải không hoạt động.)

Đây là bởi đến nay các chương trình dài nhất mà tôi đã từng viết trong Japt. Đây là một sự cố:

Bước 1: Tạo đỉnh của cốc bia.

U?S+'_pC +R:"  oo  o oo\n "+'opC +"\no")

           // Implicit: U = input string
           // Begin the ASCII art with:
U?S+       //  If U is not an empty string, a space +
'_pC +R:   //   "_".repeat(12) + a newline.
:"..."+    //  Otherwise, this string +
'opC +     //   "o".repeat(12) +
"\no")     //   a newline and an "o".

Nếu U là một chuỗi rỗng, điều này tạo ra:

  oo  o oo
 oooooooooooo
o

Mặt khác, điều này làm cho:

 ____________

Bước 2: Tạo các hàng giữa của cốc.

+"\\, \\,} |, /,/"q', £(V=(!Y«U?"|: |" +SpA +'|+X,

+"..."    // Add to the previous string: this string,
q', £(    // split at commas, with each item X and its index Y mapped to:
V=(       //  Set variable V to the result of concatenating:
!Y«U?     //   If Y is 0 and U is an empty string,
"|: |"    //    "|"; otherwise, " |";
+SpA      //   10 spaces,
'|+X,     //   "|", and X.

Điều này dẫn đến chuỗi trước đó cộng:

 |          |\
 |          | \
 |          |} |
 |          | /
 |          |/

Bước 3: Thêm bong bóng.

(1+5*Mr)o mZ=>Ul <Y*4+4©(V=Vh2+A*Mr ,'° ),V)

            // Note: We're still looping through the five rows at this point.
(1+5*Mr)    // Generate a random integer between 1 and 5.
o           // Create an array of this many integers, starting at 0.
mZ=>        // Map each item Z in this range to:
Ul <Y*4+4©  //  If the length of U is less than Y*4+4,
            //  (in other words, if there's less than Y+1 "sip"s)
(V=Vh   '°  //   Insert "°" at position
2+A*Mr      //    2 + random number between 0 and 9.
),V)qR      // Finally, return V, and join the five rows with newlines.

Tại thời điểm này, chiếc cốc trông giống như thế này:

 ____________
 |          |\
 |          | \
 |     °    |} |
 |° °     ° | /
 | °    °   |/

Bước 4: Thêm hàng cuối cùng và văn bản tùy chọn.

+"\n \\"+'_pA +'/+R+(Ul ¥3?"Yuck, foam.":Ug22 ?`B¨p:

+"\n \\"    // Add a newline and " \".
+'_pA       // Add 10 "_"s.
+'/+R       // Add a slash and a newline.
+(Ul ¥3?    // If the length of U is 3 (i.e. 1 "sip"),
"..."       //  add the string "Yuck, foam.".
:Ug22 ?     // Otherwise, if U has a character at position 22 (six or more "sip"s),
`B¨p        //  decompress this string ("Burp") and add it.
:           // Otherwise, add nothing.

Bây giờ mọi thứ đã sẵn sàng để được gửi đến đầu ra, được thực hiện tự động. Nếu bạn có bất kỳ câu hỏi, hãy hỏi!


Đã 3 ngày rồi. Bộ não RIP
Bassdrop Cumberwubwubwub

@ Tôi đã có nó chủ yếu được viết vào ngày hôm qua, nhưng nó không phải là bộ não của tôi nhiều như trình duyệt của tôi đã chết;) Tôi sẽ viết nó ngày hôm nay.
Sản xuất ETH

Tôi rất vui vì bộ não của bạn vẫn hoạt động và tôi mong muốn được giải thích về <s> sự quái dị </ s> đoạn mã tuyệt đẹp này
Bassdrop Cumberwubwubwub

1
@Bas Giải thích đã sẵn sàng :-)
ETHproductions

4

JavaScript (ES6), 283 281 byte

s=>` `+(u=`_________`,(s=s&&s.split` `.length)?u+`___
 `:` oo  o oo
 oooooooooooo
o`)+(i=0,l=q=>`|`+[...u].map(_=>Math.random()>.8&i>=s&&b++<5?`°`:` `,b=0,i++).join``+(b|i<s?` `:`°`)+`|`+q+`
 `)`\\`+l` \\`+l`} |`+l` /`+l`/`+`\\`+u+`_/
`+(s&&s<2?`Yuck, foam.`:s>5?`Burp`:``)

Giải trình

s=>
  ` `+(u=`_________`,        // u = 9 underscores
  (s=s&&s.split` `.length)   // s = number of sips
    ?u+`_
 `:` oo  o oo
 oooooooooooo
o`)                          // print glass top or foam

  // Print glass lines
  +(i=0,                     // i = line number
    l=q=>                    // l = print glass line
      `|`+[...u].map(_=>     // iterate 9 times
        Math.random()>.8     // should we put a bubble here?
        &i>=s                // has this line already been sipped?
        &&b++<5              // have we already placed 5 bubbles?
          ?`°`:` `,          // if not, place the bubble!
        b=0,                 // reset the number of placed bubbles
        i++                  // increment the line counter
      ).join``               // put the 9 spaces and bubbles together
      +(b|i<s?` `:`°`)       // place a bubble at 10 if none were placed
      +`|`+q+`
 `                           // print the suffix of this glass line
  )`\\`
  +l` \\`
  +l`} |`
  +l` /`
  +l`/`

  +`\\`+u+`_/
`                            // print the bottom of the glass
  +(s&&s<2?`Yuck, foam.`
    :s>5?`Burp`:``)          // print the message

Kiểm tra

Input: <input type="text" id="sips" /><button onclick="result.innerHTML=(

s=>` `+(u=`_________`,(s=s&&s.split` `.length)?u+`___
 `:` oo  o oo
 oooooooooooo
o`)+(i=0,l=q=>`|`+[...u].map(_=>Math.random()>.8&i>=s&&b++<5?`°`:` `,b=0,i++).join``+(b|i<s?` `:`°`)+`|`+q+`
 `)`\\`+l` \\`+l`} |`+l` /`+l`/`+`\\`+u+`_/
`+(s&&s<2?`Yuck, foam.`:s>5?`Burp`:``)

)(sips.value)">Go</button><pre id="result"></pre>


1

PHP, 277 265 263 byte

Giả sử ngắt dòng 1 byte. Thêm một vào 1417trên Windows.

$r=str_pad(($i=$argc-1)?"":"  oo  o oo",16).str_pad("
 ",14,_o[!$i])."   ".($s="
 |          |")."\\  $s \\ $s} |$s / $s/
 \__________/
 ".($i<6?$i-1?"":"Yuck, foam.":burp)if(!$i){$r[34]=o;$i=1;}for(;$i++<6;)for($n=rand(1,5);$n--;)$r[17*$i+rand(2,11)]="°";echo$r;

Chạy với -r. ngắt dòng có thể cần thoát.

phá vỡ

// draw beer glass
$r=
    // first line: empty or foam
    str_pad(($i=$argc-1)?"":"  oo  o oo",16)
    // second line: top or foam
    .str_pad("\n ",14,_o[!$i])
    // other lines: empty glass+bottom
    ."   ".($s="\n |          |")."\\  $s \\ $s} |$s / $s/\n \__________/\n"
    // lyrics
    .($i<6?$i-1?"":"Yuck, foam.":burp)
;

// add foam left to the glass
if(!$i){$r[34]=o;$i=1;}

// add bubbles
for(;$i++<6;)
    for($n=rand(1,5);$n--;)
        $r[17*$i+rand(2,11)]="°";

// output
echo$r;

Xin chào, xin lỗi vì đã không trả lời kịp thời câu hỏi của bạn nhưng bọt phải được sửa. Tuy nhiên, nếu nó cải thiện số byte của bạn, tôi đoán nó cũng có thể là ngẫu nhiên. Tôi xấu vì không chỉ định rõ ràng, vì vậy hãy sử dụng nó để làm lợi thế của bạn
Bassdrop Cumberwubwubwub

@BassdropCumberwubwubwub Thực tế chi phí bọt ngẫu nhiên. Tôi chỉ thấy rằng mọi người đã sửa nó trong khi tôi đang viết mã và giữ cho tôi ngẫu nhiên để bắt đầu.
Tít
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.