Banner de avión ASCII

11

Dados dos entradas - una de ellas una cadena no vacía imprimible ASCII (incluyendo el espacio, excluyendo nueva línea), el otro es uno de dos valores distintos, consistentes de su elección ( 1 / 0, l / r, left / right, etc.) - salida de un avión arte ASCII banner de la cadena, apuntando hacia la izquierda o hacia la derecha. Por coherencia, usaré lefty a lo rightlargo de esta descripción del desafío.

El plano es |-DI>-/( left) o \-<ID-|( right). Como el banner es claro, consiste en los caracteres de la cadena de entrada separados por espacios, ya sea de izquierda a derecha ( left) o de derecha a izquierda ( right), y rodeados por un cuadro de la forma

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

o

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

Nota Debe haber un espacio entre el inicio / final del mensaje y los >, <caracteres.

Por ejemplo, aquí está el mensaje HAPPY BIRTHDAY!y la dirección left:

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

Aquí está el mensaje PPCGy la dirección right. Tenga en cuenta que las letras aparecen "al revés" cuando se ven desde este lado del banner:

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

Reglas

  • Las nuevas líneas iniciales o finales o espacios en blanco son opcionales, siempre que los caracteres se alineen correctamente.
  • Un programa completo o una función son aceptables. Si es una función, puede devolver el resultado en lugar de imprimirlo.
  • Si es posible, incluya un enlace a un entorno de prueba en línea para que otras personas puedan probar su código.
  • Las lagunas estándar están prohibidas.
  • Este es el por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
AdmBorkBork
fuente
2
JavaScript, 4 bytes: eval- Ingrese un programa que genere un plano orientado a la izquierda para la izquierda, y un programa que genere un plano orientado a la derecha para la derecha.
darrylyeo

Respuestas:

6

JavaScript (ES6), 141 138 bytes

La cadena y la dirección se ingresan mediante la sintaxis de curry.
'/\n|-DI>-/---< 'por izquierda, '/\n|-DI<-\\---> 'por derecha.

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

Darrylyeo
fuente
Ja, codificar una sección de la salida parece una explotación de una escapatoria, pero parece estar bien en función del desafío tal como está escrito. ¡Inteligente!
Rick Hitchcock
44
@RickHitchcock La escapatoria definitiva es eval... solo proporcione las fuentes de función izquierda y derecha como sus dos valores de su elección. (Pensé que había un meta en esto, pero no puedo encontrarlo.)
Neil
1
@Neil El eval"truco" sería esta laguna en el espíritu, incluso si no se indica explícitamente. Sin embargo, esta respuesta aquí es un poco inteligente.
AdmBorkBork
Sí, estaba debatiendo si publicar evalcomo una respuesta seria . Una solución para desafíos futuros como este podría ser incluir entradas como parte del recuento de bytes.
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|-/-|-\\-|}

Pruébalo en línea!

Entrada de dos líneas. Primero es el mensaje. El segundo es 0 para la izquierda, 1 para la derecha.

Xcali
fuente
4

V , 73 , 65 bytes

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

Pruébalo en línea!

No es el mejor puntaje, pero eso se debe a que casi la mitad de esto proviene de revertir la salida.

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                                       <

Toma la cadena como entrada al búfer y la dirección como 0a la izquierda y 1a la derecha como argumentos de línea de comando.

James
fuente
4

05AB1E , 63 bytes

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

Pruébalo en línea!

Basado en errores que pueden corregirse en el futuro.

Erik el Outgolfer
fuente
@MagicOctopusUrn posiblemente
Erik the Outgolfer
@MagicOctopusUrn en realidad no, no funcionará así ...
Erik the Outgolfer
@MagicOctopusUrn Intenta cambiar el 0de la segunda línea a a 1.
Erik the Outgolfer
Ah, el espacio principal ...
Urna de pulpo mágico
4

Carbón , 44 40 39 35 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. La primera entrada es 1 para la derecha y 0 para la izquierda, la segunda es la cadena de banner. Editar: guardado 1 byte usando ReflectButterfly(:Up) comoReflectButterfly(:Down) actualmente tiene un error de posicionamiento del cursor, pero guardé otros 4 bytes invirtiendo la dirección de impresión, y ahora no importa cuál use. 38 34 versión de 32 bytes si se permitió duplicar el banner:

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

Pruébalo en línea! El enlace es a la versión detallada del código. La primera entrada es 0 para la derecha y 1 para la izquierda. Explicación:

|-DI>-/

Imprime el avión.

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

Imprima la mitad superior del cuadro (observe el espacio final).

¿N↷⁴‖T

Si la segunda entrada no es cero, invierta la dirección de impresión, de lo contrario, refleje el plano y el cuadro.

⮌⪫η 

Imprima el mensaje con espacio adicional (espacio final de la nota). El cursor está en el extremo más alejado del cuadro del plano, por lo que el mensaje debe invertirse.

‖B↓

Reflexiona para obtener la mitad inferior de la caja.

Neil
fuente
La versión detallada parece tener problemas.
Erik the Outgolfer
@EriktheOutgolfer Deverbosifier se rompió recientemente; TIO todavía no parece tener la solución.
Neil
2

Jalea , 68 65 bytes

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

Pruébalo en línea!

Toma 1 para la derecha, 0 para la izquierda.

-3 bytes gracias a @JonathanAllan ( grr que siempre olvido AB+hace lo mismo que B+@A)

fireflame241
fuente
³K“|-DI>-/---< “ < ”jguarda un byte; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡ahorra otros 2 de la misma manera.
Jonathan Allan
1

Carbón , 56 bytes

-8 bytes gracias a totalmente humano y Erik the Outgolfer!

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

Pruébalo en línea!

La solución de los casos que Dzaima mencionó tuvo un alto costo en el recuento de bytes. 36 bytes si se nos permite invertir caracteres como <y /.

notjagan
fuente
1
En python, ' '.join(s)funciona. ¿Seguramente eso se puede usar en carbón?
Totalmente humano
1
@totallyhuman también Joinfunciona en cadenas.
Erik the Outgolfer
Umm, creo que fue totalmente humano quien realmente sugirió eso.
Erik the Outgolfer
@EriktheOutgolfer Oh, interpreté mal la sugerencia de @ totallyhuman de hacer una llamada a Python ' '.joinen Charcoal. Les daré crédito a los dos.
notjagan
Has roto el procesador AST ...
Neil
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]

Pruébalo en línea!

1por derecha y 0por izquierda

TFeld
fuente
135 bytes (-1 byte) reemplazando 1-2*dcon -d|1(negar dxor 1).
Sr. Xcoder
Error tipográfico, no es xor, es bit a bit o, de hecho.
Sr. Xcoder
1
134 bytes con un pequeño truco:*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;

Ejecute con -nr, primer argumento = 0para mirar hacia la derecha o 1hacia la izquierda y segundo argumento = texto
o intente en línea .

Titus
fuente
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|-/-|-\\-|)

Pruébalo en línea!

Dom Hastings
fuente
1

Corea , 51 bytes

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

Pruébalo en línea!

Explicación

El programa se compone de algunas partes:

1: Inicialización

"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 sin formato

El siguiente texto se envía al campo de contenido:


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

Excel VBA, 198 Bytes

Función de ventana inmediata anónima VBE que toma la entrada como cadena desde [A1]e int desde el rango [B1]donde 1indica que el plano está a la izquierda e 0indica que el plano está a la derecha.

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

Hojas de cálculo de Google, 210 bytes

Función de hoja de trabajo anónima que toma la entrada de entrada como cadena desde [A1] e int desde el rango [B1] donde 1 indica que el plano está a la izquierda y 0 indica que el plano está a la derecha.

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