チョコレートバーを食べる


11

私にはチョコレートバーがあり、それを食べるのに助けが必要なので、あなたはそれをするためだけのプログラムを書くことになります。

説明

最初の行は入力です。例は空行で区切られています。

7
   ____
 __|__|
|__|__|
|__|__|
|__|__|

6
_______
|__|__|
|__|__|
|__|__|

5
   ____
 __|__|
|__|__|
|__|__|

0


1
   ____
   |__|

スペック

うまくいけばこの例がこの課題を明確に示していますが、混乱を避けるために仕様を示します

単一のオプションの末尾/先頭の空白を使用できます

の入力0は空の出力です。

入力が偶数の場合、上の行は次のようになります。

_______
|__|__|

奇数の場合、一番上の行は次のとおりです。

   ____
   |__|

奇数で1より大きい場合、上の行は次のとおりです。

  ____
__|__|

次の行は次のとおりです。

|__|__|

のインスタンスの数が|__|入力と同じになるまで


入力の出力は何1ですか?の入力を0サポートする必要がありますか?
ドアノブ

@Doorknobはい、チャレンジを更新しました
-Downgoat

1.関数を送信できますか?2. STDIN /関数の引数から入力を取得できますか?3. 1つまたはすべてのイタレーションを出力する必要がありますか?
-yyny


先頭の空白行は許可されますか?
ニール

回答:



4

Haskell、101バイト

Haskellはコードゴルフに最適ではありませんでした...

b="\n|__|__|"
h="   ____\n "
f 1=h++"  |__|"
f 2="_______"++b
f 3=h++"__|__|"++b
f n=f(n-2)++b
f _=""

それはあなたの見方によって異なります。Java> Python> Haskell> GolfLang。私はpythonを使用しています;)
Jアトキン

@JAtkinさて、私のPHPの答えを見てください。最悪の事態が
わかります-timmyRS

3

JavaScript ES6、80バイト

x=>(x%2?`   ____
 ${x<2?"  ":"__"}|__|`:x?"_______":"")+`
|__|__|`.repeat(x/2)

私のJaptの答えと同じテクニックを使用し、驚くほど長くはありません...


1

C、104 102バイト

f(x){x?x%2?printf("   ____\n%3s|__|\n",x<2?"":"__"):puts("_______"):0;for(x/=2;x>0;x--)puts("|__|__|");}

たぶん私はこれを改善するために、いくつかのprintf策略を使用することができます...
どうやら私ができます


1

𝔼𝕊𝕄𝕚𝕟、53文字/ 67バイト

ï%2?`   ⟮__⟯Ⅰ
 ⦃ï<2?⍞  :⍞Ⅰ⦄|Ⅰ|`:ï?⍘_ď7:⬯⦄
|Ⅰ|Ⅰ|`ď ï/2

Try it here (Firefox only).

これはJavascript ES6の回答と非常によく似ていますが、私は独自に見つけました。ゴルフを終えると来る説明。


1

PHP、134文字

<?$i=$argv[1];if($i>0){echo($i%2===0?"_______\n|__":"   ____\n".($i>1?"___":"   "))."|__|\n";echo str_repeat("|__|__|\n",($i-1)/2);}?>

ノート:

  • PHPはコードゴルフ用に構築されていません
  • 私は確かにこのスニペットを作成する楽しみを持っていました
  • argvが未定義の場合、エラーをスローします
  • それを短くするための助けをいただければ幸いです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.