イースターエッグにしよう!


29

いいえ、^^vv<><>BA種類のイースターエッグではなく、私たちがペイントする本物のイースターエッグです。

これは(ひどく描かれた)卵です。

  __
 /  \
/    \
|    |
\____/

イースターでは、それらをパターンでペイントします。これらのように:

  __
 /--\
/----\
|----|
\____/
  __
 /%%\
/%%%%\
|%%%%|
\____/
  __
 /~~\
/~~~~\
|~~~~|
\____/

チャレンジ

卵をペイントする文字(印刷可能なアスキー)が与えられたら、ペイントされた卵を印刷します。

例:

&:
  __
 /&&\
/&&&&\
|&&&&|
\____/

#:
  __
 /##\
/####\
|####|
\____/

スペック

  • 末尾の改行/スペースは許可されます。

8
なぜ下票なのですか?この質問が気に入らない場合は、投票してから理由を残してください。
マシュー盧

2
考えられる理由の1つは、このタスクが十分に明確または十分に明確であると思わないことです。私はそれが十分に明確であり、文字通り些細なことでもないと思います。とはいえ、私も特に興奮しているわけではありません。
ジョンドヴォルザーク

17
ほとんどの言語では、課題は非常に簡単です。卵は、ゴルフで独創性を発揮するには短すぎます。私の意見では、それは面白くない挑戦です(サンドボックス化されていません。理由はわかりませんが、サンドボックスをボイコットしているようだからです)。
ダダ

25
このような単純なチャレンジは、私のような初心者がゴルフに慣れるのに最適だからです。
シャギー

7
ばか!あなたはイースターエッグです。(ごめん、抵抗できませんでした)
ジョージカミンズ

回答:


16

Brain-Flak270 268 266 + 1 = 267バイト

-c旗から+1

(((((((((({}<(((([(()()())]((((((((((({}){}){}){}){}[()]))<>)<>{}())))))<>)<>(((()()()()()){}))({}()){})<>)<>>))))<<>({}<>)((()()()()()){})<>({}<>)>))))<<>((({})<>)({})<((()()()()()){})>[()()])>))<>((((({})<>)[(()()()()())({}){}])<((()()()()()){})<>((({}<>){}()))>))

オンラインでお試しください!

説明を書くつもりでしたが、最初に仮眠を取り、この思考全体がどのように機能するかを忘れました。あなたの推測は私のものと同じくらい良いです。


14
これは私が今まで読んだ中で最高の説明です。+1
デビッドコンラッド

12

Python 2、62バイト

超簡単です。オンラインでお試しください
-1バイト、@ mbomb007のおかげ

print r'''  __
 /~\
/~~\
|~~|
\____/'''.replace('~',input()*2)


@ mbomb007良いもの、ありがとう
デッドポッサム

2
あなたは同様にラムダ関数を使用して、2つのバイトを保存することができ、この
Keerthana Prabhakaran

@KeerthanaPrabhakaranラムダがアスキーチャレンジに問題ないかどうかわかりません
デッドポッサム

1
アスキーチャレンジでラムダを使用する際の問題は何ですか?彼らはどのように関連していますか?:o
Keerthana Prabhakaran

10

30 26 16バイト

@Neilのおかげで、形状を作成した後に塗りつぶすことで2バイト節約

__↗¹←↑¹↖²↓_‖M←¤S

オンラインでお試しください!

説明

プログラムは、最初に卵の右半分を作成し、次にそれを反映して左半分を生成します。

__↗¹                          Write the two bottom _s and write the /
←↑¹                           Move left and write the |
↖²                            Then write two \s
↓_                            And the top _
‖M←                          Reflect the canvas to the left
¤S                           Fill the shape with the string input

←_↘ちょうどです↓_が、実際には16バイトを反映した後に入力できます:__↗¹←↑¹↖²↓_‖M←¤S
ニール

私を紹介してくれてありがとう@Neil¤
KritixiのLithos

9

ゼリー24  22 バイト

Ḥ;“ ¶/\|_”“Ṁ¢ṚR;ḳ}AṠ’ṃ

オンラインでお試しください!

どうやって?

Ḥ;“ ¶/\|_”“Ṁ¢ṚR;ḳ}AṠ’ṃ - Main link: character c  e.g. '~'
Ḥ                      - double c: ['~','~']
  “ _¶/\|”             - string literal: [' ','_',<newline>,'/','\','|']
 ;                     - concatenate c:  [['~','~'],' ','_',<newline>,'/','\','|']
          “Ṁ¢ṚR;ḳ}AṠ’  - base 250 number: 3067183430901851641706
                     ṃ - base decompression with reversed @rguments:
                       -     take the number and convert it to a base length(the list)
                       -     then index (1-based) into that same list.
                       -     i.e.: 3067183430901851641706 in base 7
                                 = 22003241534115361163500004
                                   indexed into [['~','~'],' ','_',<newline>,'/','\','|']
                                 = [' ',' ','_','_',<newline>,' ','/',['~','~'],'\',<newline>,'/',['~','~'],['~','~'],'\',<newline>,'|',['~','~'],['~','~'],'|',<newline>,'\','_','_','_','_','/']
                       - implicit print:  __
                                         /~~\
                                        /~~~~\
                                        |~~~~|
                                        \____/

3
単一のバイトの最も長い説明のためにあなたの説明を指名します 。
魔法のタコUr

それはかなり便利な原子になったようです、脚光を浴びてしばらく時間を与えると思いました!
ジョナサンアラン

2
デニスがよく使っているのを見ると、実際に理解したように感じるのは初めてです。時間は無駄になりませんでした!あなたは私に学習の1単位を与えました。
魔法のタコUr

1
まあそれは私の赤ちゃんの1つです:)
ジョナサンアラン

6

Sed、43文字

s:.:  __\n /&&\\\n/&&&&\\\n|&&&&|\n\\____/:

サンプル実行:

bash-4.3$ sed 's:.:  __\n /&&\\\n/&&&&\\\n|&&&&|\n\\____/:' <<< '★'
  __
 /★★\
/★★★★\
|★★★★|
\____/

それはまさに私が書いたもので、ほんの数秒速くなりました。
ライリー

6

JavaScript(ES6)、53 49 47バイト

これをもう少し絞ることができると確信し\ています。

f=

c=>`  __
 /${c+=c}\\
/${c+=c}\\
|${c}|
\\____/`

console.log(f`-`)
console.log(f`%`)
console.log(f`~`)
console.log(f`&`)
console.log(f`#`)

  • s=c+cの最初のセット内で変数の割り当てを移動すると、4バイト節約されます{}
  • 使用して保存された2バイトc+=cの代わりにs=c+cs=s+sに一部のおかげで、ニール私はそれを作っていたと同時に、この改善を発見。

自分でペイント!


これらの入力を<pre><code>sに入れると少し良くなります。いい仕事だ。
マシュー盧

ありがとう、@ SIGSEGV。コンソールは空白を保持し、デフォルトでは少なくとも等幅フォントを使用するため、に出力する必要はありませんpre
シャギー

1
どうしてc+=c
ニール

おかげで、@ Neil、私はそれを自分で編集していましたが、もう一度更新して、うなずきます。
シャギー

@Arnauld f=\nバイトカウントの部分をカウントする必要はありません。それだけで、スニペットが実行されます。
AdmBorkBork

5

アリス53 52バイト、非競合

1バイトを間接的に保存してくれたLeoに感謝します。

/o *^i}'.*[;.h~r}}~"{.[^\\
@"S .^~ y~a}~~.["{!~"}^^^

オンラインでお試しください!

残念ながら、yこの作業を行うには(音訳)のバグを修正する必要があったため、競合しないとマークしました。

説明

基本的な考え方は、卵の文字列を作成することですが、入力の2つのコピーの~プレースホルダーとして使用します。ただし、入力の他の文字はラインフィードを含めることができず、すべてをエスケープする必要があるため、Aliceの文字列には特に使いやすいとは言えません(これらはミラーと壁として扱われるため)。したがって、これらにもプレースホルダーを使用して、それらを音訳することで、いくつかのバイトを節約できます。のプレースホルダーはです。これは、単にそれらが表すものの直前の文字です。改行にはを使用しています。/\_|/\_|.[^{}

これでコード...プログラム全体が順序モードで解決できます。これは、文字列処理のみが必要で、整数の処理は不要だからです。さらに、条件付き制御フローは必要ありません。プログラム全体を直線的に表現できます。プログラムの一般的な構造は次のとおりです。

/...//
@....

このようなプログラムでは、IPは...セクションを上下に跳ね返り、最初に文字の半分だけを実行します。次に、/最後の2つがIPを1セル分右に移動するので、途中で@プログラムが終了するまで残りの半分(再び上下にバウンスします)を実行します。したがって、真ん中に面白いジグザグ構造を展開すると、実行しているプログラムは本当に次のようになります。

"  ^^} .~[}.~~[}{~~{}[^^^^.""!}"r.h~;a*y'~i.*So

これを見ていきましょう。

"  ^^} .~[}.~~[}{~~{}[^^^^."
      This first string is simply the egg template I've talked about.
"!}"  Push this string. It covers all the characters we need to replace
      in the template except ~.
r     Range expansion. Turns '!}' into '!"#$...z{|}'.
.     Duplicate.
h~;   Split off the first character, swap it to the top and discard it.
a*    Append a linefeed.
      We've now basically rotated the string to the left, but appended
      a linefeed instead of the exclamation mark we've shifted off.
      This maps each character in the string to the next one, except }
      which gets mapped to a linefeed.
y     Transliterate. Since the strings have the same length, this just maps
      each character in the first string to the corresponding character in
      the second string, replacing all of our placeholder characters.
'~    Push "~".
i.*   Read the input and duplicate it.
S     Substitute all "~" with the doubled input.
o     Output the result.

:Dそれはここにあります!! この言語は気の利いたように見えます
コナーオブライエン

@ ConorO'Brienありがとう。より多くのサンプルを表示したい場合のために、すでにいくつかの古い課題を取り上げました。:)
マーティンエンダー


4

ニンジン、34バイト、非競合

  __
 /##\\
/####\\
|####|
\\____/

競合しない。先頭の空白が表示されないインタープリターのバグを修正しただけです。

こちらからオンラインでお試しください。

まず、すべての文字が「スタック」にプッシュされるキャレットモードです。そして最後に、「スタック」が出力として印刷されます。

キャレットモードで#は、入力をプッシュするため、のインスタンス#は基本的に入力に置き換えられます(FYI #は1バイトのcatプログラムです)。


4

SOGL V0.1221の 18 16 バイト

0≈⁾‛≤¦¶W?5┼EB§  ‘

ここで試してみてください!

プログラム全体は次のように圧縮されています。

  __
 /ŗŗ\
/ŗŗŗŗ\
|ŗŗŗŗ|
\____/

where ŗは入力に置き換えられます。

13バイトでもほとんど機能しますが、特定の入力で不要なことを行います。


あなたは卵を塗らなければなりません。(つまり、文字で卵の内部を埋め込む)
マシュー盧

@SIGSEGV -入力とスペースを交換し、コードとスペースとダッシュを置換することによって達成されることが説明されている@,ŗ -@ŗ
ジョナサンアラン

SOGOLはいつでもTIOに参加しますか?
ジョナサンアラン

@JonathanAllan誰かがそこに着くことができたら、はい。
dzaima


3

05AB1E34 33 32バイト

„__I244S×'/ì'\«`©¦¨'|.ø®R¹'_‡).c

オンラインでお試しください!

説明

„__                               # push "__"
   I244S×                         # push a list of the input repeated 2 and 4 and 4 times
         '/ì                      # prepend "/"
            '\«                   # append "\"
               `                  # split list to separate items
                ©                 # store a copy of the last one in register
                 ¦¨               # remove first and last item of the string
                   '|.ø           # surround with pipes
                       ®R         # retrieve the string from register and reverse it
                         ¹'_‡     # replace input with "_"
                             ).c  # print each line centered

•jÀňiXƒÐ[Z•6B6ôvy5ÝJ"_ |/\"¹«‡,32のために、しかし完全に異なります。これは、私を偽造し、私は... palindromizeを使用しているという事実くそと思う製())(/\\/回文ですが。
魔法のタコUr

1
@carusocomputing:個別に投稿する必要があります。それはそれ自体で面白いほど十分に異なっています:)
エミグナ

3

Python 3.6、53バイト

lambda x:fr'''  __
 /{2*x}\
/{4*x}\
|{4*x}|
\____/'''
  • 文字xを取得して文字列を返す名前のない関数。
  • 以前のバージョンのために追加の代替としてPython 3.6のF-文字列を使用します.format()- {}F-文字列の囲まれた部分は評価されるべきコードです。
  • 文字列はr文字列であり、三重引用符で囲まれ、1バイトを節約します

lambda x:f'  __\n /{2*x}\\\n/{4*x}\\\n|{4*x}|\n\____/'

ただし、Python 3.6のオンラインインタープリターは表示されません。repl.itで
試してください(3.5と言いますが3.6です)



3

Brainfuck- 257バイト 181バイト

Golfed:ライブバージョンをクリックここに

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

私はプロのゴルファーではありません。これは私が思い出せる限り私の試みです:D

出力:

  __ 
 /XX\ 
/XXXX\ 
|XXXX| 
\____/ where X is the given char.

Ungolfed(+コメント):

; chars:
; _ 95
; / 47
; \ 92
; | 142
; min val = 42 (7 times 6)

; lets do some math
+++++++[>++++++<-]> ; effectively 7 times 6

; now lets copy this to the next pointers multiplying by 2 
the subsequent ones after the 1st
[>+>++>++>++<<<<-]

>+++++
>>>

> ; empty space starting from this pointer
++++++++++[>+++>+<<<++++<+<+>>>-]
>++<
<<--<+
>>>,
>..<<<<..>>>>>.<.
<<<<<.
>>>>..<<.>>>>.
<<<<<<.>>>>....<<.>>>>.
<<<.>....<.
>>>.<<<<.<....<.

2

05AB1E32 29 26バイト(エミグナ/アドナンのおかげ)

•jÀňiXƒÐ[Z•6B6ôvy5ÝJ¹"_ |/\ÿ"‡,

オンラインでお試しください!

•jÀňiXƒÐ[Z•6B6ô # Push ['110011', '135541', '355554', '255552', '400003']
vy               # For each encrypted block...
  5ÝJ            # Push 012345.
     ¹"_ |/\ÿ"   # Push "_ |/\{input_char}".
              ‡, # Swap the charsets.

29バイトバージョン(改行をエンコードするために必要なスマートな反復なし):

05AB1E、29バイト(Emigna)

•P£<r7»TwDšç6•5ÝJI"
_/ÿ\|"‡.c

オンラインでお試しください2!


Sを使用して文字を配列に分離し、次にa [b]を使用して各数字を前の配列の対応する位置に補間する、Eignaの提案の26バイトの拡張。これは基本的に要素ごとの音訳です(スマート)。

05AB1E、26バイト(Adnan)

"
_/ÿ\|"•P£<r7»TwDšç6•Sè.c

オンラインでお試しください3!


1
これは3バイト短くなります。私のものよりあなたの答えに似ています:)
エミグナ

1
@Emignaは、改行を使用した直接音訳は斬新なアイデアであると思います。これにより、既存のソリューションの多くから5バイトを正直にノックすることができます。
魔法のタコUr


1
@adnan- 卑劣な卑劣な...
魔法のタコ

私の答えのほとんどすべてが信用する必要がありAdmigna、あなたの絶え間ない例の両方がなければ言語を本当に知らないと思う。
魔法のタコUr

2

PHP、51バイト

$a.=$a=$argn;echo"  __
 /$a\
/$a$a\
|$a$a|
\____/";

PHP、物理的な改行なしの58バイト

$a.=$a=$argn;echo"  __\n /$a\\\n/$a$a\\\n|$a$a|\n\\____/";

-Rオプションでこれを実行します

61バイト

echo strtr("  __\n /88\\\n/8888\\\n|8888|\n\\____/",8,$argn);

値を2倍に保存します。不要なスペースを削除します。:リテラルの改行文字を使用pastebin.com/EghdAYMf
manatwork

@manatworkありがとう、私は本当に2倍の入力について考えていない
ヨルグHülsermann17年

物理的な改行を使用して、バックスラッシュをエスケープせずに7バイトを保存します(最後のスラッシュはエスケープする必要はありません)。ああ、ところで:-Rパラメーターではなく、オプションです。
タイタス

@タイタス私は物理的な改行が嫌いです
ヨルグ・ヒュルサーマン

@Titus、そう、パラメーターman phpと呼んでいますが、「パラメーター-Rまたは-Fを使用して、行
ごとに

2

BF、142 140バイト

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

これは明確にするために2行に分割されています。改行はカウントされません。

この種のことをBFで書くのはかなり簡単ですが、動きを最小限に抑えるためにセルの順序を最適化する方法は簡単ではありません。私はすべての組み合わせを試して最短を見つけるためにブルートフォーサースクリプトを作成し、ブルートフォーサーに含めなかったゴルフの機会を説明するために少しゴルフをしました。


@JoKingそれは私の答えとは非常に異なるように見えるので、別の回答として投稿することをお勧めします。
エソランジングフルーツ


2

C(gcc)95 88 85バイト

-7バイトのアルバートに感謝

ceilingcat -3バイトもありがとう

f(c){for(int*s=L"  __\n /00\\\n/0000\\\n|0000|\n\\____/\n";*s;s+=printf(*s%6?s:&c));}

オンラインでお試しください!


*q5バイト節約するために、forループにネストするだけでは宣言しないでください。 char*s;f(c){for(s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
アルバートレンショー

あなたはより多くの2を宣言することによって、そのことを岩下バイトも節約することができます*sforループの宣言の引数の内側:f(c){for(char*s=" __\n /11\\\n/1111\\\n|1111|\n\\____/\n";*s;putchar(*s^49?*s:c),s++);}
アルバート・レンショウ

1桁の数値を持つASCII文字をチェックすることで、さらに1バイト削ることができます。149ASCIIですが、2バイトです。たとえば、0〜9の値を持つものを使用します9。たとえば、集計文字 ``はASCII値です。
アルバートレンショー

提案*s;f(c){for(sの代わりにf(c){for(int*
ceilingcat

1

SpecBAS-70バイト

1 INPUT a$:  ?"  __"'" /";a$*2;"\"'"/";a$*4;"\"'"|";a$*4;"|"'"\____/"

?PRINTコマンドの省略形であり、アポストロフィはカーソルを次の行に移動します。




1

Lua、66バイト

print((([[  __
 /ee\
/eeee\
|eeee|
\____/]]):gsub("e",io.read())))

((([[#ばっちり成功]])))




1

[R]、65バイト

cat(gsub('x',scan(,''),"  __\n /xx\\\n/xxxx\\\n|xxxx|\n\\____/"))

かなり目立たない、Rで短いものを見つけてください...それはあなたの基本的なgsubです


1

C ++ 208バイト

コメントに対する回答:これは完全な再投稿です。

#include<iostream>
using namespace std;int main(){char e;cin>>e;cout<<"  __  \n";cout<<" /"<<e<<e<<"\\ "<<endl;cout<<"/"<<e<<e<<e<<e<<"\\"<<endl;cout<<"|"<<e<<e<<e<<e<<"|"<<endl;cout<<"\\____/ \n";return 0;}

1

C#、56バイト


ゴルフ

i=>"  __\n /i\\\n/ii\\\n|ii|\n\\____/".Replace("i",i+i);

非ゴルフ

i => 
   "  __\n /i\\\n/ii\\\n|ii|\n\\____/"
      .Replace( "i", i + i );

読みやすい

i => 
   "  __\n /i\\\n/ii\\\n|ii|\n\\____/"

      // Replace every instance of 'i' with the input cloned twice
      .Replace( "i", i + i );

完全なコード

using System;
using System.Collections.Generic;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<String, String> f = i => 
            "  __\n /i\\\n/ii\\\n|ii|\n\\____/"
               .Replace( "i", i + i );

         List<String>
            testCases = new List<String>() {
               "-",
               "%",
               "~",
               "o",
               " ",
         };

         foreach( String testCase in testCases ) {
            Console.WriteLine( $" Input: {testCase}\nOutput:\n{f( testCase )}\n" );
         }

         Console.ReadLine();
      }
   }
}

リリース

  • v1.0の - 56 bytes-初期ソリューション。

ノート

提供されたリンク内の印刷結果は、使用されているフォントが等幅ではないため、ふりをしたようには見えません。


1

C(gcc)、87バイト

e(d){printf("  __\n /%c%c\\\n/%c%c%c%c\\\n|%c%c%c%c|\n\\____/\n",d,d,d,d,d,d,d,d,d,d);}

stdio.hなしのprintfは警告を発生させますが、エラーは発生せず、コンパイルは成功します。

説明

すべてを1行に詰め込み、装飾文字を%cでフォーマットするPrintfステートメント。

オンラインで試す


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