Sztandar samolotu ASCII

11

Biorąc pod uwagę dwa wejścia - jedno z nich niepusty ciąg znaków ASCII do druku (w tym miejsca, z wyjątkiem nowej linii), natomiast drugi jest z dwóch odrębnych, spójnych wartości do wyboru ( 1 / 0, l / r, left / right, etc.) - wyjście ASCII Art samolot baner łańcucha, wskazujący w lewo lub w prawo. Aby zachować spójność, będę używać lefti rightprzez cały opis wyzwania.

Płaszczyzna to |-DI>-/( left) lub \-<ID-|( right). Ponieważ baner jest czysty, składa się ze znaków ciągu wejściowego oddzielonych spacjami, od lewej do prawej ( left) lub od prawej do lewej ( right) i otoczonych polem kształtu

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

lub

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

Uwaga musi istnieć jedna przestrzeń pomiędzy początku / końcu wiadomości oraz >, <znaków.

Na przykład tutaj jest komunikat HAPPY BIRTHDAY!i kierunek left:

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

Oto wiadomość PPCGi kierunek right. Zwróć uwagę, że litery są wyświetlane „do tyłu”, gdy oglądane są z tej strony banera:

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

Zasady

  • Wiodące lub końcowe znaki nowej linii lub białe znaki są opcjonalne, o ile same znaki są poprawnie ustawione w linii.
  • Dopuszczalny jest pełny program lub funkcja. Jeśli funkcja, możesz zwrócić dane wyjściowe zamiast je drukować.
  • Jeśli to możliwe, dołącz link do internetowego środowiska testowego, aby inni mogli wypróbować Twój kod!
  • Standardowe luki są zabronione.
  • To jest więc obowiązują wszystkie zwykłe zasady gry w golfa, a wygrywa najkrótszy kod (w bajtach).
AdmBorkBork
źródło
2
JavaScript, 4 bajty: eval- Wprowadź program, który generuje lewą płaszczyznę dla lewej strony, i program, który generuje prawą płaszczyznę dla prawej.
darrylyeo

Odpowiedzi:

6

JavaScript (ES6), 141 138 bajtów

Łańcuch i kierunek są wprowadzane za pomocą składni curry.
'/\n|-DI>-/---< 'na lewo, '/\n|-DI<-\\---> 'na prawo.

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

darrylyeo
źródło
Ha, twarde kodowanie części wyniku wydaje się być wykorzystaniem luki, ale wydaje się dobrze, biorąc pod uwagę napisane wyzwanie. Sprytny!
Rick Hitchcock,
4
@ RickHitchcock Ostateczna luka polega na eval... zapewnieniu lewego i prawego źródła funkcji jako dwóch wybranych wartości. (Myślałem, że jest w tym meta, ale nie mogę go znaleźć.)
Neil
1
@Neil eval„Sztuczka” byłaby tą luką w duchu, nawet jeśli nie zostanie to wyraźnie stwierdzone. Ta odpowiedź jest jednak dość sprytna.
AdmBorkBork
Tak, zastanawiałem się, czy opublikować evaljako poważną odpowiedź . Obejściem przyszłych wyzwań może być włączenie danych wejściowych jako części liczby bajtów.
darrylyeo
4

Perl 5 , 149 +1 (-p) = 150 bajtów

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

Wypróbuj online!

Wejście dwuliniowe. Pierwsza jest wiadomość. Drugi to 0 dla lewej, 1 dla prawej.

Xcali
źródło
4

V , 73 , 65 bajtów

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

Wypróbuj online!

Nie najlepszy wynik, ale to dlatego, że prawie połowa tego wynika z odwrócenia wyjścia.

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                                       <

Bierze ciąg jako dane wejściowe do bufora, a kierunek jak 0dla lewej i 1prawej jako argumenty wiersza poleceń.

James
źródło
4

05AB1E , 63 bajty

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

Wypróbuj online!

Na podstawie błędów, które mogą zostać naprawione w przyszłości.

Erik the Outgolfer
źródło
@MagicOctopusUrn prawdopodobnie
Erik the Outgolfer
@MagicOctopusUrn faktycznie nie, to nie będzie tak działać ...
Erik the Outgolfer
@MagicOctopusUrn Spróbuj zmienić 0w drugim wierszu na a 1.
Erik the Outgolfer,
Ach, wiodąca przestrzeń ...
Magic Octopus Urn
4

Węgiel drzewny , 44 40 39 35 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Pierwsze wejście to 1 dla prawej i 0 dla lewej, drugi to ciąg banera. Edycja: Zapisałem 1 bajt przy użyciu, ReflectButterfly(:Up) ponieważReflectButterfly(:Down) obecnie występuje błąd pozycjonowania kursora, ale zapisałem kolejne 4 bajty, odwracając kierunek drukowania, a teraz nie ma znaczenia, którego używam. 38 34 Wersja 32-bajtowa, jeśli dozwolone było dublowanie banera:

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

Wypróbuj online! Link jest do pełnej wersji kodu. Pierwsze wejście to 0 dla prawej i 1 dla lewej. Wyjaśnienie:

|-DI>-/

Wydrukuj samolot.

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

Wydrukuj górną połowę pudełka (zwróć uwagę na spację końcową).

¿N↷⁴‖T

Jeśli drugie wejście jest niezerowe, odwróć kierunek drukowania, w przeciwnym razie odzwierciedl płaszczyznę i ramkę.

⮌⪫η 

Wydrukuj wiadomość z dodatkowymi odstępami (zwróć uwagę na spację końcową). Kursor znajduje się na drugim końcu pola od płaszczyzny, więc komunikat musi zostać odwrócony.

‖B↓

Odzyskaj, aby uzyskać dolną połowę pudełka.

Neil
źródło
Wydaje się, że pełna wersja ma problemy.
Erik the Outgolfer
@EriktheOutgolfer Deverbosifier został niedawno zepsuty; Wydaje się, że TIO nie ma jeszcze poprawki.
Neil
2

Galaretka , 68 65 bajtów

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

Wypróbuj online!

Bierze 1 na prawo, 0 na lewo.

-3 bajty dzięki @JonathanAllan ( grr zawsze zapomnieć AB+robi to samo jako B+@A)

fireflame241
źródło
³K“|-DI>-/---< “ < ”jzapisuje bajt; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡zapisuje kolejne 2 w ten sam sposób.
Jonathan Allan
1

Węgiel drzewny , 56 bajtów

-8 bajtów dzięki całkowicie ludzkiemu i Erikowi Outgolferowi!

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

Wypróbuj online!

Naprawienie wspomnianych przypadków dzaima spowodowało duże straty w liczbie bajtów. 36 bajtów, jeśli wolno nam odwracać znaki takie jak <i /.

notjagan
źródło
1
W Pythonie ' '.join(s)działa. Z pewnością można tego użyć w węglu drzewnym?
całkowicie ludzki,
1
@ totallyhuman Joindziała również na ciągi znaków.
Erik the Outgolfer
Umm, myślę, że to totalnie ludzki człowiek, który to zasugerował.
Erik the Outgolfer
@EriktheOutgolfer Aha, źle zinterpretowałem sugestię @ całkowicie ludzką, aby zadzwonić do Pythona ' '.joinw Charcoal. Uznam was oboje.
notjagan
Zepsułeś procesor ast ...
Neil
1

SOGL V0.12 , 55 47 43 bajtów

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

Wypróbuj tutaj!

0 dla lewej i 1 dla prawej

dzaima
źródło
1

Python 2 , 137 136 133 bajtów

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]

Wypróbuj online!

1na prawo i 0na lewo

TFeld
źródło
135 bajtów (-1 bajt) , zastępując 1-2*dw -d|1(Negatyw dXOR 1).
Pan Xcoder
Literówka, to nie jest xor, to bitowe lub w rzeczywistości.
Pan Xcoder
1
134 bajty z małą sztuczką:*list('></\\<>')[d::2]
Jferard
1

PHP, 175 bajtów

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

Uruchom z -nr, pierwszy argument = 0dla skierowania w prawo lub 1dla lewego i drugiego argumentu = tekst
lub wypróbuj online .

Tytus
źródło
1

Perl 5 , 126 bajtów

Kod 124 bajtów + 2 dla -pl.

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

Wypróbuj online!

Dom Hastings
źródło
1

Corea , 51 bajtów

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

Wypróbuj online!

Wyjaśnienie

Program składa się z kilku części:

1: Inicjalizacja

"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: surowy tekst

Do pola treści wyprowadzany jest następujący tekst:


|-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
źródło
0

Excel VBA, 198 bajtów

Anonimowa funkcja bezpośredniego okna VBE, która pobiera dane wejściowe jako ciąg zi [A1]od zakresu, [B1]gdzie 1wskazuje, że płaszczyzna znajduje się po lewej stronie i 0wskazuje, że płaszczyzna znajduje się po prawej stronie.

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
źródło
0

Arkusze Google, 210 bajtów

Anonimowa funkcja arkusza roboczego, która pobiera dane wejściowe jako ciąg znaków z [A1] i int z zakresu [B1], gdzie 1 oznacza, że ​​płaszczyzna znajduje się po lewej stronie, a 0 oznacza, że ​​płaszczyzna znajduje się po prawej stronie.

=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
źródło