Bannière d'avion ASCII

11

Compte tenu de deux entrées - l' un d'eux une chaîne de caractères ASCII imprimables non vide (y compris l' espace, à l' exclusion newline), l'autre étant l' une des deux valeurs distinctes, cohérentes de votre choix ( 1 / 0, l / r, left / right, etc.) - sortie un art ASCII avion bannière de la chaîne pointant vers la gauche ou la droite. Par souci de cohérence, je vais utiliser leftet righttout au long de cette description du défi.

L'avion est soit |-DI>-/( left) soit \-<ID-|( right). Comme la bannière est claire, elle se compose des caractères de la chaîne d'entrée séparés par des espaces, de gauche à droite ( left) ou de droite à gauche ( right), et entourés d'une boîte de la forme

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

ou

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

Remarque il doit y avoir un espace entre le début / fin du message et les >, <caractères.

Par exemple, voici le message HAPPY BIRTHDAY!et la direction left:

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

Voici le message PPCGet la direction right. Notez que les lettres apparaissent "à l'envers" lorsqu'elles sont vues de ce côté de la bannière:

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

Règles

  • Les sauts de ligne ou les espaces de début ou de fin sont tous facultatifs, tant que les caractères eux-mêmes s'alignent correctement.
  • Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
  • Si possible, veuillez inclure un lien vers un environnement de test en ligne afin que d'autres personnes puissent essayer votre code!
  • Les failles standard sont interdites.
  • Il s'agit de donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
AdmBorkBork
la source
1
Légèrement lié.
Dom Hastings
2
JavaScript, 4 octets: eval- Entrez un programme qui génère un plan orienté vers la gauche pour la gauche, et un programme qui génère un plan orienté vers la droite pour la droite.
darrylyeo

Réponses:

6

JavaScript (ES6), 141 138 octets

La chaîne et la direction sont entrées via la syntaxe de curry.
'/\n|-DI>-/---< 'pour gauche, '/\n|-DI<-\\---> 'pour droite.

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

darrylyeo
la source
Ha, coder en dur une section de la sortie semble être une exploitation d'une faille, mais cela semble bien en fonction du défi tel qu'il est écrit. Intelligent!
Rick Hitchcock
4
@RickHitchcock La faille ultime est eval... il suffit de fournir les sources de fonctions gauche et droite comme vos deux valeurs de votre choix. (Je pensais qu'il y avait une méta là-dessus mais je ne la trouve pas.)
Neil
1
@Neil Le eval"truc" serait cette faille dans l'esprit, même si elle n'est pas explicitement mentionnée. Cependant, cette réponse est plutôt intelligente.
AdmBorkBork
Ouais, je me demandais sieval je devais poster une réponse sérieuse . Une solution de contournement pour de futurs défis comme celui-ci pourrait être d'inclure des entrées dans le décompte d'octets.
darrylyeo
4

Perl 5 , 149 +1 (-p) = 150 octets

$d=<>;chomp;$_=($q=$"x11 .'/'.'-'x(1+2*length)."/\n").'|-DI>-/---< '.s/./$& /gr."<\n".$q=~y|\\/|/\\|r;if($d){y|<>|><|;$_=reverse;s/>/ >/;s|-/-|-\\-|}

Essayez-le en ligne!

Entrée deux lignes. Le premier est le message. Le deuxième est 0 pour la gauche, 1 pour la droite.

Xcali
la source
4

V , 73 , 65 octets

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

Essayez-le en ligne!

Pas le meilleur score, mais c'est parce que près de la moitié de cela vient de l'inversion de la sortie.

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                                       <

Prend la chaîne comme entrée dans le tampon et la direction comme 0pour gauche et 1pour droite comme arguments de ligne de commande.

James
la source
4

05AB1E , 63 octets

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

Essayez-le en ligne!

Basé sur des bogues qui pourraient être corrigés à l'avenir.

Erik le Outgolfer
la source
@MagicOctopusUrn peut
Erik the Outgolfer
@MagicOctopusUrn en fait non ça ne marchera pas comme ça ...
Erik the Outgolfer
@MagicOctopusUrn Essayez de changer le 0sur la deuxième ligne en a 1.
Erik the Outgolfer
Ah, l'espace leader ...
Urne de poulpe magique
4

Fusain , 44 40 39 35 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. La première entrée est 1 pour la droite et 0 pour la gauche, la seconde est la chaîne de bannière. Edit: enregistré 1 octet en utilisant ReflectButterfly(:Up) comme aReflectButterfly(:Down) actuellement un bug de positionnement du curseur, mais j'ai enregistré 4 octets supplémentaires en inversant la direction d'impression, et maintenant peu importe ce que j'utilise. 38 34 Version 32 octets si la mise en miroir de la bannière était autorisée:

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. La première entrée est 0 pour la droite et 1 pour la gauche. Explication:

|-DI>-/

Imprimez l'avion.

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

Imprimez la moitié supérieure de la boîte (notez l'espace de fin).

¿N↷⁴‖T

Si la deuxième entrée est différente de zéro, inversez le sens d'impression, sinon réfléchissez le plan et la boîte.

⮌⪫η 

Imprimez le message avec un espacement supplémentaire (notez l'espace de fin). Le curseur se trouve à l'extrémité de la boîte par rapport à l'avion, le message doit donc être inversé.

‖B↓

Réfléchissez pour obtenir la moitié inférieure de la boîte.

Neil
la source
La version verbeuse semble avoir des problèmes.
Erik the Outgolfer
@EriktheOutgolfer Deverbosifier a été cassé récemment; TIO ne semble pas encore avoir le correctif.
Neil
2

Gelée , 68 65 octets

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

Essayez-le en ligne!

Prend 1 pour la droite, 0 pour la gauche.

-3 octets grâce à @JonathanAllan ( grr j'oublie toujours AB+fait la même chose que B+@A)

fireflame241
la source
³K“|-DI>-/---< “ < ”jenregistre un octet; LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡enregistre 2 autres de la même manière.
Jonathan Allan
1

Fusain , 56 octets

-8 octets grâce à totalement humain et Erik l'Outgolfer!

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

Essayez-le en ligne!

La correction des cas mentionnés par dzaima a eu un impact considérable sur le nombre d'octets. 36 octets si nous sommes autorisés à inverser les caractères comme <et /.

notjagan
la source
1
En python, ça ' '.join(s)marche. Cela peut certainement être utilisé dans le charbon de bois?
2017 totalement humain à 15h29
1
@totallyhuman Joinfonctionne également sur les chaînes.
Erik the Outgolfer
Umm, je pense que c'est totalement humain qui a suggéré ça.
Erik the Outgolfer
@EriktheOutgolfer Oh, j'ai mal interprété la suggestion de @ totallyhuman comme faisant un appel à Python's ' '.joinin Charcoal. Je vous reconnais tous les deux.
notjagan
Vous avez cassé le processeur ast ...
Neil
1

SOGL V0.12 , 55 47 43 octets

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

Essayez-le ici!

0 pour gauche et 1 pour droite

dzaima
la source
1

Python 2 , 137 136 133 octets

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]

Essayez-le en ligne!

1pour droite et 0pour gauche

TFeld
la source
135 octets (-1 octet) en remplaçant 1-2*dpar -d|1(nier dxor 1).
M. Xcoder
Typo, ce n'est pas xor, c'est au niveau du bit ou, en fait.
M. Xcoder
1
134 octets avec un petit truc:*list('></\\<>')[d::2]
jferard
1

PHP, 175 octets

[,$d,$s]=$argv;$f=str_repeat("--",strlen($s));$r="\-$f\           
 ".join(" ",str_split("><"[$d].$s)).($d?" <---/->":" >---\-<")."ID-|
/-$f/           ";echo$d?strrev($r):$r;

Exécutez avec -nr, premier argument = 0pour faire face à droite ou 1à gauche et deuxième argument = texte
ou essayez-le en ligne .

Titus
la source
1

Perl 5 , 126 octets

Code de 124 octets + 2 pour -pl.

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

Essayez-le en ligne!

Dom Hastings
la source
1

Corea , 51 octets

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

Essayez-le en ligne!

Explication

Le programme est composé de quelques parties:

1: Initialisation

"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: texte brut

Le texte suivant est sorti dans le champ de contenu:


|-DI>-/---< V<

3: postambule

"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
la source
0

Excel VBA, 198 octets

Fonction de fenêtre immédiate VBE anonyme qui prend l'entrée sous forme de chaîne de [A1]et int de plage [B1]1indique que l'avion est à gauche et 0indique que l'avion est à droite.

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
la source
0

Google Sheets, 210 octets

Fonction de feuille de calcul anonyme qui prend l'entrée en entrée comme chaîne de [A1] et int de la plage [B1] où 1 indique que le plan est à gauche et 0 indique que le plan est à droite.

=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
la source