打高尔夫球自己喝啤酒


26

是星期五!这意味着该喝啤酒了!
可悲的是,今天我们将打高尔夫球而不是喝啤酒。:(

挑战

输出啤酒并饮用。您采取的饮酒量会改变您的输出。

ps

您的程序应采用一个输入字符串。该字符串只能由串联sip的组成。
如果输入为空字符串,则应输出完整的啤酒杯,包括泡沫。

你喝的越多,啤酒杯就越空。

如果您喝0 ip,则您的啤酒仍然有泡沫。这种泡沫的输出始终是相同的(请参见示例)。

如果喝一口,则应输出啤酒杯,然后输出新行和字符串Yuck, foam.

如果您喝一口或多杯,啤酒杯中将不再含有泡沫,而应露出玻璃杯的顶部。喝泡沫算一口。

如果您喝了6口或更多,则应输出一个空的啤酒杯,然后输入新行和字符串Burp

每喝一口,啤酒杯就会变空。啤酒杯的装满量取决于啤酒中气泡的数量°°)。泡沫后,每次喝一口,应去除一连串的气泡。每行啤酒最多可包含气泡1,最多可包含5气泡。这些气泡的位置应为100%随机。

例子

输入

empty input string, or no input at all

输出

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

输入

sip sip sip

输出

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

输入

sip sip sip sip sip sip sip sip sip sip

输出

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

该pastebin包含输入和输出列表。请记住,啤酒杯中的气泡应该是随机的!

计分

这是,最短的代码以字节为单位!

打高尔夫球快乐喝酒


您可能要注意,°是代码点176字符
马丁安德

2
拉丁语1和Unicode中为176,具体而言。
Mego

除1和6+以外的输入尾随换行符是否可以接受?
ETHproductions 2015年

@ETHproductions是的。将在笔记本电脑上
播放

1
杯子输出应保持不变。每次运行中,每条线上的气泡数量应有所不同。每行上只能有一个气泡,最多只能有5个气泡。这是挑战的随机部分
Bassdrop Cumberwubwubwub

Answers:


9

Japt,189 字节

我试图使它正常工作时几乎发疯了...

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:

在线尝试!

(注意:该程序是针对Japt的较旧版本制作的,当前无法在最新版本中使用。要解决此问题,请在URL中指定较旧的版本。不幸的是,这也意味着右上方的代码框不起作用。)

这是迄今为止我用Japt编写的最长的程序。这是一个细分:

步骤1:创建啤酒杯的顶部。

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".

如果U是一个空字符串,则使得:

  oo  o oo
 oooooooooooo
o

否则,这将导致:

 ____________

第2步:创建杯子的中间行。

+"\\, \\,} |, /,/"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.

这将导致前一个字符串加上:

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

步骤3:添加气泡。

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

此时,杯子看起来像这样:

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

步骤4:添加最后一行和可选文本。

+"\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.

现在,一切准备就绪,可以发送到输出了,这是自动完成的。如果你有任何问题随时问!


已经三天了 RIP大脑
Bassdrop Cumberwubwubwub 2015年

@Bas我大部分时间是昨天写的,但是死亡的不是我的脑子,而是我的浏览器;)今天就把它写出来。
ETHproductions 2015年

我很高兴您的大脑仍在运转,我很期待看到有关此<s> monstrosity </ s>美丽代码的解释
Bassdrop Cumberwubwubwub 2015年

1
@Bas解释已经准备就绪:-)
ETHproductions 2015年

4

JavaScript(ES6),283281字节

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`:``)

说明

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

测试

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字节

假设1个字节的换行符。添加一个1417Windows上。

$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;

用运行-r。换行符可能需要转义。

分解

// 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;

嗨,很抱歉未能及时回答您的问题,但泡沫应已修复。但是,如果它可以改善您的字节数,我想它也可能是随机的。我坏不明确规定,所以用它来你的优势
Bassdrop Cumberwubwubwub

@BassdropCumberwubwubwub实际上是随机的泡沫成本。我只是看到每个人在我编写代码时都将其修复,并让我的随机性作为开始。
泰特斯(Titus)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.