Bandiera dell'aeroplano ASCII


11

Dati due ingressi - uno di loro una stringa non vuota stampabili ASCII (compresi spazio, escluso nuova riga), l'altro essere uno dei due valori distinti, consistenti desiderate ( 1 / 0, l / r, left / right, ecc) - uscita un'arte aeroplano ASCII banner della stringa, che punta a sinistra oa destra. Per coerenza, userò lefte rightdurante questa descrizione della sfida.

Il piano è |-DI>-/( left) o \-<ID-|( right). Poiché il banner è chiaro, è costituito dai caratteri della stringa di input separati da spazi, da sinistra a destra ( left) o da destra a sinistra ( right) e circondati da una casella della forma

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

o

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

Nota ci deve essere uno spazio tra l'inizio / fine del messaggio e dei >, <caratteri.

Ad esempio, ecco il messaggio HAPPY BIRTHDAY!e la direzione left:

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

Ecco il messaggio PPCGe la direzione right. Nota che le lettere appaiono "all'indietro" quando visualizzate da questo lato del banner:

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

Regole

  • Le nuove linee iniziali o finali o gli spazi bianchi sono tutti opzionali, purché i personaggi stessi si allineino correttamente.
  • È accettabile un programma completo o una funzione. Se una funzione, è possibile restituire l'output anziché stamparlo.
  • Se possibile, includi un collegamento a un ambiente di test online in modo che altre persone possano provare il tuo codice!
  • Sono vietate le scappatoie standard .
  • Si tratta di quindi si applicano tutte le normali regole del golf e vince il codice più breve (in byte).


2
JavaScript, 4 byte: eval- Immettere un programma che genera un piano rivolto a sinistra per sinistra e un programma che genera un piano rivolto a destra per destra.
darrylyeo,

Risposte:


6

JavaScript (ES6), 141 138 byte

La stringa e la direzione vengono inserite tramite la sintassi del curry.
'/\n|-DI>-/---< 'per sinistra, '/\n|-DI<-\\---> 'per destra.

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


Ah, codificare con forza una sezione dell'output sembra uno sfruttamento di una scappatoia, ma sembra andare bene sulla base della sfida scritta. Intelligente!
Rick Hitchcock,

4
@RickHitchcock L'ultima scappatoia è eval... basta fornire le fonti di funzione destra e sinistra come i due valori che preferisci . (Ho pensato che ci fosse una meta su questo, ma non riesco a trovarlo.)
Neil

1
@Neil Il eval"trucco" sarebbe questa scappatoia nello spirito, anche se non esplicitamente dichiarato. Questa risposta è piuttosto intelligente, però.
AdmBorkBork,

Sì, stavo discutendo se pubblicare evalcome risposta seria . Una soluzione alternativa per sfide future come questa potrebbe essere quella di includere input come parte del conteggio dei 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|-/-|-\\-|}

Provalo online!

Ingresso a due righe. Il primo è il messaggio. Il secondo è 0 per sinistra, 1 per destra.


4

V , 73 , 65 byte

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

Provalo online!

Non il punteggio più grande, ma questo perché quasi la metà di questo deriva dall'inversione dell'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                                       <

Prende la stringa come input per il buffer e la direzione 0per gli 1argomenti da riga di comando a sinistra e per destra.



4

Carbone , 44 40 39 35 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Il primo input è 1 per destra e 0 per sinistra, il secondo è la stringa banner. Modifica: salvato 1 byte usando ReflectButterfly(:Up) comeReflectButterfly(:Down) attualmente ha un bug di posizionamento del cursore, ma ho salvato altri 4 byte invertendo la direzione di stampa, e ora non importa quale utilizzo. 38 34 Versione a 32 byte se era consentito il mirroring del banner:

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Il primo input è 0 per destra e 1 per sinistra. Spiegazione:

|-DI>-/

Stampa l'aereo.

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

Stampa la metà superiore del riquadro (nota lo spazio finale).

¿N↷⁴‖T

Se il secondo input è diverso da zero, invertire la direzione di stampa, altrimenti riflettere il piano e il riquadro.

⮌⪫η 

Stampa il messaggio con una spaziatura aggiuntiva (spazio finale della nota). Il cursore si trova all'estremità del riquadro dal piano, quindi il messaggio deve essere invertito.

‖B↓

Rifletti per ottenere la metà inferiore della scatola.


La versione dettagliata sembra avere problemi.
Erik the Outgolfer,

@EriktheOutgolfer Deverbosifier è stato rotto di recente; TIO non sembra avere ancora la soluzione.
Neil,

2

Gelatina , 68 65 byte

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

Provalo online!

Prende 1 per destra, 0 per sinistra.

-3 byte grazie a @JonathanAllan ( grr dimentico sempre che AB+fa lo stesso B+@A)


³K“|-DI>-/---< “ < ”jsalva un byte; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡salva altri 2 allo stesso modo.
Jonathan Allan,

1

Carbone , 56 byte

-8 byte grazie a totalmente umano ed Erik the Outgolfer!

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

Provalo online!

Risolvere i casi menzionati da dzaima ha avuto un notevole impatto sul conteggio dei byte. 36 byte se ci è permesso invertire caratteri come <e /.


1
In Python, ' '.join(s)funziona. Sicuramente quello può essere usato nel carbone?
totalmente umano il

1
@totallyhuman Joinfunziona anche sulle stringhe.
Erik the Outgolfer,

Umm, penso che sia stato totalmente umano a suggerirlo.
Erik the Outgolfer,

@EriktheOutgolfer Oh, ho male interpretato @ suggerimento di totallyhuman come effettuare una chiamata a Python di ' '.joina carboncino. Accrediterò entrambi.
notjagan,

Hai rotto il processore 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;

Esegui con -nr, primo argomento = 0per affrontare a destra o 1per sinistra e secondo argomento = testo
o provalo online .


1

Perl 5 , 126 byte

124 byte codice + 2 per -pl.

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

Provalo online!


1

Corea , 51 byte

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

Provalo online!

Spiegazione

Il programma è composto da alcune parti:

1: inizializzazione

"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: testo non elaborato

Il seguente testo viene inviato al campo contenuto:


|-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 byte

Funzione di finestra immediata VBE anonima che accetta input come stringa da [A1]e int da intervallo [B1]dove 1indica che il piano si trova a sinistra e 0indica che il piano si trova a destra.

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

Fogli Google, 210 byte

Funzione del foglio di lavoro anonima che accetta input come stringa da [A1] e int dall'intervallo [B1] dove 1 indica che il piano è a sinistra e 0 indica che il piano è a destra.

=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,"\","/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.