쿠키 나에게 코딩


16

도전

입력에 따라 종류의 ASCII 쿠키를 코딩하십시오.

입력

  • 쿠키 종류. "일반", "초콜릿"또는 "너트"의 세 문자열 중 하나입니다. 함수 인수, stdin (또는 가장 가까운 해당) 또는 파일 인수 일 수 있습니다.

산출

  • ASCII 쿠키. 아래를 참조하십시오.

이어야한다

     ___
    /   \
    |   |
    \___/

일반 입력의 경우

     ___
    /. .\
    | . |
    \___/

초콜릿 입력, 그리고 마지막으로

     ___
    /^  \
    |^ ^|
    \___/

너트 입력 용.

기타 정보

  • 이것은 나의 첫 번째 도전이며, 가능한 한 간단합니다. 건설적인 피드백에 크게 감사드립니다.
  • 그렇게하는 수단을 사용하십시오.
  • 후행 공백은 좋습니다.
  • 이것은 코드 골프 챌린지이므로 9 일이 지나면 최단 참가작 (2015 년 8 월 12 일 수요일)이 이깁니다.

감사합니다!

우승자는 41 바이트의 Pyth를 사용하는 Jakube입니다. 참여한 모든 분들께 감사합니다. 이제 더 복잡한 과제를 해결해야합니다.


7
이것은 훌륭하지만 오히려 간단합니다. 각 유형의 쿠키 직경 또는 수량에 대한 사용자 입력을 요구함으로써 크게 향상 될 수 있습니다. 초콜릿 칩과 견과류가 예시에 따라 위치해야합니까? (가변 직경으로, 아마도 임의적 일 수 있습니다.) 즉, 게시 후 도전을 변경하는 것은 나쁜 형태입니다. 나는 당신에게 그것을 1. 그대로 두거나, 2. 그것을 삭제하고, 그것에 대해 조금 더 생각하거나 meta.codegolf.stackexchange.com/q/2140/15599에 게시 한 다음 나중에 다시 게시 하는 것이 좋습니다 .
Level River St

1
여러 토핑을 허용하는 것이 더 흥미로운 방법이 될 수 있습니다. 그런 다음, 단순 해 보이는 도전은 종종 많은 참여를 얻습니다. BTW, 쿠키 중 두 개는 샘플 출력에 선행 공백이 있습니다. 의도적이지 않습니까?
Reto Koradi

1
들여 쓰기를 취소하기 위해 약간의 편집을 했으므로 모든 쿠키에는 동일한 선행 공백이 있습니다. 네 개의 선행 공백이 서식 문제이며 필요하지 않다고 가정합니다. 선행 / 후행 개행이 허용되는지 여부를 지정해야합니다. 선택적인 후행 줄 바꿈을 허용하는 것을 제외하고 불필요한 공백을 허용하지 않는 것이 좋습니다.
Level River St

1
기능이 허용됩니까?
MayorMonty

1
@ steveverrill 이 내 눈을 뜨고 나면 이것은 단순화 된 버전 인 것 같습니다 눈사람을 코딩하고 싶습니까? . 언급 된 가변 직경과 같은 몇 가지 추가 요구 사항이 실제로 개선 될 것입니다.
manatwork

답변:


4

Pyth, 42 41 바이트

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

온라인 사용해보기 : 일반 입력 / 테스트 스위트

설명:

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

루비, 73

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

이것은 익명의 람다 함수입니다. 다음은 테스트 프로그램입니다.

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

puts g.call(gets)

그것은 쿠키 유형의 첫 글자 (대문자)를 사용하고 범위에서 인덱스를 얻기 위해 modulo 3을 취합니다 0..2. 그런 다음 쿠키를 나타내는 문자열을 적절한 위치에 적절한 문자열과 함께 반환합니다.


ord전체 문자열을 호출하면 메소드가 무엇을 할 수 있다고 생각 합니까? 내 첫번째 생각은 서식되었다 :->s{" ___\n/%1$s \\\n|%1$s %1$s|\n\\___/"%'^. '[s.ord%3]}
manatwork

잊어 버려. 다시 한 번 tr더 짧아짐 :->s{' ___↵/% \↵|% %|↵\___/'.tr ?%,'^. '[s.ord%3]}
manatwork

@manatwork 제안 해 주셔서 감사합니다. 나는 그것을 그리워 s[0] --> s하지 않았다. 초콜릿 칩이 견과류와 다른 위치에 있기 때문에 코드가 초콜릿 케이스에 대한 올바른 답변을 제공하지 않는 것 같습니다. 그럼에도 불구하고 몇 가지 유용한 아이디어가 있지만 나중에 살펴 보겠습니다. 나는 전에 tr또는 사용하지 않았습니다 %.
Level River St

죄송합니다. 네 말이 맞아 BC (커피 전)의 빠른 시도였습니다. 칩 배치 차이를 알기에는 너무 이릅니다. :( (BTW,“%”는 tr의 구문 과 아무 관련이 없습니다 . 자리 표시 자로 사용한 쿠키 아트에 관련되지 않은 문자
일뿐

4

파이썬 2.7.6, 99 바이트

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

이 알고리즘은 hash(cookie)%30 일 때 cookie = "Plain", 1 일 때 cookie = "Nut및 2 일 때 를 제공 한다는 사실에 의존합니다 cookie = "Chocolate. 이 코드를 더 짧게 만드는 방법을 아는 사람이 있으면 의견에 알려주십시오.



"그렇게하는 수단을 사용하십시오." 예, 선택적 인수가 허용됩니다.
The_Basset_Hound

그래도, 나는 여전히 첫 번째 것을 고수하고 두 번째 것을 그대로 둡니다.
Loovjo

@BetaDecay 선택적 인수가 실제로 코드 골프의 정신에 있다고 생각하지 않습니다. 나는 왜 그런지 모르겠다. 나는 그것이 허용되어서는 안된다고 생각한다. 둘 다 길이가 같으므로 선택적 인수 버전을 제거했습니다.
Loovjo

3
@Loovjo 사용하여 이상하고 특이한 방법 : 코드 골프의 전체 영
베타 붕괴

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

자바 스크립트 (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

브레인 퍽, 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\\___/");
    }
}

골프 (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 님, 댓글 달기에 도움이되었습니다. 감사.
Merin Nakarmi

2

C # 6, 105 바이트

그래서 거의 100 바이트 이하 의이 바이트를 얻었습니다.

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

자바 스크립트 (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

코모도어 64 베이직, 181 바이트

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-N 및 파이프 |-SHIFT-T에 SHIFT-M 문자가 사용되었습니다 . SHIFT-Z (카드 다이아몬드 기호)가 사용되었습니다 ^. 실제로 문자는 모두 각각 1 바이트를 차지하므로 중요하지 않습니다.

C64에서 각 명령 (PRINT, INPUT, THEN 등)은 메모리 (또는 일부 IIRC)에서 2 바이트를 사용하기 때문에 BASIC 언어는 시도해 볼만한 가치가있었습니다 (그러나 예상보다 많은 바이트가 소요되었습니다).

프로그램 크기는 PRINT FRE(0)+65536명령을 사용하여 프로그램을 입력하기 전 (38909 바이트) 및 이후 (38728 바이트)의 여유 메모리를 측정하여 181 바이트의 차이를 제공 하여 계산되었습니다 .

이 도구로 준비한 코드 테스트 및 스크린 샷 : http://codeazur.com.br/stuff/fc64_final/ (GPL).

스크린 샷 :

C64 스크린 샷 1

C64 스크린 샷 2


2

루아 5.3, 113 바이트 112 바이트

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

그것은 삼항 연산자와 문자열 연결을 많이 사용하며 출력 자체가 아닌 모든 공백을 압착했습니다.


2

자바 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

이것은 모든 도전에 대한 나의 두 번째 대답입니다
Alex Allen

"어떤 쿠키 유형을 원하십니까?"를 제거 할 수 있으며 필요하지 않습니다. 그것은 바로 39 바이트를 차지합니다.
The_Basset_Hound

이것은 코드 골프 도전입니다. 코드를 약간 줄이십시오. 예를 들어, 초기 인쇄가 필요없고, 짧아 cookie지고 c, ifs 동안 공백을 제거하고, 불필요한 것들을 제거하십시오 io.read(). 쿠키의 첫 번째와 마지막 줄은 항상 같습니다 ....
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.