Cookieをコーディングしてください


16

チャレンジ

入力に応じた種類のASCII Cookieをコーディングします。

入力

  • クッキーの種類。これは、「プレーン」、「チョコレート」、または「ナッツ」の3つの文字列のいずれかです。関数の引数、stdin(またはそれに最も近いもの)、またはファイルの引数の場合があります。

出力

  • ASCII Cookie。下記参照。

でなければなりません

     ___
    /   \
    |   |
    \___/

プレーン入力の場合、

     ___
    /. .\
    | . |
    \___/

チョコレート入力用、最後に

     ___
    /^  \
    |^ ^|
    \___/

ナット入力用。

その他の情報

  • これは私の最初の挑戦であり、できる限り簡単です。建設的なフィードバックは大歓迎です。
  • そのためには、あらゆる手段を使用します。
  • 末尾のスペースは問題ありません。
  • これはコードゴルフチャレンジであるため、9日間(2015年8月12日水曜日)の終わりに最短エントリーが勝ちます。

ありがとうございました!

勝者は41バイトのPythを使用したJakubeです。参加してくれたすべての人に感謝します。私は今、より複雑な課題を思い付くことに自分自身を任せます。


7
これは便利ですが、実際は単純です。各タイプのCookieの直径または量のユーザー入力を要求することにより、大幅に改善できます。チョコレートチップとナッツは、例ごとの場所にある必要がありますか?(直径が可変の場合、それらはおそらくランダムになる可能性があります。)とはいえ、投稿後にチャレンジを変更するのは悪い形です。1.そのままにするか、2。削除して、もう少し考え、meta.codegolf.stackexchange.com / q / 2140/15599に投稿してから、後で再投稿することをお勧めします。
レベルリバーセント

1
複数のトッピングを許可することは、これをより面白くする別の方法である可能性があります。繰り返しになりますが、見た目がシンプルなチャレンジでも、多くの人が参加します。ところで、2つのCookieのサンプル出力には先頭に空白があります。それはおそらく意図的ではないでしょうか?
レトコラディ

1
インデントをキャンセルするためにマイナーな編集を行ったため、すべてのCookieの先頭の空白は同じです。4つの先頭のスペースはフォーマットの問題であり、必須ではないと思いますか?先頭/末尾の改行を許可するかどうかを指定する必要があります。オプションの末尾の改行を許可することを除いて、不要な空白を許可しないことをお勧めします。
レベルリバーセント

1
機能は許可されますか?
MayorMonty

1
@steveverrill が私の目を開いた後、これは単に雪だるまをコーディングしますか?。前述の可変直径のようないくつかのさらなる要件は、実際にそれを改善するでしょう。
マナトワーク

回答:


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)

Cookieタイプの最初の文字(大文字)を使用し、3を法として範囲内のインデックスを取得します0..2。次に、適切な場所に適切な文字列が埋め込まれた、Cookieを表す文字列を返します。


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%の前に。
レベルリバーセント

おっとっと。あなたが正しいです。それはBC(コーヒーの前)の簡単な試みでした。チップの配置の違いに気付くには早すぎます。:((ところで、「%」はtr構文とは何の関係もありません。プレースホルダーとして使用したCookieアートに関与していない単なる文字です。)
マナトワーク

4

Python 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

さて、しかし、私はまだ最初のものに固執し、2番目のものをそのままにしておくと思います。
-Loovjo

@BetaDecay私は、オプションの引数が本当にコードゴルフの精神にあるとは思わない。理由はよくわからないが、それは許されるべきではないと思う。これらは両方とも同じ長さであるため、optional-argumentsバージョンを削除しました。
-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

Javascript(ES6)、90

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

これは匿名の矢印関数です。入力の長さを使用して、描画するCookieを決定します。

説明:

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

ゴルフ(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文字をトリムするのに役立ちました。ありがとう。
メリンナカルミ

2

C#6、105バイト

そのため、このサブ100バイトがほとんど得られましたが、最後の数バイトをどこから圧縮するのかわかりません: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バイトで行う良い方法を見つけました。
ジャクベ

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バイト

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(カードダイアモンドサイン)は^。実際、文字はすべて1バイトを占めるため、問題ではありません。

C64では各コマンド(PRINT、INPUT、THENなど)がメモリ内で2バイト(または1つでも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 バイト 112バイト

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

それは多くの三項演算子と文字列の連結を使用し、出力自体の一部ではないすべての空白を絞り出しました。


2

Java 258217文字/バイト


ゴルフ

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

これはすべての課題に対する私の2番目の答えです
アレックスアレン

「どのタイプのCookieが必要ですか」は取り出すことができますが、必要ありません。そこから39バイトが取り出されます。
The_Basset_Hound

これはコードゴルフの挑戦です。コードを少し短くしてみてください。例えばあなたが短く、初期の印刷を必要としないcookiecこれらの不要な削除、IFSの際に削除空白、io.read()、....クッキーの最初と最後の行は常に同じで、Sを
Jakube

@BassetHoundは印刷ステートメントを削除しました
アレックスアレン

@ジャクベクッキーをcに短縮
アレックスアレン

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.