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.


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)


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.


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.



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.


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)


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


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

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 .


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!


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

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)

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,"\","/
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.