Codificami un cookie


16

Sfida

Codifica un cookie ASCII del tipo in base all'input.

Ingresso

  • Il tipo di cookie. Questa è una delle tre stringhe: "Plain", "Chocolate" o "Nuts". Possono essere argomenti di funzione, stdin (o l'equivalente più vicino) o argomenti di file.

Produzione

  • Un cookie ASCII. Vedi sotto.

Deve essere

     ___
    /   \
    |   |
    \___/

per input normale,

     ___
    /. .\
    | . |
    \___/

per input di Chocolate, e infine

     ___
    /^  \
    |^ ^|
    \___/

per input Nut.

Altre informazioni

  • Questa è la mia prima sfida, è semplice come può essere. Il feedback costruttivo è molto apprezzato.
  • Usa qualsiasi mezzo per farlo.
  • Gli spazi finali vanno bene.
  • Si tratta di una sfida di codice golf, quindi vince l'ingresso più breve alla fine di 9 giorni (mercoledì 12 agosto 2015).

Grazie!

Il vincitore è Jakube che utilizza Pyth con 41 byte. Grazie a tutti quelli che hanno partecipato. Ora mi incaricherò di affrontare sfide più complicate.


7
Questo è carino, ma piuttosto semplice com'è. Potrebbe essere notevolmente migliorato richiedendo l'input dell'utente per il diametro o la quantità di cookie di ciascun tipo. Le gocce di cioccolato e le noci devono essere nella posizione indicata negli esempi? (con diametro variabile, potrebbero forse essere casuali). Detto questo, è una cattiva forma cambiare la sfida dopo la pubblicazione. Ti consiglio di 1. lasciarlo così com'è, o 2. eliminarlo, pensarci un po 'di più e / o pubblicarlo in meta.codegolf.stackexchange.com/q/2140/15599, quindi ripubblicare più tardi.
Level River St

1
Consentire condimenti multipli avrebbe potuto essere un altro modo per renderlo più interessante. Inoltre, le sfide dall'aspetto semplice spesso ottengono molta partecipazione. A proposito, due dei cookie hanno uno spazio bianco iniziale nell'output del campione. Questo probabilmente non è intenzionale?
Reto Koradi,

1
Ho fatto una modifica minore per annullare il rientro, quindi tutti i cookie hanno lo stesso spazio bianco iniziale. Presumo che i quattro spazi iniziali siano un problema di formattazione e non siano richiesti? È necessario specificare se sono consentite nuove righe iniziali / finali. Suggerirei di non consentire spazi bianchi non necessari, con l'eccezione di consentire una nuova riga finale facoltativa.
Level River St

1
Le funzioni saranno consentite?
MayorMonty

1
Dopo che @steveverrill mi ha aperto gli occhi , questa sembra essere solo una versione semplificata di Vuoi codificare un pupazzo di neve? . Alcuni ulteriori requisiti, come il diametro variabile menzionato, lo migliorerebbero davvero.
arte

Risposte:


4

Pyth, 42 41 byte

X" ___
/d a\\
|cac|
\___/"G.>"^X .  .^"Cz

Provalo online: suite di input / test regolari

Spiegazione:

 "..."                      template string
X     G                     replace "a..z" in ^ with:
                   Cz         convert z to an integer (base 256 of ord(char))
       .>"^X .  .^"           rotate "^X .  .^"
                              ["Plain"     -> " .  .^^X", 
                               "Chocolate" -> ".  .^^X ", 
                               "Nuts"      -> " .^^X . "]

7

Ruby, 73

->s{' ___
/'+['^  \
|^ ^','. .\
| . ','   \
|   '][s[0].ord%3]+'|
\___/'}

Questa è una funzione lambda anonima. Eccolo in un programma di test:

g=->s{' ___
/'+['^  \
|^ ^','. .\
| . ','   \
|   '][s[0].ord%3]+'|
\___/'}

puts g.call(gets)

Utilizza solo la prima lettera del tipo di cookie (in maiuscolo) e lo utilizza modulo 3 per ottenere un indice nell'intervallo 0..2. Quindi restituisce la stringa che rappresenta il cookie, con le stringhe appropriate incorporate nei punti giusti.


Cosa pensi ordche possa fare il metodo se lo chiami per un'intera stringa? La mia prima idea è stata la formattazione:->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
manatwork

Dimenticalo. Ancora una volta trdimostra di essere più breve:->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
arte il

@manatwork grazie per i tuoi suggerimenti. Mi mancava s[0] --> s, non mi è mai venuto in mente di provarlo. Il tuo codice non sembra dare la risposta giusta per la custodia del cioccolato, poiché le gocce di cioccolato si trovano in posti diversi rispetto alle noci. Tuttavia ci sono alcune idee utili lì, le esaminerò più avanti. Non ho usato tro %prima.
Level River St

Ops. Hai ragione. È stato un tentativo veloce BC (prima del caffè). Troppo presto per notare la differenza di posizionamento dei chip. :( (A proposito, il "%" non ha nulla a che fare con trla sintassi di. È solo un personaggio non coinvolto nell'arte dei biscotti che ho usato come segnaposto.)
Manatwork

4

Python 2.7.6, 99 byte

def c(t):n=hash(t)%3;return" ___\n/"+" ^."[n]+" "+"  ."[n]+"\\\n|"+[" ","^ ^"," . "][n]+"|\n\\___/"

Questo algoritmo si basa sul fatto che hash(cookie)%3dà 0 quando cookie = "Plain", 1 quando cookie = "Nute 2 quando cookie = "Chocolate. Se qualcuno conosce un modo per ridurre questo codice, per favore fatemi sapere nei commenti.



"Usa qualsiasi mezzo per farlo." Sì, sono ammessi argomenti facoltativi.
The_Basset_Hound

Va bene, ma penso che rimarrò ancora con il primo e lascerò il secondo così com'è.
Loovjo,

@BetaDecay Non penso proprio che gli argomenti opzionali siano davvero nello spirito del code-golf. Non so davvero perché, penso solo che non dovrebbe essere permesso. Ora che hanno entrambi la stessa lunghezza, ho rimosso la versione degli argomenti facoltativi.
Loovjo,

3
@Loovjo L'uso di metodi strani e insoliti è lo spirito del codice golf :)
Decadimento beta

3

C: 122

q(char *p){char *t,*m;int i=*p%3;t=i?i%2?". .":"   ":"^  ";m=i?i%2?" . ":"   ":"^ ^";printf(" ___\n/%s\\ \n|%s|\n\\___/",t,m);}

Spiegazione dopo aver finito il golf.

Esempio di utilizzo:

 int main(void){
 q("Plain");
 printf("\n");
 q("Nut");
 printf("\n"); 
 q("Chocolate");
 }

3

CJam, 49 48 byte

" ___
/""^  ^ ^. . ."S7*+6/rci=3/"\
|"*"|
\___/"

Provalo online nell'interprete CJam .

Come funziona

" ___
/"

e# Push that string.

"^  ^ ^. . ."S7*+6/

e# Push that string, append 7 spaces and split into chunks of length 6.
e# This pushes ["^  ^ ^" ". . . " "      "].

rci

e# Read from STDIN, cast to character, then to integer.
e# "Plain", "Chocolate", "Nuts" -> 'P', 'C', 'N' -> 80, 67, 78

=

e# Select the corresponding element from the array.
e# Arrays wrap around in CJam, so for an array A of length 3,
e# A80= is A2=, A67= is A1= and A78= is A0=.

3/

e# Split into chunks of length 3.

"\
|"*

e# Join those chunks, using that string as separator.

"|
\___/"

e# Push that string.

Alla fine, CJam stampa automaticamente tutti gli elementi nello stack.


3

Javascript (ES6), 90

s=>" ___\n/"+(s.length-4?s.length-5?". .\\\n| . ":"   \\\n|   ":"^  \\\n|^ ^")+"|\n\\___/"

Questa è una funzione freccia anonima. Utilizza la lunghezza dell'input per determinare quale cookie disegnare.

Spiegazione:

s=>
 " ___\n/" +               //build the first part of the cookie

 (s.length - 4 ?           //if the length is 4, this condition will evaluate to 0, which coerces to false. Otherwise it is true

      s.length - 5 ?            //if the length is 5, this evaluates to false; otherwise true

           ". .\\\n| . " :      //build the unique part of the Chocolate cookie, if length was not 5
           "   \\\n|   "        //build the unique part of the Plain cookie, if length was 5

      : "^  \\\n|^ ^"      //build the unique part of the Nuts cookie, if length was 4
 )

 + "|\n\\___/"             //build the last part of the cookie, and implicitly return the built string

Testare:

f=s=>" ___\n/"+(s.length-4?s.length-5?". .\\\n| . ":"   \\\n|   ":"^  \\\n|^ ^")+"|\n\\___/"

console.log(f("Nuts"))
console.log(f("Plain"))
console.log(f("Chocolate"))

3

BrainFuck, 481 447 436 byte

Perché non BrainFuck ?, il programma può probabilmente essere giocato a golf di più, ma penso che sia abbastanza pulito.

,>++++++[-<---------->]<-------[----------->>>-<<+<[-->->+<<]]>>>+>>++.<+++++++++[->>>>>>>++++++++++<+++++<++++++++++++++<++++++++++<+++++<++++++++++<+++<]++++++++++>+++.>+++++...>++>++>-->+>++++<<<<<<<.<<<[->>>>>>.>>>.<<<<<.>>>>>.<<.<<<<.>>>>>.<<<<.>>>>>.<<<<<.>>>>.<<<<<.>>>>.<<...>.<<<<<<]>[->>>>>.<<...>>>.<<<<.>>>>>.<<<<...>>>>.<<<<<.>>>>.<<...>.<<<<<]>[->>>>.>>>>.<<<<<<..>>>.<<<<.>>>>>.>>.<<<<<<.>>>>>>.<<.<<<<<.>>>>.<<...>.<<<<]

3

C # Con rientro e interruzione di riga

using System;
class Cookie
{
    static void Main()
    {
      String E="",N="",C=Console.ReadLine();
      if(C=="P"){E="   ";N="   ";}
      if(C=="C"){E=". .";N=" . ";}
      if(C=="N"){E="^  ";N="^ ^";}
      Console.Write(" ___ \n/" + E + "\\ \n|" + N + "|\n\\___/");
    }
}

Golfed (225 Personaggi)

using System;class X{static void Main(){String E="",N="",C=Console.ReadLine();if(C=="P"){E="   ";N="   ";}if(C=="C"){E=". .";N=" . ";}if(C=="N"){E="^  ";N="^ ^";}Console.Write(" ___ \n/" + E + "\\ \n|" + N + "|\n\\___/");}}[![enter image description here][1]][1]

1
Perché no String C= Console.ReadLine(),E=... ecc?
rpax,

Ehi, @rpax, il tuo commento mi ha aiutato a tagliare 2 personaggi. Grazie.
Merin Nakarmi,

2

C # 6, 105 byte

Quindi ho quasi ottenuto questi sotto-100 byte, non ho idea di dove comprimere gli ultimi pochi byte: C

string C(string t)=>$" ___\n/{(t[0]=='C'?". .\\\n| . ":t[0]=='N'?"^  \\\n|^ ^":"   \\\n|   ")}|\n\\___/";

2

Pyth, 58 54 53 52 50 byte

+d*\_3p+\/j"\\
|"c@["^  ^ ^"*". "3*d6)Chz3\|"\___/

Non credo che si possa giocare di più a golf. Stavo davvero cercando di racimolare questo in meno di 50 byte


Uno veloce e facile è". . . " -> *". "3
Sp3000

Se sei interessato, ho trovato un buon metodo per farlo in 42 byte .
Jakube,

2

JavaScript (ES6), 72 byte

Più o meno semplice ... le nuove righe vengono contate come 1 byte ciascuna.

f=s=>` ___
/${s[4]?s[5]?`. .\\
| . `:`   \\
|   `:`^  \\
|^ ^`}|
\\___/`

dimostrazione

Essendo ES6, questa demo funziona solo con Firefox e Safari per ora.

f=s=>` ___
/${s[4]?s[5]?`. .\\
| . `:`   \\
|   `:`^  \\
|^ ^`}|
\\___/`

// Snippet stuff

A.innerHTML = f("Nuts");
B.innerHTML = f("Plain");
C.innerHTML = f("Chocolate");
<p>Nuts</p>
<pre id=A></pre>

<p>Plain</p>
<pre id=B></pre>

<p>Chocolate</p>
<pre id=C></pre>


2

Commodore 64 BASIC, 181 byte

10 INPUT A$
20 IF A$="PLAIN" THEN B$="/   \":C$="|   |"
30 IF A$="CHOCOLATE" THEN B$="/. .\":C$="| . |"
40 IF A$="NUTS" THEN C$="/^  \":C$="|^ ^|"
50 PRINT" ___":PRINT B$:PRINT C$:PRINT"\___/"

Appunti:

Invece di barre rovesciate \sono stati usati i caratteri SHIFT-M, per le barre /- SHIFT-N e per le pipe |- SHIFT-T. È stato usato SHIFT-Z (segno di diamante della carta) ^. In effetti i personaggi non contano poiché occupano tutti un byte ciascuno.

Poiché su C64 ogni comando (PRINT, INPUT, THEN, ecc.) Richiede 2 byte in memoria (o alcuni anche uno, IIRC), vale la pena provare il linguaggio BASIC (tuttavia, ci sono voluti più byte di quanto mi aspettassi).

La dimensione del programma è stata calcolata misurando la memoria libera prima di digitare il programma (38909 byte) e dopo (38728 byte), usando il PRINT FRE(0)+65536comando, dando 181 byte di differenza.

Codice testato e schermate preparate con questo strumento: http://codeazur.com.br/stuff/fc64_final/ (GPL).

Screenshots:

Schermata C64 1

Schermata C64 2


2

Lua 5.3, 113 byte 112 byte

c=io.read()print(' ___\n/'..(c=='plain'and'   \\\n|   'or c=='nut'and'^  \\\n|^ ^'or'. .\\\n| . ')..'|\n\\___/')

Utilizza molto l'operatore ternario e la concatenazione di stringhe e ho eliminato tutto lo spazio bianco che non fa parte dell'output stesso.


2

Java 258 217 caratteri / byte


golfed

class C{public static void main(String[] a){p(" ___");if(a[0].equals("Chocolate")) {p("/. .\\");p("| . |");}if(a[0].equals("Nut")){p("/^  \\");p("|^ ^|");}p("\\___/");}static void p(String s) {System.out.println(s);}}

Originale

class C {
    public static void main(String[] a) {
        p(" ___");
        if(a[0].equals("Chocolate")) {
            p("/. .\\");
            p("| . |");
        }
        if(a[0].equals("Nut")){
            p("/^  \\");
            p("|^ ^|");
        }
        p("\\___/");
    }
    static void p(String s) {
        System.out.println(s);
    }
}

1

LUA 270 caratteri 270 byte

    c = io.read()
    if c == "plain" then
    print" ___"
    print"/   \\"
    print"|   |"
    print"\\___/"
    io.read()
    elseif c == "chocolate" then
    print" ___"
    print"/. .\\"
    print"| . |"
    print"\\___/"
    io.read()
    elseif c == "nut" then
    print" ___"
    print"/^  \\"
    print"|^ ^|"
    print"\\___/"
    end

questa è la mia seconda risposta a qualsiasi sfida
Alex Allen

Il "Che tipo di cookie desideri" può essere rimosso, non è necessario. Questo richiede 39 byte proprio lì.
The_Basset_Hound il

Questa è una sfida di code-golf. Prova ad abbreviare un po 'il codice. Ad esempio Non è necessario l'impronta iniziale, ridurre cookiea c, rimuovere gli spazi bianchi durante IFS, rimuovere quelle inutili io.read()s, la prima e l'ultima riga di un cookie è sempre lo stesso, ....
Jakube

@BassetHound ha rimosso la nota stampata
Alex Allen, l'

@Jakube ha abbreviato il cookie in c
Alex Allen l'

1

LOLCODE 265 caratteri

HAI
I HAS A T
GIMMEH T
VISIBLE " ___"
BOTH SAEM T AN "Chocolate", O RLY?
YA RLY
VISIBLE "/. .\"
VISIBLE "| . |"
OIC
BOTH SAEM T AN "Nut", O RLY?
YA RLY
VISIBLE "/^ ^\"
VISIBLE "|^  |"
OIC
BOTH SAEM T AN "Plain", O RLY?
YA RLY
VISIBLE "/   \"
VISIBLE "|   |"
OIC
VISIBLE "\___/"
KTHXBYE

Run

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.