도전
입력에 따라 종류의 ASCII 쿠키를 코딩하십시오.
입력
- 쿠키 종류. “일반”, “초콜릿”또는 “너트”의 세 문자열 중 하나입니다. 함수 인수, stdin (또는 가장 가까운 해당) 또는 파일 인수 일 수 있습니다.
산출
- ASCII 쿠키. 아래를 참조하십시오.
이어야한다
___
/ \
| |
\___/
일반 입력의 경우
___
/. .\
| . |
\___/
초콜릿 입력, 그리고 마지막으로
___
/^ \
|^ ^|
\___/
너트 입력 용.
기타 정보
- 이것은 나의 첫 번째 도전이며, 가능한 한 간단합니다. 건설적인 피드백에 크게 감사드립니다.
- 그렇게하는 수단을 사용하십시오.
- 후행 공백은 좋습니다.
- 이것은 코드 골프 챌린지이므로 9 일이 지나면 최단 참가작 (2015 년 8 월 12 일 수요일)이 이깁니다.
감사합니다!
우승자는 41 바이트의 Pyth를 사용하는 Jakube입니다. 참여한 모든 분들께 감사합니다. 이제 더 복잡한 과제를 해결해야합니다.
답변
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 . "]
답변
루비, 73
->s{' ___
/'+['^ \
|^ ^','. .\
| . ',' \
| '][s[0].ord%3]+'|
\___/'}
이것은 익명의 람다 함수입니다. 다음은 테스트 프로그램입니다.
g=->s{' ___
/'+['^ \
|^ ^','. .\
| . ',' \
| '][s[0].ord%3]+'|
\___/'}
puts g.call(gets)
그것은 쿠키 유형의 첫 글자 (대문자)를 사용하고 범위에서 인덱스를 얻기 위해 modulo 3을 취합니다 0..2
. 그런 다음 쿠키를 나타내는 문자열을 적절한 위치에 적절한 문자열과 함께 반환합니다.
답변
파이썬 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 = "Nut
및 2 일 때 를 제공 한다는 사실에 의존합니다 cookie = "Chocolate
. 이 코드를 더 짧게 만드는 방법을 아는 사람이 있으면 의견에 알려주십시오.
답변
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");
}
답변
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은 자동으로 스택에 모든 요소를 인쇄합니다.
답변
자바 스크립트 (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"))
답변
브레인 퍽, 481 447 436 바이트
왜 BrainFuck이 아닌가? 프로그램이 더 골프를 칠 수는 있지만 꽤 깔끔하다고 생각합니다.
,>++++++[-<---------->]<-------[----------->>>-<<+<[-->->+<<]]>>>+>>++.<+++++++++[->>>>>>>++++++++++<+++++<++++++++++++++<++++++++++<+++++<++++++++++<+++<]++++++++++>+++.>+++++...>++>++>-->+>++++<<<<<<<.<<<[->>>>>>.>>>.<<<<<.>>>>>.<<.<<<<.>>>>>.<<<<.>>>>>.<<<<<.>>>>.<<<<<.>>>>.<<...>.<<<<<<]>[->>>>>.<<...>>>.<<<<.>>>>>.<<<<...>>>>.<<<<<.>>>>.<<...>.<<<<<]>[->>>>.>>>>.<<<<<<..>>>.<<<<.>>>>>.>>.<<<<<<.>>>>>>.<<.<<<<<.>>>>.<<...>.<<<<]