Kendine bir bira golf


26

Bugün cuma! Bu bira zamanı!
Ne yazık ki, bugün, biz onu içmek yerine bira golf olacak. :(

Meydan okuma

Bir bira çıkar ve iç. Aldığınız yonga miktarı çıktınızı değiştirir.

yudumlar

Programınız bir giriş dizesi almalıdır. Bu dize yalnızca birleştirilmiş sips'den oluşabilir .
Giriş boş bir dize ise, köpük de dahil olmak üzere dolu bir bira bardağı çıkarmalısınız.

Ne kadar çok yudum alırsanız, bira bardağınız o kadar boş olur.

0 yudum alırsanız, bira hala köpük. Bu köpüğün çıktısı her zaman aynıdır (örneklere bakınız).

1 yudum alırsanız, bira bardağını çıkarıp, ardından yeni bir çizgi ve ipi girmelisiniz Yuck, foam..

1 veya daha fazla yudum alırsanız, beerglass'ınız artık köpük içermemeli, ancak camınızın üstünü göstermelidir. Köpük içmek tek yudum sayılır.

6 ya da daha fazla yudum alırsanız, boş bir bira bardağını ve ardından yeni bir çizgi ve ipi çıkarmalısınız Burp.

Aldığınız her yudum için, bira bardağınızın daha boş olması gerekir. Beerglass'inizin dolu olması, biranızdaki baloncukların °( °) miktarına bağlıdır . Köpükten sonra aldığınız her yudum için bir sıra kabarcık çıkarılmalıdır. Her bira hattı minimum 1ve maksimum 5kabarcık içerebilir . Bu baloncukların pozisyonu% 100 rastgele olmalıdır.

Örnekler

giriş

empty input string, or no input at all

çıktı

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

giriş

sip sip sip

çıktı

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

giriş

sip sip sip sip sip sip sip sip sip sip

çıktı

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

Bu pastebin giriş ve çıkışların bir listesini içerir. Beerglass'taki baloncukların rastgele olması gerektiğini unutmayın!

puanlama

Bu , bayt cinsinden en kısa kod kazanır!

Mutlu golf içmek !


Bunun °kod noktası 176 olan karakter olduğunu not etmek isteyebilirsiniz .
Martin Ender

2
Daha spesifik olmak gerekirse, Latin-1 ve Unicode'da 176.
Mego

1 ve 6+ dışındaki girdilerde izleyen bir satırsonu kabul edilebilir mi?
ETHProductions, 27:15

@ETHproductions evet. Laptop ne zaman düzenleyecektir
Bassdrop Cumberwubwubwub

1
Kupa çıkışları aynı kalmalıdır. Her satırdaki kabarcıkların miktarı her koşuda farklılık göstermelidir. Meydan okuma rastgele parçası 5'e kadar tek her satırda kabarcık veya olabilir
Bassdrop Cumberwubwubwub

Yanıtlar:


9

Japt , 189 bayt

Düzgün çalışmasını sağlamaya çalışırken neredeyse deliriyordum ...

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:

Çevrimiçi deneyin!

(Not: Bu program Japt'un daha eski bir sürümü için yapılmıştır ve şu anda en son sürümde çalışmamaktadır. Bunu aşmak için, eski sürüm URL'de belirtilmiştir. Ne yazık ki, bu aynı zamanda sağ üst kod kutusu anlamına gelir. çalışmıyor

Bu farkla şimdiye kadar Japt yazılmış en uzun programı. İşte bir döküm:

Adım 1: Bira kupasının üstünü yaratın.

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 boş bir dize ise, bu yapar:

  oo  o oo
 oooooooooooo
o

Aksi takdirde, bu:

 ____________

Adım 2: Kupanın orta sıralarını oluşturun.

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

Bu önceki dize artı ile sonuçlanır:

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

Adım 3: Baloncukları ekleyin.

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

Bu noktada, kupa şöyle bir şeye benziyor:

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

Adım 4: Son satırı ve isteğe bağlı metni ekleyin.

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

Artık her şey otomatik olarak yapılan çıkışa gönderilmeye hazır. Herhangi bir sorunuz varsa, sormaya çekinmeyin!


3 gün oldu. RIP beyin
Bassdrop Cumberwubwubwub

@Bas en çok dün yazmışımdı, ama beynim o kadar değildi, tarayıcım kadar değildi;) Bugün yazıyorum.
ETHProductions 30:15

Beyninin hala çalışıyor olmasına sevindim ve bu <s> canavarlık </s> güzel kod parçasının bir açıklamasını görmek için sabırsızlanıyorum
Bassdrop Cumberwubwubwub

1
@Bas Açıklama hazır :-)
ETHproductions

4

JavaScript (ES6), 283 281 bayt

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

açıklama

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

Ölçek

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 bayt

1-bayt-linebreak varsayalım. Biri 14ve 17Windows'ta ekleyin .

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

İle koş -r. Satır sonları kaçış gerekebilir.

Yıkmak

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

Merhaba, sorunuzu zamanında cevaplayamadığım için üzgünüm ama köpük düzeltilmeli. Ancak, bayt sayınızı artırırsa, sanırım rastgele de olabilir. Açıkça belirtmediğim için kötüyüm, bu yüzden bunu kendi yararına kullan
Bassdrop Cumberwubwubwub

@BasdropCumberwubwubwub Aslında rastgele köpük maliyeti. Kodlama yaparken herkesin sabit olduğunu gördüm ve bir başlangıç ​​için benimkileri rasgele tuttum.
Titus,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.