ASCII飛行機バナー


11

二つの入力を考える-そのうちの一つ(改行を除く、スペースを含む)が非空で印刷可能なASCII文字列、あなたの選択(2つの異なる、一貫した値の他のビーイングの1 1 / 0l / rleft / right、など) - ASCIIアート飛行機出力左または右を指す文字列のバナー。一貫性を保つためleftrightこのチャレンジの説明全体で使用します。

平面は|-DI>-/left)または\-<ID-|right)のいずれかです。バナーはクリアなので、左から右(left)または右から左(right)のいずれかのスペースで区切られた入力文字列の文字で構成され、形状のボックスで囲まれています

    /--/
---<  <
    \--\

または

\--\
 >  >---
/--/

注メッセージの先頭/末尾との間に1つのスペースがなければならない><文字。

たとえば、メッセージHAPPY BIRTHDAY!と方向はleft次のとおりです。

           /-------------------------------/
|-DI>-/---< H A P P Y   B I R T H D A Y ! <
           \-------------------------------\

これがメッセージPPCGと方向rightです。バナーのこちら側から見ると、文字は「後方」に表示されることに注意してください。

\---------\
 > G C P P >---\-<ID-|
/---------/

ルール

  • 文字自体が正しく並んでいる限り、先頭または末尾の改行または空白はすべてオプションです。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 可能であれば、他の人があなたのコードを試すことができるように、オンラインテスト環境へのリンクを含めてください!
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。


2
JavaScript、4バイト:eval-左に左向きの平面を生成するプログラム、および右に右向きの平面を生成するプログラムを入力します。
-darrylyeo

回答:


6

JavaScript(ES6)、141 138バイト

文字列と方向は、カリー化構文を介して入力されます。
'/\n|-DI>-/---< '左、'/\n|-DI<-\\---> '右。

t=>p=>(r=`${s='           '}/${_='-'.repeat(t.length*2+1)}${p}${[...t].join` `} ${d=p[12]} 
${s}\\${_}\\`,d>'<'?[...r].reverse().join``:r)


ハ、出力の一部をハードコーディングすることは抜け穴を悪用しているように見えますが、書かれている課題に基づいてうまくいくようです。賢い!
リックヒッチコック

4
@RickHitchcock究極の抜け穴はeval...選択した2つの値として左右の関数ソースを提供するだけです。(これにはメタがあると思ったが、見つけられない。)
ニール

1
@Neil eval「トリック」は、明示的に述べられていなくても、この精神の抜け穴になります。ただし、ここでの答えはちょっと賢いです。
AdmBorkBork

ええ、私は深刻な答えとして投稿するかどうかeval議論ていました。このような将来の課題に対する回避策は、バイトカウントの一部として入力を含めることです。
-darrylyeo

4

Perl 5、149 +1(-p)= 150バイト

$d=<>;chomp;$_=($q=$"x11 .'/'.'-'x(1+2*length)."/\n").'|-DI>-/---< '.s/./$& /gr."<\n".$q=~y|\\/|/\\|r;if($d){y|<>|><|;$_=reverse;s/>/ >/;s|-/-|-\\-|}

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

2行入力。最初はメッセージです。2番目は左が0、右が1です。


4

V73、65バイト

Ó./& 
É ÄÒ-ys$/YGpr\$.11>Hj|R|-DI>-/³-<A< ÀñkæG|æ}-r>$BR>³-\-<

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

最高得点ではありませんが、これはほぼ半分が出力の反転に由来するためです。

Hexdump:

00000000: d32e 2f26 200a c920 c4d2 2d79 7324 2f59  ../& .. ..-ys$/Y
00000010: 4770 725c 242e 3131 3e48 6a7c 527c 2d44  Gpr\$.11>Hj|R|-D
00000020: 493e 2d2f b32d 3c1b 413c 201b c0f1 6be6  I>-/.-<.A< ...k.
00000030: 477c e616 7d2d 723e 2442 523e b32d 5c2d  G|..}-r>$BR>.-\-
00000040: 3c                                       <

バッファへの入力として文字列を取り、コマンドライン引数として0左と1右の方向を取ります。


4

05AB1E、63バイト

„\\S'-¹g·>×ýD∞2äθ‚11ú"|-DI>-/---<"¸¹ε²i∞θ}J'<«S«ð«J¸«Àε²i∞2äθ}»

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

将来修正される可能性のあるバグに基づいています。


@MagicOctopusUrnおそらく
エリックアウトゴルファー

@MagicOctopusUrn実際には、それはそのような動作しません...
エリックOutgolfer

@MagicOctopusUrn 02行目のをに変更してみてください1
エリックアウトゴルファー

ああ、先頭のスペース...
マジックタコ壺

4

44 40 39 35バイト

|-DI>-/³↗<→/-LηLη↙¹←< ¿N↷⁴‖T⮌⪫η ‖B↓

オンラインでお試しください!リンクは、コードの詳細バージョンです。最初の入力は右が1、左が0で、2番目の入力はバナー文字列です。編集:現在使用 ReflectButterfly(:Up) ReflectButterfly(:Down)ている1バイトを保存するとカーソルの位置にバグがありますが、印刷方向を逆にすることでさらに4バイトを保存しましたが、どちらを使用してもかまいません。バナーのミラーリングが許可されている場合、38 34 32バイトバージョン:

|-DI>-/³P⪫⪫<<η ↘→\-LηLη↖¹‖B↑¿N‖T

オンラインでお試しください!リンクは、コードの詳細バージョンです。最初の入力は、右が0、左が1です。説明:

|-DI>-/

平面を印刷します。

³↗<→/-LηLη↙¹←< 

ボックスの上半分を印刷します(末尾のスペースに注意してください)。

¿N↷⁴‖T

2番目の入力がゼロ以外の場合、印刷方向を反転します。それ以外の場合は、プレーンとボックスを反映します。

⮌⪫η 

メッセージを余分なスペースで印刷します(末尾のスペースに注意してください)。カーソルはプレーンからボックスの遠端にあるため、メッセージを逆にする必要があります。

‖B↓

反射して箱の下半分を取得します。


詳細バージョンには問題があるようです。
エリックアウトゴルファー

@EriktheOutgolfer Deverbosifierは最近壊れました。TIOはまだ修正されていないようです。
ニール

2

ゼリー68 65バイト

“/\<“\/>”y
³K“|-DI>-/---< “ < ”j
LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡

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

右に1、左に0を取ります。

@JonathanAllanのおかげで-3バイトgrr私はいつもAB+同じことを忘れますB+@A


³K“|-DI>-/---< “ < ”jバイトを保存します。LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡同じ方法で別の2を保存します。
ジョナサンアラン

1

、56バイト

totallyhumanErik the Outgolferのおかげで-8バイト

≔⪫S θ≔⁺Lθ²η× ¹¹/η/⸿|-DI>-/³<× η<‖B↓FN«‖TM⁺η³→≔⮌θθ»↑↑Mη←θ

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

dzaimaが言及したケースを修正すると、バイト数にかなりの負担がかかりました。およびなどの文字を反転できる場合、36バイト</


1
Pythonで' '.join(s)動作します。確かにそれは炭で使用できますか?
完全に人間

1
@totallyhuman Joinは文字列でも動作します。
エリックアウトゴルファー

うーん、実際にそれを提案したのは完全に人間だったと思う。
エリックアウトゴルファー

@EriktheOutgolferああ、@ totallyhumanの提案を' '.join、チャコールでPythonを呼び出すと誤解しました。私はあなたの両方を信用します。
-notjagan

astプロセッサを破壊しました...-
ニール


1

パイソン2137の 136 133バイト

lambda s,d:'{0}/{1}-/\n|-DI{3}-{4}---{5} {2} {5} \n{0}\\-{1}\\'.format(' '*11,'--'*len(s),' '.join(s),*list('></\\<>')[d::2])[::-d|1]

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

1右と0


(negate xor )に置き換え1-2*d135バイト(-1バイト)。-d|1d1
氏Xcoder

タイプミス、それはxorではなく、ビット単位、または実際には。
Mr Xcoder

1
ちょっとしたトリックのある134バイト*list('></\\<>')[d::2]
jferard

1

PHP、175バイト

[,$d,$s]=$argv;$f=str_repeat("--",strlen($s));$r="\-$f\           
 ".join(" ",str_split("><"[$d].$s)).($d?" <---/->":" >---\-<")."ID-|
/-$f/           ";echo$d?strrev($r):$r;

で実行します-nr。最初の引数= 0右向き、または1左と2番目の引数=テキスト、
またはオンラインで試してください



1

Corea、51バイト

"u *:>ip.j:l)X-'/S:>"
|-DI>-/---< V< 
"h}>>`tHL`idF

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

説明

プログラムはいくつかの部分で構成されています。

1:初期化

"u *:>ip.j:l)X-'/S:>"
"..................."   execute the inside as code
 u                      repeat
   *                    a space, 11 times
    :                   duplicate this string
     >                  write this string to the content field
      i                 take a line of input
       p                push a space
        .j              insert that space after every character
          :l)           get (length(str) + 1)
             X-         repeat a hyphen that many times
               '/       push the "/" character
                 S      surround that string with the above character
                  :>    duplicate and write that string to the content field

2:生のテキスト

次のテキストがコンテンツフィールドに出力されます。


|-DI>-/---< V<

3:ポストアンブル

"h}>>`tHL`idF
"               execute until the end of the file
 h              mirror the previous string horizontally
  }             move the modified input string to the front of the stack
   >>           write the top two strings to the content field
     `   `id    do the inside `i`nput times
      tH        reflect the content field horizontally and vertically
        L       reverse the input string
            F   save the input string in a field (default: V)
                this replaces all Vs in the code with the input string

0

Excel VBA、198バイト

文字列として入力を受け取り、匿名VBE即時窓関数[A1]範囲及びINT 面が左側にあることを示し、面が右側にあることを示しています。[B1]10

b=[B1]:a=StrConv(IIf(b,[A1],StrReverse([A1])),64):j=[Rept("-",2*Len(A1)+1)]:k="/"&j &"/":l="\"&j &"\":s=Space(11):?IIf(b,s &k,l):?IIf(b,"|-DI>-/---< "," > ")a;IIf(b,"<",">---\-<ID-|"):?IIf(b,s &l,k)

0

Googleスプレッドシート、210バイト

[A1]から文字列として入力を受け取り、範囲[B1]からintを受け取る匿名ワークシート関数。1は平面が左側にあり、0は平面が右側にあることを示します。

=If(B1,"           /","\")&Rept("-",2*Len(A1)+1)&If(B1,"/
","\
")&If(B1,"|-DI>-/---< "," > ")&RegexReplace(A1,"(.)","$1 ")&If(B1,"<
",">---\-<ID-|
")&If(B1,"           \","/")&Rept("-",2*Len(A1)+1)&If(B1,"\","/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.