Golf te stesso una birra


26

È venerdì! Ciò significa che è tempo di birra!
Purtroppo, oggi giocheremo a golf birra invece di berlo. :(

Sfida

Emetti una birra e bevila. La quantità di sorsi che prendi cambia l'output.

Sips

Il tuo programma dovrebbe prendere una stringa di input. Questa stringa può consistere esclusivamente in sips concatenati .
Se l'input è una stringa vuota, dovresti emettere un bicchiere di birra pieno, compresa la schiuma.

Più sorsi prendi, più vuoto sarà il tuo bicchiere di birra.

Se prendi 0 sorsi, la tua birra ha ancora schiuma. L'output di questa schiuma è sempre lo stesso (vedi esempi).

Se prendi 1 sorso, dovresti emettere il bicchiere di birra, seguito da una nuova riga e dalla stringa Yuck, foam..

Se prendi 1 o più sorsi, il tuo bicchiere da birra non dovrebbe contenere più schiuma, ma dovrebbe mostrare la parte superiore del bicchiere. Bere la schiuma conta come un sorso.

Se prendi 6 o più sorsi, dovresti produrre un bicchiere di birra vuoto, seguito da una nuova riga e dalla stringa Burp.

Per ogni sorso che prendi, il tuo bicchiere di birra dovrebbe svuotarsi. Quanto è pieno il tuo bicchiere da birra dipende dalla quantità di bolle °( °) nella tua birra. Per ogni sorso che prendi dopo la schiuma, una linea di bolle dovrebbe essere rimossa. Ogni linea di birra può contenere un minimo 1e un massimo di 5bolle. La posizione di queste bolle dovrebbe essere casuale al 100%.

Esempi

ingresso

empty input string, or no input at all

produzione

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

ingresso

sip sip sip

produzione

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

ingresso

sip sip sip sip sip sip sip sip sip sip

produzione

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

Questo pastebin contiene un elenco di input e output. Ricorda che le bolle nel bicchiere di birra dovrebbero essere casuali!

punteggio

Questo è , vince il codice più corto in byte!

Buon golf a bere !


Potresti voler notare che °è il personaggio con il punto di codice 176.
Martin Ender,

2
176 in latino-1 e Unicode, per essere più specifici.
Mego,

È accettabile una nuova riga finale sugli input tranne 1 e 6+?
ETHproductions

@ETHproductions sì. Si modificherà quando sul laptop
Bassdrop Cumberwubwubwub il

1
Le uscite della tazza dovrebbero rimanere le stesse. La quantità di bolle su ogni riga dovrebbe differire ad ogni corsa. Ci può essere solo una bolla su ogni riga, o fino a 5. Questa è la parte casuale della sfida
Bassdrop Cumberwubwubwub

Risposte:


9

Japt , 189 byte

Sono quasi impazzito mentre cercavo di farlo funzionare correttamente ...

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:

Provalo online!

(Nota: questo programma è stato creato per una versione precedente di Japt e attualmente non funziona nell'ultima versione. Per aggirare il problema, la versione precedente è specificata nell'URL. Sfortunatamente, questo significa anche la casella di codice in alto a destra non funziona.)

Questo è di gran lunga il programma più lungo che abbia mai scritto in Japt. Ecco una ripartizione:

Passaggio 1: crea la parte superiore del boccale di birra.

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

Se U è una stringa vuota, ciò rende:

  oo  o oo
 oooooooooooo
o

Altrimenti, questo rende:

 ____________

Passaggio 2: creare le file centrali della tazza.

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

Ciò comporta la stringa precedente più:

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

Passaggio 3: aggiungere le bolle.

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

A questo punto, la tazza ha un aspetto simile al seguente:

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

Passaggio 4: aggiungere la riga finale e il testo facoltativo.

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

Ora tutto è pronto per essere inviato all'output, che viene fatto automaticamente. Se avete domande non esitate a chiedere!


Sono passati 3 giorni. RIP brain
Bassdrop Cumberwubwubwub

@Bas l'ho scritto per lo più ieri, ma non è stato il mio cervello tanto quanto il mio browser che è morto;) Lo farò scritto oggi.
ETHproductions

Sono contento che il tuo cervello funzioni ancora e non vedo l'ora di vedere una spiegazione di questo <s> mostruosità </s> bellissimo pezzo di codice
Bassdrop Cumberwubwubwub

1
@Bas Explanation è pronto :-)
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`:``)

Spiegazione

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

Test

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

Supponendo l'interruzione di riga a 1 byte. Aggiungere uno a 14e 17su 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;

Corri con -r. potrebbe essere necessario uscire dalle interruzioni di riga.

abbattersi

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

Ciao, scusami per non aver risposto alla tua domanda in tempo, ma la schiuma dovrebbe essere riparata. Tuttavia, se migliora il conteggio dei byte, suppongo che potrebbe anche essere casuale. Mio male per non aver specificato chiaramente, quindi
usalo

@BassdropCumberwubwubwub Costi di schiuma effettivamente casuali. Ho appena visto che tutti l'hanno risolto mentre stavo programmando e ho tenuto il mio casuale per cominciare.
Tito,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.