รหัสฉันคุกกี้


16

ท้าทาย

รหัสคุกกี้ ASCII ของชนิดตามอินพุต

อินพุต

  • ประเภทคุกกี้ นี่คือหนึ่งในสามสายอักขระ: "ธรรมดา", "ช็อคโกแลต" หรือ "ถั่ว" อาจเป็นอาร์กิวเมนต์ฟังก์ชัน, stdin (หรือเทียบเท่าที่ใกล้เคียงที่สุด) หรืออาร์กิวเมนต์ไฟล์

เอาท์พุต

  • คุกกี้ ASCII ดูด้านล่าง

จะต้องเป็น

     ___
    /   \
    |   |
    \___/

สำหรับอินพุตธรรมดา

     ___
    /. .\
    | . |
    \___/

สำหรับใส่ช็อคโกแลตและในที่สุด

     ___
    /^  \
    |^ ^|
    \___/

สำหรับอินพุตอ่อนนุช

ข้อมูลอื่น ๆ

  • นี่เป็นความท้าทายครั้งแรกของฉันมันง่ายอย่างที่สามารถเป็นได้ ข้อเสนอแนะที่สร้างสรรค์มีความชื่นชมอย่างมาก
  • ใช้วิธีการใด ๆ ที่จะทำ
  • ช่องว่างต่อท้ายได้ดี
  • นี่เป็นความท้าทายของการเล่นกอล์ฟดังนั้นการเข้าร่วมรายการที่สั้นที่สุดในตอนท้ายของ 9 วัน (วันพุธที่ 12 สิงหาคม 2558) จะเป็นผู้ชนะ

ขอขอบคุณ!

ผู้ชนะคือ Jakube ที่ใช้ Pyth ขนาด 41 ไบต์ ขอบคุณทุกท่านที่เข้าร่วม ตอนนี้ฉันจะทำงานด้วยความท้าทายที่ซับซ้อนมากขึ้น


7
นี่เป็นสิ่งที่ดี แต่ค่อนข้างง่ายเหมือนเดิม มันสามารถปรับปรุงให้ดีขึ้นอย่างมากโดยกำหนดให้ผู้ใช้ป้อนข้อมูลสำหรับเส้นผ่านศูนย์กลางหรือปริมาณของคุกกี้แต่ละประเภท ช็อกโกแลตชิปและถั่วต้องอยู่ในตำแหน่งตามตัวอย่างหรือไม่? (ด้วยเส้นผ่านศูนย์กลางตัวแปรพวกเขาอาจจะสุ่ม) ที่กล่าวว่ามันเป็นรูปแบบที่ไม่ดีที่จะเปลี่ยนความท้าทายหลังจากโพสต์ ฉันขอแนะนำให้คุณ 1. ปล่อยไว้อย่างที่มันเป็นหรือ 2. ลบทิ้งลองคิดอีกเล็กน้อยเกี่ยวกับมันและ / หรือโพสต์ไว้ในmeta.codegolf.stackexchange.com/q/2140/15599จากนั้นทำการโพสต์ใหม่ในภายหลัง
Level River St

1
การอนุญาตให้ใส่รสชาติหลาย ๆ อาจเป็นอีกวิธีที่ทำให้สิ่งนี้น่าสนใจยิ่งขึ้น จากนั้นอีกครั้งความท้าทายที่ดูง่ายมักจะได้รับการมีส่วนร่วมมากมาย BTW คุกกี้สองตัวมีพื้นที่ว่างสีขาวในผลลัพธ์ตัวอย่าง นั่นอาจจะไม่ตั้งใจ
Reto Koradi

1
ฉันทำการแก้ไขเล็กน้อยเพื่อยกเลิกการเยื้องดังนั้นคุกกี้ทั้งหมดจึงมีช่องว่างนำหน้าเหมือนกัน ฉันสมมติว่าช่องว่างสี่ชั้นนำเป็นปัญหาการจัดรูปแบบและไม่จำเป็น? คุณควรระบุว่าอนุญาตให้ขึ้นบรรทัดใหม่ / นำหน้าได้หรือไม่ ฉันขอแนะนำให้ไม่อนุญาตช่องว่างที่ไม่จำเป็นยกเว้นการขึ้นบรรทัดใหม่ที่ไม่จำเป็น
เลเวลริเวอร์เซนต์

1
ฟังก์ชั่นจะได้รับอนุญาตหรือไม่
MayorMonty

1
หลังจาก @steveverrill ลืมตาฉันดูเหมือนว่าจะเป็นเวอร์ชั่นย่อของคุณต้องการเขียนรหัส snowman หรือไม่? . ข้อกำหนดเพิ่มเติมบางประการเช่นเส้นผ่านศูนย์กลางตัวแปรที่กล่าวถึงจะปรับปรุงให้ดีขึ้นจริง ๆ
จัดการ

คำตอบ:



7

ทับทิม, 73

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

นี่คือฟังก์ชั่นแลมบ์ดานิรนาม นี่คือโปรแกรมทดสอบ:

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

puts g.call(gets)

มันก็ใช้อักษรตัวแรกของประเภทคุกกี้ (ตัวพิมพ์ใหญ่) และใช้มันแบบโมดูโล 3 0..2ที่จะได้รับดัชนีในช่วง จากนั้นจะส่งคืนสตริงที่แทนคุกกี้โดยมีสตริงที่เหมาะสมฝังอยู่ในตำแหน่งที่ถูกต้อง


คุณคิดว่าordวิธีการจะทำอย่างไรถ้าคุณเรียกมันว่าสตริงทั้งหมด? ความคิดแรกของฉันคือการจัดรูปแบบ:->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
จัดการ

ลืมมันไปเถอะ trพิสูจน์ให้สั้นลงอีกครั้ง:->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
จัดการ

@ manatwork ขอบคุณสำหรับคำแนะนำของคุณ ฉันพลาดs[0] --> sไปมันไม่เคยเกิดขึ้นกับฉันเลยที่จะลอง ดูเหมือนว่ารหัสของคุณจะไม่ให้คำตอบที่ถูกสำหรับเคสช็อกโกแลตเนื่องจากชิปช็อคโกแลตอยู่ในสถานที่ที่แตกต่างจากถั่ว อย่างไรก็ตามมีความคิดที่เป็นประโยชน์ที่นั่นฉันจะดูในภายหลัง ฉันไม่ได้ใช้trหรือ%ก่อน
เลเวลริเวอร์เซนต์

อุ่ย คุณพูดถูก นั่นคือการลองใช้ BC อย่างรวดเร็ว (ก่อนกาแฟ) เร็วเกินไปที่จะสังเกตเห็นความแตกต่างของตำแหน่งชิป :( (BTW,“%” ไม่มีส่วนเกี่ยวข้องกับtrไวยากรณ์ของ. เป็นเพียงตัวละครที่ไม่เกี่ยวข้องกับศิลปะคุกกี้ที่ฉันใช้เป็นตัวยึดตำแหน่ง)
จัดการ

4

Python 2.7.6, 99 ไบต์

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

ขั้นตอนวิธีการนี้อยู่บนพื้นฐานความจริงที่ว่าhash(cookie)%3จะช่วยให้ 0 เมื่อcookie = "Plain"1 เมื่อcookie = "Nut2 cookie = "Chocolateเมื่อ หากใครรู้วิธีทำให้รหัสนี้สั้นลงโปรดแจ้งให้เราทราบในความคิดเห็น



"ใช้วิธีการใด ๆ ในการทำเช่นนั้น" ใช่อนุญาตให้โต้แย้งตัวเลือกได้
The_Basset_Hound

โอเค แต่ฉันคิดว่าฉันจะยังคงยึดติดกับอันแรกและปล่อยอันที่สองไว้ตามเดิม
Loovjo

@BetaDecay ฉันไม่คิดว่าข้อโต้แย้งที่เป็นตัวเลือกจริงๆอยู่ในจิตวิญญาณของรหัสกอล์ฟ ฉันไม่รู้จริงๆว่าทำไมฉันแค่คิดว่ามันไม่ควรได้รับอนุญาต ตอนนี้พวกมันมีความยาวเท่ากันแล้วฉันก็ลบเวอร์ชั่นเผื่อเลือกออก
Loovjo

3
@ Loovjo การใช้วิธีการที่แปลกและผิดปกติคือจิตวิญญาณทั้งหมดของการตีกอล์ฟ :)
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);}

คำอธิบายหลังจากเล่นกอล์ฟเสร็จ

ตัวอย่างการใช้งาน:

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

3

CJam, 49 48 ไบต์

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

ลองใช้ออนไลน์ในล่าม CJam

มันทำงานอย่างไร

" ___
/"

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.

ในตอนท้าย CJam พิมพ์องค์ประกอบทั้งหมดบนสแต็กโดยอัตโนมัติ


3

Javascript (ES6), 90

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

นี่คือฟังก์ชั่นลูกศรที่ไม่ระบุชื่อ มันใช้ความยาวของอินพุตเพื่อกำหนดคุกกี้ที่จะวาด

คำอธิบาย:

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

ทดสอบ:

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 ไบต์

ทำไมไม่ BrainFuck โปรแกรมนี้สามารถตีกอล์ฟได้มากกว่านี้ แต่ฉันคิดว่ามันค่อนข้างเรียบร้อย

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

3

C # ด้วยการเยื้องและการแบ่งบรรทัด

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 ตัวอักษร)

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
ทำไมไม่String C= Console.ReadLine(),E=... ฯลฯ
rpax

สวัสดี @rpax ความคิดเห็นของคุณช่วยฉันตัดแต่ง 2 ตัวอักษร ขอบคุณ
Merin Nakarmi

2

C # 6, 105 ไบต์

ดังนั้นเกือบจะได้รับ sub-100 bytes นี้ไม่มีความคิดว่าจะบีบไม่กี่ไบต์สุดท้ายจาก: C

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

2

Pyth, 58 54 53 52 50 ไบต์

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

ฉันไม่คิดว่าสิ่งนี้จะสามารถเล่นกอล์ฟได้มากกว่านี้ ฉันพยายามที่จะเปิดเผยสิ่งนี้ในที่ต่ำกว่า 50 ไบต์


หนึ่งที่ง่ายและรวดเร็วคือ". . . " -> *". "3
Sp3000

หากสนใจของคุณผมพบว่าวิธีที่ดีที่จะทำเช่นนี้ใน42 ไบต์
Jakube

2

JavaScript (ES6), 72 ไบต์

ง่ายพอ ๆ กับที่ได้รับ ... บรรทัดใหม่จะถูกนับเป็น 1 ไบต์

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

การสาธิต

เนื่องจากเป็น ES6 การสาธิตนี้ใช้ได้เฉพาะใน Firefox และ 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

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

หมายเหตุ:

แทนที่จะใช้แบ็กสแลช\อักขระ SHIFT-M ถูกใช้สำหรับเครื่องหมายทับ/- SHIFT-N และสำหรับไพพ์|- SHIFT-T SHIFT-Z (บัตรสัญญาณเพชร) ^ที่ใช้สำหรับ ในความเป็นจริงตัวละครไม่สำคัญว่าพวกเขาทั้งหมดครอบครองหนึ่งไบต์ละ

เนื่องจากใน C64 แต่ละคำสั่ง (PRINT, INPUT, THEN และอื่น ๆ ) ใช้หน่วยความจำ 2 ไบต์ (หรือบางครั้งแม้แต่ IIRC) ภาษา BASIC จึงน่าลอง

ขนาดของโปรแกรมคำนวณจากการวัดหน่วยความจำว่างก่อนพิมพ์โปรแกรม (38909 ไบต์) และหลัง (38728 ไบต์) โดยใช้PRINT FRE(0)+65536คำสั่งโดยให้ความแตกต่าง 181 ไบต์

การทดสอบโค้ดและภาพหน้าจอที่เตรียมด้วยเครื่องมือนี้: http://codeazur.com.br/stuff/fc64_final/ (GPL)

ภาพหน้าจอ:

ภาพหน้าจอ C64 1

ภาพหน้าจอ C64 2


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

มันใช้โอเปอเรเตอร์จำนวนมากและการต่อสายสตริงและฉันบีบพื้นที่ว่างทั้งหมดที่ไม่ได้เป็นส่วนหนึ่งของเอาท์พุทออกมา


2

Java 258 217 ตัวอักษร / ไบต์


แข็งแรงเล่นกอล์ฟ

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

เป็นต้นฉบับ

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 อักขระ 270 ไบต์

    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

นี่คือคำตอบที่สองของฉันสำหรับความท้าทายใด ๆ
อเล็กซ์อัลเลน

สามารถนำ "คุกกี้ประเภทใดที่คุณต้องการ" ออกได้โดยไม่จำเป็น นั่นจะออกมา 39 ไบต์ตรงนั้น
The_Basset_Hound

นี่คือความท้าทายรหัส - กอล์ฟ ลองย่อรหัสของคุณสักเล็กน้อย เช่นคุณไม่ต้องการพิมพ์เริ่มต้นย่อcookieให้cลบช่องว่างระหว่าง ifs ลบio.read()s ที่ไม่จำเป็นบรรทัดแรกและบรรทัดสุดท้ายของคุกกี้จะเหมือนเดิมเสมอ ...
Jakube

@BassetHound ลบคำสั่งการพิมพ์
Alex Allen

@Jakube ย่อคุกกี้เป็น c
Alex Allen

1

LOLCODE 265 ตัวอักษร

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.