Banner de avião ASCII

11

Dadas duas entradas - um deles uma string não-vazia de impressão ASCII (incluindo espaço, excluindo nova linha), sendo o outro um dos dois valores distintos, consistentes de sua escolha ( 1 / 0, l / r, left / right, etc.) - Saída de uma arte avião ASCII banner da string, apontando para a esquerda ou direita. Para maior consistência, usarei lefte rightao longo desta descrição do desafio.

O plano é |-DI>-/( left) ou \-<ID-|( right). Como o banner é limpo, ele consiste nos caracteres da sequência de entrada separados por espaços, da esquerda para a direita ( left) ou da direita para a esquerda ( right), e cercados por uma caixa da forma

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

ou

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

Nota deve haver um espaço entre o início / fim da mensagem e os >, <personagens.

Por exemplo, aqui está a mensagem HAPPY BIRTHDAY!e a direção left:

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

Aqui está a mensagem PPCGe a direção right. Observe que as letras aparecem "para trás" quando vistas deste lado do banner:

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

Regras

  • Novas linhas à esquerda ou à direita ou espaços em branco são opcionais, desde que os caracteres sejam alinhados corretamente.
  • Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
  • Se possível, inclua um link para um ambiente de teste on-line para que outras pessoas possam experimentar seu código!
  • As brechas padrão são proibidas.
  • Isso é portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
AdmBorkBork
fonte
2
JavaScript, 4 bytes: eval- Insira um programa que gere um plano voltado para a esquerda para a esquerda e um programa que gere um plano voltado para a direita para a direita.
precisa saber é o seguinte

Respostas:

6

JavaScript (ES6), 141 138 bytes

String e direção são inseridas através da sintaxe de currying.
'/\n|-DI>-/---< 'para a esquerda, '/\n|-DI<-\\---> 'para a direita.

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

darrylyeo
fonte
Ha, codificar uma seção da saída parece uma exploração de uma brecha, mas parece bom com base no desafio escrito. Esperto!
Rick Hitchcock
4
@ RickHitchcock A brecha definitiva é eval... apenas forneça fontes de função esquerda e direita como seus dois valores de sua escolha. (Eu pensei que era uma meta sobre isso, mas eu não posso encontrá-lo.)
Neil
1
@ Neil O eval"truque" seria essa brecha no espírito, mesmo que não explicitamente declarada. Essa resposta aqui é meio inteligente, no entanto.
AdmBorkBork 30/08
Sim, eu estava pensando se deveria postar evalcomo uma resposta séria . Uma solução alternativa para desafios futuros como esse pode ser incluir entradas como parte da contagem de bytes.
precisa saber é o seguinte
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|-/-|-\\-|}

Experimente online!

Entrada de duas linhas. Primeiro é a mensagem. O segundo é 0 para a esquerda, 1 para a direita.

Xcali
fonte
4

V , 73 , 65 bytes

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

Experimente online!

Não é a melhor pontuação, mas isso ocorre porque quase metade disso vem da reversão da produção.

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                                       <

Leva a string como entrada para o buffer e a direção como 0para esquerda e 1para direita como argumentos de linha de comando.

James
fonte
4

05AB1E , 63 bytes

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

Experimente online!

Com base em erros que podem ser corrigidos no futuro.

Erik, o Outgolfer
fonte
@MagicOctopusUrn possivelmente
Erik the Outgolfer
@MagicOctopusUrn realmente não não vai funcionar assim ...
Erik o Outgolfer
@MagicOctopusUrn Tente alterar o 0na segunda linha para a 1.
Erik the Outgolfer
Ah, o espaço líder ...
Magic Octopus Urn
4

Carvão , 44 40 39 35 bytes

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

Experimente online! Link é a versão detalhada do código. A primeira entrada é 1 para a direita e 0 para a esquerda, a segunda é a string do banner. Edit: Salvo 1 byte usando ReflectButterfly(:Up) comoReflectButterfly(:Down) atualmente possui um erro de posicionamento do cursor, mas salvei mais 4 bytes invertendo a direção da impressão e agora não importa qual uso. 38 34 versão de 32 bytes se o espelhamento do banner foi permitido:

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

Experimente online! Link é a versão detalhada do código. A primeira entrada é 0 para a direita e 1 para a esquerda. Explicação:

|-DI>-/

Imprima o avião.

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

Imprima a metade superior da caixa (observe o espaço à direita).

¿N↷⁴‖T

Se a segunda entrada for diferente de zero, inverta a direção da impressão, caso contrário, reflita o plano e a caixa.

⮌⪫η 

Imprima a mensagem com espaçamento extra (observe o espaço à direita). O cursor está na extremidade da caixa do plano, portanto a mensagem precisa ser revertida.

‖B↓

Reflita para obter a metade inferior da caixa.

Neil
fonte
A versão detalhada parece ter problemas.
Erik the Outgolfer
@EriktheOutgolfer O Deverbosifier foi quebrado recentemente; O TIO parece não ter a correção ainda.
Neil
2

Geléia , 68 65 bytes

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

Experimente online!

Leva 1 para a direita, 0 para a esquerda.

-3 bytes graças a @ JonathanAllan ( grr eu sempre esqueço AB+faz o mesmo que B+@A)

fireflame241
fonte
³K“|-DI>-/---< “ < ”jsalva um byte; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡salva outros 2 da mesma maneira.
Jonathan Allan
1

Carvão , 56 bytes

-8 bytes graças a totallyhuman e Erik, o Outgolfer!

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

Experimente online!

A correção dos casos mencionados pelo dzaima afetou bastante a contagem de bytes. 36 bytes se pudermos reverter caracteres como <e /.

notjagan
fonte
1
Em python, ' '.join(s)funciona. Certamente isso pode ser usado em carvão vegetal?
totallyhuman
1
@totallyhuman também Jointrabalha com strings.
Erik the Outgolfer
Umm, acho que foi totalmente humano quem realmente sugeriu isso.
Erik the Outgolfer
@EriktheOutgolfer Ah, eu interpretei mal a sugestão de totallyhuman como fazer uma ligação para Python's ' '.joinem Charcoal. Eu credito vocês dois.
precisa saber é o seguinte
Você quebrou o processador ast ...
Neil
1

SOGL V0.12 , 55 47 43 bytes

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

Experimente aqui!

0 para a esquerda e 1 para a direita

dzaima
fonte
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]

Experimente online!

1para a direita e 0para a esquerda

TFeld
fonte
135 bytes (-1 byte) substituindo 1-2*dpor -d|1(negar dxor 1).
Mr. Xcoder
Erro de digitação, não é xor, é bit a bit ou, de fato.
Mr. Xcoder
1
134 bytes com um pequeno truque:*list('></\\<>')[d::2]
jferard 29/08
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;

Execute com -nr, primeiro argumento = 0para enfrentar a direita ou 1para a esquerda e o segundo argumento = texto
ou tente online .

Titus
fonte
1

Perl 5 , 126 bytes

Código de 124 bytes + 2 para -pl.

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

Experimente online!

Dom Hastings
fonte
1

Corea , 51 bytes

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

Experimente online!

Explicação

O programa é composto por algumas partes:

1: Inicialização

"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: texto bruto

O texto a seguir é exibido no campo de conteúdo:


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

Excel VBA, 198 bytes

Função de janela imediata VBE anônima que recebe a entrada como sequência de [A1]e int do intervalo, [B1]onde 1indica que o plano está à esquerda e 0indica que o plano está à direita.

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

Planilhas Google, 210 bytes

Função de planilha anônima que recebe entrada como string de [A1] e int do intervalo [B1], em que 1 indica que o plano está à esquerda e 0 indica que o plano está à direita.

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