Mã cho tôi một cookie


16

Thử thách

Mã hóa cookie ASCII của một loại theo đầu vào.

Đầu vào

  • Các loại cookie. Đây là một trong ba chuỗi: "Plain", "Chocolate" hoặc "Nuts". Có thể là đối số hàm, stdin (hoặc tương đương gần nhất) hoặc đối số tệp.

Đầu ra

  • Một cookie ASCII. Xem bên dưới.

Cần phải

     ___
    /   \
    |   |
    \___/

cho đầu vào Plain,

     ___
    /. .\
    | . |
    \___/

cho đầu vào Chocolate, và cuối cùng

     ___
    /^  \
    |^ ^|
    \___/

cho đầu vào Nut.

Thông tin khác

  • Đây là thử thách đầu tiên của tôi, nó đơn giản như có thể. Phản hồi mang tính xây dựng được đánh giá rất cao.
  • Sử dụng bất kỳ phương tiện để làm như vậy.
  • Không gian lưu thông là tốt.
  • Đây là một thử thách golf mã, vì vậy, mục nhập ngắn nhất vào cuối 9 ngày (Thứ Tư, ngày 12 tháng 8 năm 2015) sẽ giành chiến thắng.

Cảm ơn bạn!

Người chiến thắng là Jakube sử dụng Pyth với 41 byte. Cảm ơn tất cả những người tham gia. Bây giờ tôi sẽ tự giao nhiệm vụ với những thử thách phức tạp hơn.


7
Điều này là tốt đẹp, nhưng khá đơn giản như nó là. Nó có thể được cải thiện ồ ạt bằng cách yêu cầu người dùng nhập vào đường kính hoặc số lượng cookie của từng loại. Các chip sô cô la và các loại hạt phải ở vị trí theo các ví dụ? (với đường kính thay đổi, có lẽ chúng có thể là ngẫu nhiên.) Điều đó nói rằng, đó là hình thức xấu để thay đổi thử thách sau khi đăng. Tôi đề nghị bạn 1. để nguyên như vậy hoặc 2. xóa nó đi, suy nghĩ thêm một chút về nó và / hoặc đăng nó trong meta.codegolf.stackexchange.com/q/2140/15599 sau đó đăng lại sau.
Cấp sông St

1
Cho phép nhiều toppings có thể là một cách khác để làm cho điều này thú vị hơn. Sau đó, một lần nữa, những thách thức tìm kiếm đơn giản thường nhận được rất nhiều sự tham gia. BTW, hai trong số các cookie có khoảng trắng hàng đầu trong đầu ra mẫu. Điều đó có lẽ không cố ý?
Reto Koradi

1
Tôi đã thực hiện một chỉnh sửa nhỏ để hủy bỏ thụt lề, vì vậy tất cả các cookie có cùng khoảng trắng hàng đầu. Tôi giả sử bốn không gian hàng đầu là một vấn đề định dạng và không bắt buộc? Bạn nên xác định xem các dòng mới hàng đầu / cuối được cho phép. Tôi sẽ đề nghị không cho phép khoảng trắng không cần thiết, ngoại trừ cho phép một dòng mới tùy chọn.
Cấp sông St

1
Chức năng sẽ được cho phép?
MayorMonty

1
Sau khi @steveverrill mở mắt ra , đây dường như chỉ là một phiên bản đơn giản hóa của Bạn có muốn mã hóa người tuyết không? . Một số yêu cầu khác, như đường kính biến được đề cập, sẽ thực sự cải thiện nó.
manatwork 04/08/2015

Câu trả lời:


4

Pyth, 42 41 byte

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

Dùng thử trực tuyến: Bộ kiểm tra đầu vào / kiểm tra thường xuyên

Giải trình:

 "..."                      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]+'|
\___/'}

Đây là một chức năng lambda ẩn danh. Đây là một chương trình thử nghiệm:

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

puts g.call(gets)

Nó chỉ sử dụng chữ cái đầu tiên của loại cookie (viết hoa) và lấy modulo 3 để lấy chỉ mục trong phạm vi 0..2. Sau đó, nó trả về chuỗi đại diện cho cookie, với các chuỗi thích hợp được nhúng vào đúng chỗ.


Bạn nghĩ ordphương thức này có thể làm gì nếu bạn gọi nó cho cả chuỗi? Ý tưởng đầu tiên của tôi là định dạng:->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
manatwork 04/08/2015

Quên đi. Một lần nữa trchứng minh là ngắn hơn:->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
manatwork

@manatwork cảm ơn bạn đã góp ý. Tôi đã bỏ lỡ s[0] --> s, nó không bao giờ xảy ra với tôi để thử nó. Mã của bạn dường như không đưa ra câu trả lời đúng cho trường hợp sô cô la, vì các chip sô cô la ở những nơi khác với các loại hạt. Tuy nhiên, có một số ý tưởng hữu ích ở đó, tôi sẽ xem xét chúng sau. Tôi chưa từng sử dụng trhoặc %trước đây.
Cấp sông St

Giáo sư. Bạn đúng rồi. Đó là một thử nhanh BC (trước khi cà phê). Quá sớm để nhận thấy sự khác biệt vị trí chip. :( (BTW, %% không liên quan gì đến trcú pháp của. Chỉ là một nhân vật không liên quan đến nghệ thuật cookie mà tôi đã sử dụng làm trình giữ chỗ.)
manatwork

4

Python 2.7.6, 99 byte

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

Thuật toán này dựa trên thực tế là hash(cookie)%3đưa ra 0 khi cookie = "Plain", 1 khi cookie = "Nutvà 2 khi cookie = "Chocolate. Nếu bất cứ ai biết một cách để làm cho mã này ngắn hơn, xin vui lòng cho tôi biết trong các ý kiến.



"Sử dụng bất kỳ phương tiện để làm như vậy." Có, các đối số tùy chọn được cho phép.
The_Basset_Hound

Được rồi, nhưng tôi nghĩ rằng tôi vẫn sẽ gắn bó với cái đầu tiên và để lại cái thứ hai như nó vốn có.
Loovjo

@BetaDecay Tôi chỉ không nghĩ rằng các đối số tùy chọn thực sự nằm trong tinh thần của môn đánh gôn. Tôi thực sự không biết tại sao, tôi chỉ nghĩ rằng nó không nên được cho phép. Bây giờ cả hai đều có cùng độ dài, tôi đã loại bỏ phiên bản đối số tùy chọn.
Loovjo

3
@Loovjo Sử dụng các phương pháp lạ và bất thường là toàn bộ tinh thần của môn đánh gôn :)
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);}

Giải thích sau khi tôi chơi golf xong.

Ví dụ sử dụng:

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

3

CJam, 49 48 byte

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

Hãy thử trực tuyến trong trình thông dịch CJam .

Làm thế nào nó hoạt động

" ___
/"

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.

Cuối cùng, CJam tự động in tất cả các yếu tố trên ngăn xếp.


3

Javascript (ES6), 90

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

Đây là một chức năng mũi tên ẩn danh. Nó sử dụng độ dài của đầu vào để xác định cookie nào sẽ vẽ.

Giải trình:

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

Để kiểm tra:

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, 480 447 436 byte

Tại sao không phải BrainFuck?, Chương trình có thể được đánh gôn nhiều hơn, nhưng tôi nghĩ nó khá gọn gàng.

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

3

C # Với thụt dòng và ngắt dòng

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

Chơi gôn (225 ký tự)

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
Tại sao không String C= Console.ReadLine(),E=... vv?
rpax

Xin chào @rpax, Nhận xét của bạn đã giúp tôi cắt 2 ký tự. Cảm ơn.
Merin Nakarmi

2

C # 6, 105 byte

Vì vậy, gần như đã có 100 byte phụ này, không biết nên nén vài byte cuối cùng từ đâu: 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\|"\___/

Tôi không nghĩ rằng điều này có thể được chơi golf nhiều hơn. Tôi đã thực sự cố gắng để điều này dưới 50 byte


Một cách nhanh chóng và dễ dàng là". . . " -> *". "3
Sp3000

Nếu bạn quan tâm, tôi đã tìm thấy một phương pháp hay để thực hiện điều này trong 42 byte .
Jakube

2

JavaScript (ES6), 72 byte

Đơn giản như nó nhận được các dòng mới của dòng được tính là 1 byte mỗi dòng.

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

Bản giới thiệu

Vì nó là ES6, bản demo này chỉ hoạt động trong Firefox và 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>


2

Hàng hóa 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"\___/"

Ghi chú:

Thay vì dấu gạch chéo ngược, \các ký tự SHIFT-M đã được sử dụng, cho dấu gạch chéo /- SHIFT-N và cho đường ống |- SHIFT-T. SHIFT-Z (ký hiệu kim cương thẻ) đã được sử dụng cho^ . Trong thực tế, các ký tự không quan trọng vì tất cả chúng đều chiếm một byte mỗi.

Bởi vì trên C64, mỗi lệnh (PRINT, INPUT, THEN, v.v.) chiếm 2 byte trong bộ nhớ (hoặc một số thậm chí một, IIRC), ngôn ngữ BASIC đáng để thử (tuy nhiên, nó mất nhiều byte hơn tôi mong đợi).

Kích thước chương trình được tính bằng cách đo bộ nhớ trống trước khi nhập chương trình (38909 byte) và sau (38728 byte), bằng cách sử dụng PRINT FRE(0)+65536lệnh, tạo ra chênh lệch 181 byte.

Mã được kiểm tra và ảnh chụp màn hình được chuẩn bị với công cụ này: http://codeazur.com.br/ ware / fc64_final / (GPL).

Ảnh chụp màn hình:

Ảnh chụp màn hình C64 1

Ảnh chụp màn hình 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\\___/')

Nó sử dụng rất nhiều toán tử ternary và nối chuỗi, và tôi đã vắt kiệt tất cả các khoảng trắng không phải là một phần của chính đầu ra.


2

Java 258 217 ký tự / byte


Chơi gôn

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

Nguyên

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 ký tự 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

đây là câu trả lời thứ hai của tôi cho bất kỳ thử thách nào
Alex Allen

"Loại cookie nào bạn muốn" có thể được lấy ra, nó không cần thiết. Nó lấy ra 39 byte ngay tại đó.
The_Basset_Hound

Đây là một thách thức mã golf. Cố gắng rút ngắn mã của bạn một chút. Ví dụ: Bạn không cần phải in ban đầu, rút ngắn cookietới c, loại bỏ khoảng trắng trong IFS, loại bỏ những không cần thiết io.read()s, dòng đầu tiên và cuối cùng của một cookie luôn là như nhau, ....
Jakube

@BassetHound đã xóa câu lệnh in
Alex Allen

@Jakube rút ngắn cookie thành c
Alex Allen

1

LOLCODE 265 ký tự

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.