ASCII Flugzeug Banner

11

Gegeben seien zwei Eingänge - einer von ihnen eine nicht leere druckbaren ASCII - Zeichenfolge (einschließlich Leerzeichen, ohne Newline), das andere Wesen eines von zwei verschiedenen, konsistente Werte Ihrer Wahl ( 1 / 0, l / r, left / right, etc.) - Ausgabe eines ASCII - Kunst Flugzeug Banner der Zeichenfolge, entweder nach links oder rechts zeigend. Aus Gründen der Einheitlichkeit würde ich verwenden leftund rightin dieser Herausforderung Beschreibung.

Die Ebene ist entweder |-DI>-/( left) oder \-<ID-|( right). Da das Banner klar ist, besteht es aus den Zeichen der Eingabezeichenfolge, die durch Leerzeichen von links nach rechts ( left) oder von rechts nach links ( right) getrennt und von einem Feld der Form umgeben sind

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

oder

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

Hinweis Es muss ein Raum zwischen dem Anfang / Ende der Nachricht und die sein >, <Zeichen.

Hier ist zum Beispiel die Nachricht HAPPY BIRTHDAY!und die Richtung left:

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

Hier ist die Nachricht PPCGund die Richtung right. Beachten Sie, dass die Buchstaben von dieser Seite des Banners aus "rückwärts" angezeigt werden:

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

Regeln

  • Führende oder nachfolgende Zeilenumbrüche oder Leerzeichen sind optional, sofern die Zeichen selbst korrekt ausgerichtet sind.
  • Entweder ein vollständiges Programm oder eine Funktion sind akzeptabel. Wenn es sich um eine Funktion handelt, können Sie die Ausgabe zurückgeben, anstatt sie zu drucken.
  • Wenn möglich, fügen Sie bitte einen Link zu einer Online-Testumgebung hinzu, damit andere Personen Ihren Code ausprobieren können!
  • Standardlücken sind verboten.
  • Dies ist daher gelten alle üblichen Golfregeln, und der kürzeste Code (in Bytes) gewinnt.
AdmBorkBork
quelle
1
Leicht verwandt.
Dom Hastings
2
JavaScript, 4 Byte: eval- Geben Sie ein Programm ein, das eine nach links gerichtete Ebene für links generiert, und ein Programm, das eine nach rechts gerichtete Ebene für rechts generiert.
Darrylyeo

Antworten:

6

JavaScript (ES6), 141 138 Byte

Zeichenfolge und Richtung werden über die Curry-Syntax eingegeben.
'/\n|-DI>-/---< 'für links, '/\n|-DI<-\\---> 'für rechts.

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

darrylyeo
quelle
Ha, die harte Codierung eines Abschnitts der Ausgabe scheint eine Ausnutzung einer Lücke zu sein, aber es scheint in Ordnung zu sein, basierend auf der Herausforderung, wie sie geschrieben wurde. Klug!
Rick Hitchcock
4
@RickHitchcock Die ultimative Lücke ist eval... Geben Sie einfach die linken und rechten Funktionsquellen als Ihre beiden Werte Ihrer Wahl an. (Ich dachte, es gibt ein Meta dazu, aber ich kann es nicht finden.)
Neil
1
@Neil Der eval"Trick" wäre diese Lücke im Geist, auch wenn nicht ausdrücklich angegeben. Diese Antwort hier ist allerdings etwas klug.
AdmBorkBork
Ja, ich habe überlegt, obeval ich als ernsthafte Antwort posten soll . Eine Problemumgehung für zukünftige Herausforderungen wie diese könnte darin bestehen, Eingaben als Teil der Byteanzahl einzubeziehen.
Darrylyeo
4

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

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

Probieren Sie es online aus!

Zweizeiliger Eingang. Erstens ist die Nachricht. Zweitens ist 0 für links, 1 für rechts.

Xcali
quelle
4

V , 73 , 65 Bytes

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

Probieren Sie es online aus!

Nicht die beste Punktzahl, aber das liegt daran, dass fast die Hälfte davon aus der Umkehrung der Ausgabe stammt.

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                                       <

Übernimmt die Zeichenfolge als Eingabe in den Puffer und die Richtung 0für links und 1rechts als Befehlszeilenargumente.

James
quelle
4

05AB1E , 63 Bytes

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

Probieren Sie es online aus!

Basierend auf Fehlern, die möglicherweise in Zukunft behoben werden.

Erik der Outgolfer
quelle
@MagicOctopusUrn möglicherweise
Erik der Outgolfer
@ MagicOctopusUrn eigentlich nein, es wird nicht so funktionieren ...
Erik der Outgolfer
@MagicOctopusUrn Versuchen Sie, das 0in der zweiten Zeile in a zu ändern 1.
Erik der Outgolfer
Ah, der führende Raum ...
Magic Octopus Urn
4

Holzkohle , 44 40 39 35 Bytes

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

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Die erste Eingabe ist 1 für rechts und 0 für links, die zweite ist die Bannerzeichenfolge. Bearbeiten: 1 Byte durch Verwendung von gespeichert , ReflectButterfly(:Up) daReflectButterfly(:Down) derzeit ein Cursorpositionierungsfehler vorliegt, aber ich habe weitere 4 Bytes durch Umkehren der Druckrichtung gespeichert, und jetzt spielt es keine Rolle, welche ich verwende. 38 34 32-Byte-Version, wenn das Spiegeln des Banners zulässig war:

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

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Die erste Eingabe ist 0 für rechts und 1 für links. Erläuterung:

|-DI>-/

Drucken Sie das Flugzeug.

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

Drucken Sie die obere Hälfte des Felds (hinteres Leerzeichen beachten).

¿N↷⁴‖T

Wenn der zweite Eingang ungleich Null ist, kehren Sie die Druckrichtung um, andernfalls spiegeln Sie die Ebene und das Feld wider.

⮌⪫η 

Drucken Sie die Nachricht mit zusätzlichem Abstand (hinteres Leerzeichen). Der Cursor befindet sich am anderen Ende des Felds von der Ebene entfernt, sodass die Nachricht umgekehrt werden muss.

‖B↓

Denken Sie nach, um die untere Hälfte der Box zu erhalten.

Neil
quelle
Die ausführliche Version scheint Probleme zu haben.
Erik der Outgolfer
@EriktheOutgolfer Deverbosifier wurde vor kurzem gebrochen; TIO scheint das Problem noch nicht zu haben.
Neil
2

Gelee , 68 65 Bytes

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

Probieren Sie es online aus!

Nimmt 1 für rechts, 0 für links.

-3 Bytes danke an @JonathanAllan ( grr ich vergesse immer AB+das gleiche wie B+@A)

fireflame241
quelle
³K“|-DI>-/---< “ < ”jspart ein Byte; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡speichert weitere 2 auf die gleiche Weise.
Jonathan Allan
1

Holzkohle , 56 Bytes

-8 Bytes dank totalhuman und Erik the Outgolfer!

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

Probieren Sie es online aus!

Das Beheben der von dzaima erwähnten Fälle forderte einen erheblichen Tribut an der Anzahl der Bytes. 36 Bytes, wenn wir Zeichen wie <und umkehren dürfen /.

notjagan
quelle
1
In Python ' '.join(s)funktioniert. Sicherlich kann das in Holzkohle verwendet werden?
totalmenschlich
1
@totallyhuman Joinarbeitet auch an Strings.
Erik der Outgolfer
Ähm, ich denke, es war total menschlich, der das tatsächlich vorgeschlagen hat.
Erik der Outgolfer
@EriktheOutgolfer Oh, ich habe @ totalhumans Vorschlag falsch interpretiert, als würde ich Python's ' '.joinin Charcoal anrufen . Ich werde euch beide gutschreiben.
Notjagan
Sie haben den Ast-Prozessor kaputt gemacht ...
Neil
1

SOGL V0.12 , 55 47 43 Bytes

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

Probieren Sie es hier aus!

0 für links und 1 für rechts

Dzaima
quelle
1

Python 2 , 137 136 133 Bytes

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]

Probieren Sie es online aus!

1für rechts und 0für links

TFeld
quelle
135 Bytes (-1 Byte) durch Ersetzen 1-2*ddurch -d|1(negiere dxor 1).
Mr. Xcoder
Tippfehler, es ist nicht xor, es ist bitweise oder in der Tat.
Mr. Xcoder
1
134 Bytes mit einem kleinen Trick:*list('></\\<>')[d::2]
Jferard
1

PHP, 175 Bytes

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

Führen Sie mit -nr, erstes Argument = 0für rechts oder 1links und zweites Argument = Text
oder versuchen Sie es online .

Titus
quelle
1

Perl 5 , 126 Bytes

124 Bytes Code + 2 für -pl.

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

Probieren Sie es online aus!

Dom Hastings
quelle
1

Korea , 51 Bytes

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

Probieren Sie es online aus!

Erläuterung

Das Programm besteht aus einigen Teilen:

1: Initialisierung

"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: Rohtext

Der folgende Text wird in das Inhaltsfeld ausgegeben:


|-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
quelle
0

Excel VBA, 198 Bytes

Anonyme VBE-Sofortfensterfunktion, die Eingaben als Zeichenfolge aus [A1]und int aus dem Bereich übernimmt , [B1]wobei 1angezeigt wird, dass sich die Ebene links und 0die Ebene rechts befindet.

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
quelle
0

Google Sheets, 210 Bytes

Anonyme Arbeitsblattfunktion, die die Eingabe als Zeichenfolge aus [A1] und int aus dem Bereich [B1] übernimmt, wobei 1 angibt, dass sich die Ebene links befindet, und 0 angibt, dass sich die Ebene rechts befindet.

=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
quelle