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).


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)


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.


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.



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.


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)


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


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

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 .



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

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)

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,"\","/
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.