Beri saya kode cookie

16

Tantangan

Kode kuki ASCII dari jenis sesuai dengan input.

Memasukkan

  • Jenis kue. Ini adalah salah satu dari tiga string: "Plain", "Chocolate", atau "Nuts". Dapat berupa argumen fungsi, stdin (atau yang setara terdekat), atau argumen file.

Keluaran

  • Cookie ASCII. Lihat di bawah.

Harus

     ___
    /   \
    |   |
    \___/

untuk input biasa,

     ___
    /. .\
    | . |
    \___/

untuk input Chocolate, dan akhirnya

     ___
    /^  \
    |^ ^|
    \___/

untuk input Nut.

Informasi lainnya

  • Ini adalah tantangan pertama saya, sesederhana mungkin. Umpan balik yang konstruktif sangat dihargai.
  • Gunakan segala cara untuk melakukannya.
  • Ruang tambahan baik-baik saja.
  • Ini adalah tantangan kode golf, jadi entri terpendek pada akhir 9 hari (Rabu, 12 Agustus 2015) menang.

Terima kasih!

Pemenangnya adalah Jakube menggunakan Pyth dengan 41 byte. Terima kasih untuk semua yang telah berpartisipasi. Sekarang saya akan menugaskan diri saya untuk menghadapi tantangan yang lebih rumit.

The_Basset_Hound
sumber
7
Ini bagus, tetapi agak sederhana. Ini dapat ditingkatkan secara besar-besaran dengan meminta input pengguna untuk diameter atau jumlah cookie dari masing-masing jenis. Apakah chip coklat dan dan kacang harus berada di lokasi sesuai contoh? (dengan diameter variabel, mereka mungkin bisa acak.) Yang mengatakan, itu bentuk yang buruk untuk mengubah tantangan setelah memposting. Saya sarankan Anda 1. biarkan apa adanya, atau 2. hapus, pikirkan sedikit lebih banyak tentangnya dan / atau poskan di meta.codegolf.stackexchange.com/q/2140/15599 lalu kirim ulang nanti.
Level River St
1
Mengizinkan banyak topping bisa menjadi cara lain untuk membuatnya lebih menarik. Kemudian lagi, tantangan yang tampak sederhana sering mendapatkan banyak partisipasi. BTW, dua cookie memiliki spasi putih di output sampel. Itu mungkin tidak disengaja?
Reto Koradi
1
Saya membuat suntingan kecil untuk membatalkan indentasi, sehingga semua cookie memiliki spasi putih terkemuka yang sama. Saya berasumsi empat spasi utama adalah masalah format dan tidak diperlukan? Anda harus menentukan apakah baris baru memimpin / mengikuti diizinkan. Saya menyarankan untuk tidak mengizinkan spasi putih yang tidak perlu, dengan pengecualian mengizinkan baris tambahan opsional.
Level River St
1
Apakah fungsi diizinkan?
MayorMonty
1
Setelah @steveverrill membuka mata saya , ini sepertinya hanya versi sederhana dari Apakah Anda ingin membuat kode manusia salju? . Beberapa persyaratan lebih lanjut, seperti diameter variabel yang disebutkan, akan benar-benar meningkatkannya.
manatwork

Jawaban:

4

Pyth, 42 41 byte

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

Cobalah online: Input Reguler / Test Suite

Penjelasan:

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

Ruby, 73

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

Ini adalah fungsi lambda anonim. Ini dia dalam program uji:

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

puts g.call(gets)

Itu hanya menggunakan huruf pertama dari jenis cookie (dalam huruf besar) dan membawanya modulo 3 untuk mendapatkan indeks dalam kisaran 0..2. Kemudian ia mengembalikan string yang mewakili cookie, dengan string yang sesuai tertanam di tempat yang tepat.

Level River St
sumber
Menurut Anda apa yang orddapat dilakukan metode ini jika Anda memanggilnya untuk seluruh string? Gagasan pertama saya adalah format:->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
manatwork
Lupakan. Sekali lagi trterbukti lebih pendek:->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
manatwork
@manatwork terima kasih atas saran Anda. aku terlewats[0] --> s , tidak pernah terpikir olehku untuk mencobanya. Kode Anda tampaknya tidak memberikan jawaban yang tepat untuk kotak cokelat, karena keping cokelat berada di tempat yang berbeda dengan kacang. Namun demikian ada beberapa ide berguna di sana, saya akan melihatnya nanti. Saya belum pernah menggunakan tratau %sebelumnya.
Level River St
Ups. Kamu benar. Itu adalah percobaan cepat BC (sebelum kopi). Terlalu dini untuk memperhatikan perbedaan penempatan chip. :( (BTW, "%" tidak ada hubungannya dengan trsintaks. Hanya karakter yang tidak terlibat dalam seni cookie yang saya gunakan sebagai placeholder.)
manatwork
4

Python 2.7.6, 99 byte

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

Algoritma ini bergantung pada fakta yang hash(cookie)%3memberikan 0 kapan cookie = "Plain", 1 kapan cookie = "Nutdan 2 kapan cookie = "Chocolate. Jika ada yang tahu cara membuat kode ini lebih pendek, beri tahu saya di komentar.

Loovjo
sumber
"Gunakan segala cara untuk melakukannya." Ya, argumen opsional diizinkan.
The_Basset_Hound
Oke, tapi saya pikir saya akan tetap dengan yang pertama dan meninggalkan yang kedua apa adanya.
Loovjo
@ BetaDecay Saya hanya tidak berpikir bahwa argumen opsional benar-benar dalam semangat kode-golf. Saya tidak benar-benar tahu mengapa, saya hanya berpikir bahwa itu tidak boleh diizinkan. Sekarang keduanya memiliki panjang yang sama, saya menghapus versi argumen opsional.
Loovjo
3
@Loovjo Menggunakan metode yang aneh dan tidak biasa adalah seluruh semangat kode 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);}

Penjelasan setelah saya selesai bermain golf.

Contoh penggunaan:

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

CJam, 49 48 byte

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

Cobalah online di Internet juru bahasa CJam .

Bagaimana itu bekerja

" ___
/"

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.

Pada akhirnya, CJam secara otomatis mencetak semua elemen pada stack.

Dennis
sumber
3

Javascript (ES6), 90

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

Ini adalah fungsi panah anonim. Ini menggunakan panjang input untuk menentukan cookie yang akan ditarik.

Penjelasan:

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

Untuk mengetes:

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
sumber
3

BrainFuck, 481 447 436 byte

Mengapa tidak BrainFuck ?, program mungkin bisa bermain golf lebih banyak, tapi saya pikir itu cukup rapi.

,>++++++[-<---------->]<-------[----------->>>-<<+<[-->->+<<]]>>>+>>++.<+++++++++[->>>>>>>++++++++++<+++++<++++++++++++++<++++++++++<+++++<++++++++++<+++<]++++++++++>+++.>+++++...>++>++>-->+>++++<<<<<<<.<<<[->>>>>>.>>>.<<<<<.>>>>>.<<.<<<<.>>>>>.<<<<.>>>>>.<<<<<.>>>>.<<<<<.>>>>.<<...>.<<<<<<]>[->>>>>.<<...>>>.<<<<.>>>>>.<<<<...>>>>.<<<<<.>>>>.<<...>.<<<<<]>[->>>>.>>>>.<<<<<<..>>>.<<<<.>>>>>.>>.<<<<<<.>>>>>>.<<.<<<<<.>>>>.<<...>.<<<<]
AboveFire
sumber
3

C # Dengan lekukan dan jeda baris

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 Karakter)

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
sumber
1
Kenapa tidak String C= Console.ReadLine(),E=... dll?
rpax
Hai @rpax, Komentar Anda membantu saya mengurangi 2 karakter. Terima kasih.
Merin Nakarmi
2

C # 6, 105 byte

Jadi hampir mendapatkan sub-100 byte ini, tidak tahu di mana untuk memeras beberapa byte terakhir dari: C

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

Pyth, 58 54 53 52 50 byte

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

Saya tidak berpikir ini bisa golf lagi. Saya benar-benar mencoba untuk membuat squeze ini di bawah 50 byte

Downgoat
sumber
Yang cepat dan mudah adalah". . . " -> *". "3
Sp3000
Jika Anda tertarik, saya menemukan metode yang bagus untuk melakukan ini dalam 42 byte .
Jakube
2

JavaScript (ES6), 72 byte

Tentang sesederhana itu mendapat ... baris baru dihitung sebagai masing-masing 1 byte.

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

Demo

Karena ES6, demo ini hanya berfungsi di Firefox dan Safari untuk saat ini.

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

Catatan:

Alih-alih garis miring terbalik \karakter SHIFT-M telah digunakan, untuk garis miring /- SHIFT-N dan untuk pipa |- SHIFT-T. SHIFT-Z (tanda berlian kartu) digunakan untuk ^. Faktanya karakter tidak masalah karena mereka masing-masing menempati satu byte.

Karena pada C64 setiap perintah (PRINT, INPUT, THEN, dll.) Mengambil 2 byte dalam memori (atau bahkan satu, IIRC), bahasa BASIC patut dicoba (namun, dibutuhkan lebih banyak byte daripada yang saya harapkan).

Ukuran program dihitung dengan mengukur memori bebas sebelum mengetik program (38909 byte) dan setelahnya (38728 byte), menggunakan PRINT FRE(0)+65536 perintah, memberikan perbedaan 181 byte.

Kode diuji dan tangkapan layar disiapkan dengan alat ini: http://codeazur.com.br/stuff/fc64_final/ (GPL).

Tangkapan layar:

Tangkapan layar C64 1

Tangkapan layar C64 2

Voitcus
sumber
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\\___/')

Ia menggunakan banyak operator ternary dan penggabungan string, dan saya memeras semua spasi putih yang bukan bagian dari output itu sendiri.

Muddmaker
sumber
2

Java 258 217 karakter / byte


Golf

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

Asli

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
sumber
1

LUA 270 karakter 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
Alex Allen
sumber
ini adalah jawaban kedua saya untuk setiap tantangan
Alex Allen
"Jenis cookie apa yang Anda inginkan" dapat dihapus, itu tidak diperlukan. Itu mengeluarkan 39 byte di sana.
The_Basset_Hound
Ini adalah tantangan kode-golf. Cobalah untuk mempersingkat kode Anda sedikit. Misalnya Anda tidak perlu cetakan awal, persingkat cookiemenjadi c, hapus spasi putih saat ifs, hapus yang tidak perlu io.read(), baris pertama dan terakhir dari cookie selalu sama, ....
Jakube
@BassetHound menghapus pernyataan cetak
Alex Allen
@Jakube menyingkat cookie menjadi c
Alex Allen
1

LOLCODE 265 karakter

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
sumber