Bana bir çerez kodla


16

Meydan okuma

Girişe göre bir tür ASCII çerezi kodlayın.

Giriş

  • Kurabiye türü. Bu üç dizeden biridir: "Düz", "Çikolata" veya "Fındık". İşlev bağımsız değişkenleri, stdin (veya en yakın eşdeğeri) veya dosya bağımsız değişkenleri olabilir.

Çıktı

  • Bir ASCII çerezi. Aşağıya bakınız.

Olmalıdır

     ___
    /   \
    |   |
    \___/

Düz giriş için,

     ___
    /. .\
    | . |
    \___/

Çikolata girişi için ve son olarak

     ___
    /^  \
    |^ ^|
    \___/

Somun girişi için.

Diğer bilgiler

  • Bu benim ilk görevim, olabildiğince basit. Yapıcı geribildirim büyük beğeni topluyor.
  • Bunu yapmak için herhangi bir yöntem kullanın.
  • Sondaki boşluklar iyi.
  • Bu bir kod golf mücadelesi, 9 günün sonunda (12 Ağustos 2015 Çarşamba) en kısa giriş kazanıyor.

Teşekkür ederim!

Kazanan, 41 byte ile Pyth kullanan Jakube. Katılan herkese teşekkürler. Şimdi daha karmaşık zorluklarla başa çıkmak için kendime görev yapacağım.


7
Bu güzel, ama olduğu gibi oldukça basit. Her türdeki çerezlerin çapı veya miktarı için kullanıcı girişi gerekerek büyük ölçüde geliştirilebilir. Çikolata parçaları ve fındıklar örneklere göre yerde olmalı mı? (değişken çapta, belki rastgele olabilirler.) Bununla birlikte, gönderdikten sonra meydan okumayı değiştirmek kötü bir formdur. Sana ya 1. olduğu gibi bırak ya da 2. sil, bu konuda biraz daha düşün ve / veya meta.codegolf.stackexchange.com/q/2140/15599 adresine gönder ve sonra tekrar gönder.
Level River St

1
Birden fazla Toping'e izin vermek, bunu daha ilginç hale getirmenin başka bir yolu olabilirdi. Daha sonra, basit görünen zorluklar genellikle çok fazla katılım sağlar. BTW, iki çerez örnek çıktısında önde gelen beyaz boşluğa sahiptir. Muhtemelen kasıtlı değil mi?
Reto Koradi

1
Girintiyi iptal etmek için küçük bir düzenleme yaptım, böylece tüm çerezler aynı önde gelen boşluğa sahip olacak. Önde gelen dört alanın biçimlendirme sorunu olduğunu ve gerekli olmadığını varsayıyorum? Baştaki / sondaki yeni satırlara izin verilip verilmeyeceğini belirtmelisiniz. İsteğe bağlı bir takip satırına izin vermek dışında, gereksiz boşluklara izin vermemeyi öneririm.
Level River St

1
İşlevlere izin verilecek mi?
MayorMonty

1
@Steveverrill gözlerimi açtıktan sonra , bu sadece bir kardan adam kodlamak ister misiniz? . Bahsedilen değişken çap gibi bazı başka gereksinimler de bunu gerçekten geliştirecektir.
manatwork

Yanıtlar:


4

Pyth, 42 41 bayt

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

Çevrimiçi deneyin: Düzenli Giriş / Test Paketi

Açıklama:

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

Yakut, 73

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

Bu anonim bir lambda fonksiyonudur. İşte bir test programında:

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

puts g.call(gets)

Sadece çerez türünün ilk harfini kullanır (büyük harfle) ve aralıkta bir dizin almak için modulo 3'ü alır 0..2. Ardından, uygun dizeler doğru yerlere yerleştirilmiş olarak, çerezi temsil eden dizeyi döndürür.


ordBir dizenin tamamı için çağırırsanız , yöntem ne yapabilir? İlk fikrim biçimlendirmekti:->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
manatwork

Unut gitsin. Bir kez daha trdaha kısa olduğunu kanıtlıyor:->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
manatwork

@manatwork önerileriniz için teşekkür ederiz. Kaçırdım s[0] --> s, hiç denemedim. Çikolata parçacıkları fındıklardan farklı yerlerde olduğu için kodunuz çikolata kutusu için doğru cevabı vermiyor gibi görünüyor. Yine de bazı yararlı fikirler var, onlara daha sonra bakacağım. Daha önce trya da kullanmadım %.
Level River St

Hata. Haklısın. Bu hızlı bir deneyin BC (önce kahve). Cips yerleştirme farkını fark etmek için çok erken. :( (BTW, “%” trın sözdizimi ile ilgisi yoktur . Yer tutucu olarak kullandığım çerez sanatında yer almayan bir karakter.)
manatwork

4

Python 2.7.6, 99 bayt

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

Bu algoritma hash(cookie)%30 zamanını cookie = "Plain", 1 zamanını cookie = "Nutve 2 zamanını veren gerçeğe dayanır cookie = "Chocolate. Bu kodu kısaltmanın bir yolu varsa, lütfen yorumlarda bana bildirin.



"Bunu yapmak için herhangi bir yöntem kullanın." Evet, isteğe bağlı bağımsız değişkenlere izin verilir.
The_Basset_Hound

Tamam, ama sanırım hala birincisine sadık kalacağım ve ikincisini olduğu gibi bırakacağım.
Loovjo

@BetaDecay Sadece isteğe bağlı argümanların gerçekten kod golf ruhunda olduğunu sanmıyorum. Nedenini gerçekten bilmiyorum, sadece izin verilmemesi gerektiğini düşünüyorum. İkisi de aynı uzunlukta olduklarından, isteğe bağlı argümanlar sürümünü kaldırdım.
Loovjo

3
@Loovjo Golf kodunun tüm ruhu garip ve sıradışı yöntemler kullanmak :)
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);}

Golfü bitirdikten sonra açıklama.

Kullanım örneği:

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

3

CJam, 49 48 bayt

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

CJam yorumlayıcısında çevrimiçi deneyin .

Nasıl çalışır

" ___
/"

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.

Sonunda CJam, yığındaki tüm öğeleri otomatik olarak yazdırır.


3

Javascript (ES6), 90

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

Bu anonim bir ok fonksiyonudur. Hangi çerezin çizileceğini belirlemek için girişin uzunluğunu kullanır.

Açıklama:

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

Test etmek için:

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 bayt

Neden BrainFuck ?, program muhtemelen daha fazla golf olabilir, ama bence oldukça temiz.

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

3

C # Girinti ve satır sonu

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]

1
Neden olmasın String C= Console.ReadLine(),E=... vs?
rpax

Hey @rpax, Yorumunuz 2 karakteri düzeltmeme yardımcı oldu. Teşekkürler.
Merin Nakarmi

2

C # 6, 105 bayt

Yani neredeyse 100 baytın altında, son birkaç baytın nereden sıkacağı hakkında hiçbir fikrim yok: C

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

2

Pyth, 58 54 53 52 50 bayt

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

Bunun daha fazla golf yapılabileceğini sanmıyorum. Bunu gerçekten 50 byte'ın altında squeze etmeye çalışıyordum


Hızlı ve kolay olanı". . . " -> *". "3
Sp3000

İlginizi çekiyorsa, bunu 42 baytta yapmak için güzel bir yöntem buldum .
Jakube

2

JavaScript (ES6), 72 bayt

Ne kadar basit olursa olsun… yeni satırların her biri 1 bayt olarak sayılır.

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

gösteri

ES6 olduğu için, bu demo şimdilik sadece Firefox ve Safari'de çalışıyor.

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 bayt

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

Notlar:

Ters eğik çizgiler yerine \, SHIFT-M karakterleri eğik çizgiler için /- SHIFT-N ve borular için |- SHIFT-T kullanılmıştır. SHIFT-Z (kart elmas işareti) kullanılmıştır ^. Aslında karakterler, her biri bir bayt işgal ettiği için önemli değildir.

C64'te her komut (PRINT, INPUT, THEN, vs.) bellekte 2 bayt (veya hatta bir IIRC) aldığından BASIC dili denemeye değerdi (ancak beklediğimden daha fazla bayt aldı).

Program boyutu, programı yazmadan önce (38909 bayt) ve sonra (38728 bayt) boş hafıza ölçülerek PRINT FRE(0)+65536 , 181 bayt fark vererek komut .

Kod test edildi ve bu araçla hazırlanan ekran görüntüleri: http://codeazur.com.br/stuff/fc64_final/ (GPL).

Ekran görüntüleri:

C64 ekran görüntüsü 1

C64 ekran görüntüsü 2


2

Lua 5.3, 113 Bayt 112 Bayt

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

Üçlü işleç ve dize birleştirme çok kullanır ve ben çıktı kendisi olmayan tüm boşluk sıktı.


2

Java 258 217 karakter / bayt


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

orijinal

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 karakter 270 bayt

    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

Bu, herhangi bir zorluğa ikinci cevabım
Alex Allen

"Ne tür bir çerez istiyorsunuz" çıkarılabilir, buna gerek yoktur. Orada 39 bayt var.
The_Basset_Hound

Bu bir kod-golf mücadelesi. Kodunuzu biraz kısaltmaya çalışın. Örneğin Sen ilk kısaltmak baskı, gerek yok cookieetmek co gereksiz kaldırmak, IFS sırasında, kaldır boşluk io.read()s, çerez ilk ve son satırı her zaman aynı, .... ise
Jakube

@BassetHound, baskı bildirimini kaldırdı
Alex Allen

Jakube çerezini c'ye kısalttı
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

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.