Code mir einen Keks

16

Herausforderung

Code ein ASCII-Cookie einer Art entsprechend der Eingabe.

Eingang

  • Die Art der Kekse. Dies ist eine der drei Saiten: "Plain", "Chocolate" oder "Nuts". Dies können Funktionsargumente, stdin (oder das nächste Äquivalent) oder Dateiargumente sein.

Ausgabe

  • Ein ASCII-Cookie. Siehe unten.

Muss sein

     ___
    /   \
    |   |
    \___/

für einfache Eingabe,

     ___
    /. .\
    | . |
    \___/

für Schokoladeneingabe und schließlich

     ___
    /^  \
    |^ ^|
    \___/

für Nut-Eingabe.

Andere Informationen

  • Dies ist meine erste Herausforderung, es ist so einfach wie möglich. Konstruktives Feedback wird sehr geschätzt.
  • Verwenden Sie alle Mittel, um dies zu tun.
  • Leerzeichen sind in Ordnung.
  • Dies ist eine Code-Golf-Herausforderung, daher gewinnt der kürzeste Start am Ende von 9 Tagen (Mittwoch, den 12. August 2015).

Vielen Dank!

Der Gewinner ist Jakube mit Pyth mit 41 Bytes. Vielen Dank an alle, die teilgenommen haben. Ich werde mich nun damit beschäftigen, kompliziertere Herausforderungen zu meistern.

The_Basset_Hound
quelle
7
Das ist schön, aber ziemlich einfach. Es könnte massiv verbessert werden, indem Benutzereingaben für den Durchmesser oder die Menge der Cookies jedes Typs erforderlich sind. Müssen sich die Schokoladenstückchen und Nüsse an der Stelle befinden, die den Beispielen entspricht? (Mit variablem Durchmesser könnten sie vielleicht zufällig sein.) Das heißt, es ist eine schlechte Form, die Herausforderung nach dem Posten zu ändern. Ich schlage vor, dass Sie entweder 1. es so lassen, wie es ist, oder 2. es löschen, ein bisschen mehr darüber nachdenken und / oder es in meta.codegolf.stackexchange.com/q/2140/15599 veröffentlichen und später erneut veröffentlichen.
Level River St
1
Das Zulassen mehrerer Beläge hätte eine weitere Möglichkeit sein können, dies interessanter zu gestalten. Andererseits erhalten einfach aussehende Herausforderungen oft eine große Beteiligung. Übrigens haben zwei der Cookies führende Leerzeichen in der Beispielausgabe. Das ist wahrscheinlich nicht beabsichtigt?
Reto Koradi
1
Ich habe eine geringfügige Änderung vorgenommen, um den Einzug abzubrechen, sodass alle Cookies den gleichen führenden Leerraum haben. Ich gehe davon aus, dass die vier führenden Leerzeichen ein Formatierungsproblem darstellen und nicht erforderlich sind. Sie sollten angeben, ob führende / nachfolgende Zeilenumbrüche zulässig sind. Ich würde vorschlagen, unnötige Leerzeichen nicht zuzulassen, mit der Ausnahme, dass ein optionaler Zeilenumbruch zugelassen wird.
Level River St
1
Werden Funktionen erlaubt sein?
MayorMonty
1
Nachdem @steveverrill meine Augen geöffnet hat , scheint dies nur eine vereinfachte Version von Möchtest du einen Schneemann codieren? . Einige weitere Anforderungen, wie der erwähnte variable Durchmesser, würden es wirklich verbessern.
Manatwork

Antworten:

4

Pyth, 42 41 Bytes

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

Probieren Sie es online aus: Regular Input / Test Suite

Erläuterung:

 "..."                      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 . "]
Jakube
quelle
7

Rubin, 73

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

Dies ist eine anonyme Lambda-Funktion. Hier ist es in einem Testprogramm:

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

puts g.call(gets)

Es wird nur der erste Buchstabe des Cookie-Typs (in Großbuchstaben) verwendet und Modulo 3 verwendet, um einen Index im Bereich zu erhalten 0..2. Anschließend wird die Zeichenfolge zurückgegeben, die das Cookie darstellt, wobei die entsprechenden Zeichenfolgen an den richtigen Stellen eingebettet sind.

Level River St
quelle
Was kann die ordMethode Ihrer Meinung nach tun, wenn Sie eine ganze Zeichenfolge aufrufen? Meine erste Idee war die Formatierung:->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
Manatwork
Vergiss es. tr->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
Erweist sich
@manatwork danke für deine Vorschläge. Ich habe versäumt s[0] --> s, es ist mir nie eingefallen, es zu versuchen. Ihr Code scheint nicht die richtige Antwort für den Schokoladenbehälter zu geben, da sich die Schokoladenstückchen an verschiedenen Stellen befinden als die Nüsse. Trotzdem gibt es dort einige nützliche Ideen, die ich später ansehen werde. Ich habe nicht verwendet troder %zuvor.
Level River St
Hoppla. Du hast recht. Das war ein kurzer Versuch BC (vor dem Kaffee). Zu früh, um den Unterschied bei der Platzierung der Chips zu bemerken. :( (Übrigens, das "%" hat nichts mit trder Syntax von 's zu tun . Ist nur ein Zeichen, das nicht in die Cookie-Kunst involviert ist, die ich als Platzhalter verwendet habe.)
manatwork
4

Python 2.7.6, 99 Bytes

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

Dieser Algorithmus basiert auf der Tatsache, dass hash(cookie)%30 wann cookie = "Plain", 1 wann cookie = "Nutund 2 wann ergibt cookie = "Chocolate. Wenn jemand eine Möglichkeit kennt, diesen Code zu verkürzen, lass es mich in den Kommentaren wissen.

Loovjo
quelle
"Verwenden Sie alle Mittel, um dies zu tun." Ja, optionale Argumente sind zulässig.
The_Basset_Hound
Okay, aber ich denke, ich bleibe bei der ersten und lasse die zweite unverändert.
Loovjo
@BetaDecay Ich glaube einfach nicht, dass optionale Argumente wirklich im Sinne von Code-Golf sind. Ich weiß nicht wirklich warum, ich denke nur, dass es nicht erlaubt sein sollte. Da beide gleich lang sind, habe ich die Version mit optionalen Argumenten entfernt.
Loovjo
3
@ Loovjo Mit seltsamen und ungewöhnlichen Methoden sind der ganze Geist des Code Golf :)
Beta Decay
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);}

Erklärung nachdem ich mit dem Golfen fertig bin.

Anwendungsbeispiel:

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

CJam, 49 48 Bytes

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

Probieren Sie es online im CJam-Interpreter aus .

Wie es funktioniert

" ___
/"

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.

Am Ende druckt CJam automatisch alle Elemente auf dem Stapel.

Dennis
quelle
3

Javascript (ES6), 90

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

Dies ist eine anonyme Pfeilfunktion. Anhand der Länge der Eingabe wird bestimmt, welches Cookie gezeichnet werden soll.

Erläuterung:

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

Zu testen:

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"))
jrich
quelle
3

BrainFuck, 481 447 436 Bytes

Warum nicht BrainFuck? Das Programm kann wahrscheinlich mehr golfen werden, aber ich finde es ziemlich ordentlich.

,>++++++[-<---------->]<-------[----------->>>-<<+<[-->->+<<]]>>>+>>++.<+++++++++[->>>>>>>++++++++++<+++++<++++++++++++++<++++++++++<+++++<++++++++++<+++<]++++++++++>+++.>+++++...>++>++>-->+>++++<<<<<<<.<<<[->>>>>>.>>>.<<<<<.>>>>>.<<.<<<<.>>>>>.<<<<.>>>>>.<<<<<.>>>>.<<<<<.>>>>.<<...>.<<<<<<]>[->>>>>.<<...>>>.<<<<.>>>>>.<<<<...>>>>.<<<<<.>>>>.<<...>.<<<<<]>[->>>>.>>>>.<<<<<<..>>>.<<<<.>>>>>.>>.<<<<<<.>>>>>>.<<.<<<<<.>>>>.<<...>.<<<<]
Über dem Feuer
quelle
3

C # Mit Einrückung und Zeilenumbruch

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\\___/");
    }
}

Golf (225 Zeichen)

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]
Merin Nakarmi
quelle
1
Warum nicht String C= Console.ReadLine(),E=... etc?
rpax
Hey @rpax, Ihr Kommentar hat mir geholfen, 2 Zeichen zu kürzen. Vielen Dank.
Merin Nakarmi
2

C # 6, 105 Bytes

Ich habe also beinahe diese Sub-100-Bytes bekommen, keine Ahnung, wo ich die letzten paar Bytes auspressen soll: C

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

Pyth, 58 54 53 52 50 Bytes

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

Ich glaube nicht, dass man mehr Golf spielen kann. Ich habe wirklich versucht, dies in weniger als 50 Bytes zu komprimieren

Downgoat
quelle
Eine schnelle und einfache ist". . . " -> *". "3
Sp3000
Wenn Sie interessiert sind, fand ich eine schöne Methode, um dies in 42 Bytes zu tun .
Jakube,
2

JavaScript (ES6), 72 Byte

Ungefähr so ​​einfach wie es nur geht ... neue Zeilen werden jeweils als 1 Byte gezählt.

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

Demo

Da es sich um ES6 handelt, funktioniert diese Demo derzeit nur in Firefox und Safari.

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>

rink.attendant.6
quelle
2

Commodore 64 BASIC, 181 Bytes

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"\___/"

Anmerkungen:

Anstelle von Backslashes wurden \die SHIFT-M-Zeichen verwendet, für Slashes /- SHIFT-N und für Pipes |- SHIFT-T. SHIFT-Z (Card Diamond Sign) wurde für verwendet ^. Tatsächlich spielen Zeichen keine Rolle, da sie alle jeweils ein Byte belegen.

Da in C64 jeder Befehl (PRINT, INPUT, THEN usw.) 2 Byte im Speicher benötigt (oder sogar IIRC), hat sich die Verwendung der Sprache BASIC gelohnt (es hat jedoch mehr Byte gedauert, als ich erwartet hatte).

Die Programmgröße wurde durch Messen des freien Speichers vor dem Eingeben des Programms (38909 Bytes) und danach (38728 Bytes) unter Verwendung eines PRINT FRE(0)+65536Befehls berechnet , wobei 181 Bytes Differenz erhalten wurden.

Code getestet und Screenshots mit diesem Tool erstellt: http://codeazur.com.br/stuff/fc64_final/ (GPL).

Screenshots:

C64-Screenshot 1

C64 Screenshot 2

Voitcus
quelle
2

Lua 5.3, 113 Bytes 112 Bytes

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

Es verwendet einen Großteil der ternären Operator- und String-Verkettung, und ich habe alle Leerzeichen entfernt, die nicht Teil der Ausgabe selbst sind.

Schlammmacher
quelle
2

Java 258 217 Zeichen / Byte


Golf gespielt

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);}}

Original

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);
    }
}
OverCoder
quelle
1

LUA 270 Zeichen 270 Bytes

    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
Alex Allen
quelle
Dies ist meine zweite Antwort auf alle Herausforderungen
Alex Allen
Der "Welche Art von Cookie möchten Sie" kann entfernt werden, er wird nicht benötigt. Das braucht genau dort 39 Bytes.
The_Basset_Hound
Dies ist eine Code-Golf-Herausforderung. Versuchen Sie, Ihren Code ein wenig zu verkürzen. ZB Sie brauchen den Erstdruck nicht, verkürzen cookieauf c, entfernen Leerzeichen während des Wenns, entfernen Sie diese unnötigen io.read()s, die erste und letzte Zeile eines Cookies ist immer gleich, ....
Jakube
@BassetHound hat die Druckaussage entfernt
Alex Allen
@ Jakube verkürzt Cookie auf c
Alex Allen
1

LOLCODE 265 Zeichen

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

OverCoder
quelle