자신에게 맥주를 골프


26

그것은 금요일! 맥주를 마실 시간입니다!
슬프게도 오늘은 맥주를 마시지 않고 골프를합니다. :(

도전

맥주를 내고 마신다. 한 모금의 양이 출력을 변경합니다.

한모금

프로그램은 하나의 입력 문자열을 가져야합니다. 이 문자열은 연결로만 구성 될 수 있습니다 sip.
입력이 빈 줄인 경우 거품을 포함하여 전체 맥주 유리를 출력해야합니다.

한 모금을 더 많이 마실수록 맥주 잔이 더 비워집니다.

한 모금 마시더라도 맥주에는 여전히 거품이 있습니다. 이 폼의 출력은 항상 같습니다 (예 참조).

한 모금을 마시면 맥주 유리를 출력 한 다음 새 줄과 문자열을 출력해야합니다 Yuck, foam..

1 회 이상 마시면 맥주 잔에 더 이상 거품이 없어야하지만 유리 상단을 보여야합니다. 거품을 마시는 것은 한 모금으로 간주됩니다.

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 인 캐릭터 라는 것을 알고 싶을 것 입니다.
Martin Ender

2
보다 구체적으로 라틴어 1과 유니 코드로 176입니다.
Mego

1과 6+를 제외한 입력에 후행 줄 바꿈이 허용됩니까?
ETHproductions

@ETHproductions 예. 노트북에있을 때 편집합니다
Bassdrop Cumberwubwubwub

1
머그잔 출력은 동일하게 유지되어야합니다. 각 라인의 거품 양은 실행마다 달라야합니다. 도전의 임의의 부분 최대 5 단 하나의 각 라인에 기포, 또는있을 수 있습니다
Bassdrop Cumberwubwubwub

답변:


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.

이제 모든 것이 출력으로 보내질 준비가되어 자동으로 이루어집니다. 궁금한 점이 있으면 언제든지 문의하십시오!


3 일이 지났습니다. RIP 뇌
Bassdrop Cumberwubwubwub

@Bas 나는 주로 어제 쓰여졌지만, 브라우저가 죽었을 정도로 내 두뇌는 아니었다.) 나는 오늘 그것을 쓸 것이다.
ETHproductions

나는 당신의 두뇌가 여전히 기능하고있는 것을 기쁘게 생각하며,이 <s> 괴물 </ s>의 아름다운 코드에 대한 설명을 기대하고 있습니다.
Bassdrop Cumberwubwubwub

1
@Bas 설명이 준비되었습니다 :-)
ETHproductions

4

자바 스크립트 (ES6), 283 281 바이트

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 바이트 줄 바꿈을 가정합니다. 하나를 추가 14하고 17Windows에서.

$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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.