Spanduk Pesawat ASCII

11

Mengingat dua input - salah satu dari mereka non-kosong dicetak ASCII string (termasuk ruang, tidak termasuk baris baru), makhluk yang lain dari dua yang berbeda, nilai-nilai yang konsisten pilihan Anda ( 1 / 0, l / r, left / right, dll) - output ASCII art pesawat spanduk string, menunjuk ke kiri atau kanan. Untuk konsistensi, saya akan menggunakan leftdan rightsepanjang deskripsi tantangan ini.

Pesawat adalah |-DI>-/( left) atau \-<ID-|( right). Karena spanduknya jelas, itu terdiri dari karakter string input yang dipisahkan oleh spasi, baik kiri-ke-kanan ( left) atau kanan-ke-kiri ( right), dan dikelilingi oleh kotak bentuk

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

atau

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

Catatan harus ada satu ruang antara awal / akhir pesan dan >, <karakter.

Sebagai contoh, berikut adalah pesan HAPPY BIRTHDAY!dan arahannya left:

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

Ini pesan PPCGdan arahnya right. Perhatikan bahwa huruf-huruf tersebut muncul "mundur" ketika dilihat dari sisi spanduk ini:

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

Aturan

  • Leading atau trailing newlines atau whitespace semuanya opsional, asalkan karakter itu sendiri berbaris dengan benar.
  • Program lengkap atau fungsi dapat diterima. Jika suatu fungsi, Anda dapat mengembalikan output daripada mencetaknya.
  • Jika memungkinkan, harap sertakan tautan ke lingkungan pengujian online sehingga orang lain dapat mencoba kode Anda!
  • Celah standar dilarang.
  • Ini adalah sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
AdmBorkBork
sumber
1
Sedikit terkait.
Dom Hastings
2
JavaScript, 4 byte: eval- Memasukkan sebuah program yang menghasilkan bidang yang menghadap ke kiri untuk kiri, dan sebuah program yang menghasilkan bidang yang menghadap ke kanan untuk kanan.
darrylyeo

Jawaban:

6

JavaScript (ES6), 141 138 byte

String dan arah adalah input melalui sintaks currying.
'/\n|-DI>-/---< 'untuk kiri, '/\n|-DI<-\\---> 'kanan.

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

Darrylyeo
sumber
Ha, sulit coding bagian dari output sepertinya eksploitasi celah, tetapi tampaknya baik-baik saja berdasarkan tantangan seperti yang tertulis. Pintar!
Rick Hitchcock
4
@RickHitchcock Jalan keluar utama adalah eval... cukup berikan sumber fungsi kiri dan kanan sebagai dua nilai pilihan Anda. (Saya pikir ada meta mengenai hal ini tetapi saya tidak dapat menemukannya.)
Neil
1
@Neil eval"Trik" akan menjadi celah dalam roh ini, bahkan jika tidak secara eksplisit dinyatakan. Namun, jawaban di sini agak pintar.
AdmBorkBork
Ya, saya sedang berdebat apakah akan mengirim evalsebagai jawaban serius . Solusi untuk tantangan di masa depan seperti ini mungkin untuk memasukkan input sebagai bagian dari jumlah byte.
darrylyeo
4

Perl 5 , 149 +1 (-p) = 150 byte

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

Cobalah online!

Input dua baris. Pertama adalah pesannya. Kedua adalah 0 untuk kiri, 1 untuk kanan.

Xcali
sumber
4

V , 73 , 65 byte

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

Cobalah online!

Bukan skor terbesar, tapi itu karena hampir setengahnya berasal dari membalikkan output.

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                                       <

Mengambil string sebagai input ke buffer, dan arah 0untuk kiri dan 1kanan sebagai argumen baris perintah.

James
sumber
4

05AB1E , 63 byte

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

Cobalah online!

Berbasis bug yang mungkin diperbaiki di masa depan.

Erik the Outgolfer
sumber
@MagicOctopusUrn mungkin
Erik the Outgolfer
@MagicOctopusUrn sebenarnya tidak, itu tidak akan berfungsi seperti itu ...
Erik the Outgolfer
@MagicOctopusUrn Cobalah untuk mengubah 0di baris kedua menjadi a 1.
Erik the Outgolfer
Ah, ruang terdepan ...
Magic Octopus Urn
4

Arang , 44 40 39 35 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Input pertama adalah 1 untuk kanan dan 0 untuk kiri, kedua adalah string banner. Sunting: Disimpan 1 byte dengan menggunakan ReflectButterfly(:Up) karenaReflectButterfly(:Down) saat ini memiliki bug posisi kursor, tapi saya menyimpan 4 byte lebih lanjut dengan membalik arah cetak, dan sekarang tidak masalah yang saya gunakan. 38 34 Versi 32 byte jika mirroring banner diizinkan:

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Input pertama adalah 0 untuk kanan dan 1 untuk kiri. Penjelasan:

|-DI>-/

Cetak pesawat.

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

Cetak bagian atas kotak (perhatikan spasi tambahan).

¿N↷⁴‖T

Jika input kedua bukan nol, balikkan arah cetak, jika tidak mencerminkan bidang dan kotak.

⮌⪫η 

Cetak pesan dengan spasi tambahan (note trailing space). Kursor berada di ujung kotak dari pesawat sehingga pesan perlu dibalik.

‖B↓

Refleksikan untuk mendapatkan bagian bawah kotak.

Neil
sumber
Versi Verbose tampaknya memiliki masalah.
Erik the Outgolfer
@EriktheOutgolfer Deverbosifier baru-baru ini rusak; TIO sepertinya belum memperbaiki.
Neil
2

Jelly , 68 65 byte

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

Cobalah online!

Membawa 1 ke kanan, 0 untuk kiri.

-3 byte terima kasih kepada @JonathanAllan ( grr saya selalu lupa AB+melakukan hal yang sama seperti B+@A)

fireflame241
sumber
³K“|-DI>-/---< “ < ”jmenyimpan satu byte; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡menyimpan 2 lainnya dengan cara yang sama.
Jonathan Allan
1

Arang , 56 byte

-8 Bytes terima kasih sepenuhnya kepada manusia dan Erik the Outgolfer!

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

Cobalah online!

Memperbaiki kasus-kasus yang disebut Dzaima memakan waktu cukup banyak pada jumlah byte. 36 byte jika kita diizinkan untuk membalik karakter seperti <dan /.

notjagan
sumber
1
Dengan python, ' '.join(s)berfungsi. Tentunya itu bisa digunakan di Arang?
totallyhuman
1
@totallyhuman Joinbekerja pada string juga.
Erik the Outgolfer
Umm, kupikir itu benar-benar manusia yang menyarankan itu.
Erik the Outgolfer
@EriktheOutgolfer Oh, saya salah menafsirkan saran @ totallyhuman saat menelepon Python ' '.joindi Charcoal. Saya akan menghargai Anda berdua.
notjagan
Anda telah merusak prosesor ast ...
Neil
1

SOGL V0.12 , 55 47 43 byte

└"┐ξA∫`Ν┌r4≥‘┘¹§,{e⌡↔@¹"╝′‰‘┼}"-<-/ \”┼e?±↔

Coba Di Sini!

0 untuk kiri dan 1 untuk kanan

dzaima
sumber
1

Python 2 , 137 136 133 byte

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]

Cobalah online!

1untuk kanan dan 0kiri

TFeld
sumber
135 byte (-1 byte) dengan mengganti 1-2*ddengan -d|1(negate dxor 1).
Tn. Xcoder
Typo, ini bukan xor, bitwise atau, pada kenyataannya.
Tn. Xcoder
1
134 byte dengan sedikit trik:*list('></\\<>')[d::2]
jferard
1

PHP, 175 byte

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

Jalankan dengan -nr, argumen pertama = 0untuk menghadap ke kanan atau 1untuk kiri dan argumen kedua = teks
atau coba online .

Titus
sumber
1

Perl 5 , 126 byte

Kode 124 byte + 2 untuk -pl.

s/./$& /g;$_=($q=$"x11 .'/-'.s/./-/gr."/
")."|-DI>-/---< $_<
".$q=~y|\\/|/\\|r;<>&&(y|<>|><|,$_=reverse,s/>/ >/,s|-/-|-\\-|)

Cobalah online!

Dom Hastings
sumber
1

Corea , 51 byte

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

Cobalah online!

Penjelasan

Program ini terdiri dari beberapa bagian:

1: Inisialisasi

"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: teks mentah

Teks berikut ini dikeluarkan ke bidang konten:


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

3: postamble

"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
Conor O'Brien
sumber
0

Excel VBA, 198 Bytes

Fungsi jendela langsung VBE anonim yang mengambil input sebagai string dari [A1]dan int dari jarak di [B1]mana 1menunjukkan bahwa pesawat berada di sebelah kiri dan 0menunjukkan bahwa pesawat berada di sebelah kanan.

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)
Taylor Scott
sumber
0

Google Sheets, 210 Bytes

Fungsi lembar kerja anonim yang mengambil input input sebagai string dari [A1] dan int dari rentang [B1] di mana 1 menunjukkan bahwa pesawat di sebelah kiri dan 0 menunjukkan bahwa pesawat di sebelah kanan.

=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,"\","/
Taylor Scott
sumber