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.


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)


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.


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.



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.


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)


³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 /.


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

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 .


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!


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

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)

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,"\","/
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.