ASCII飞机横幅


11

给定两个输入-其中一个非空打印的ASCII字符串(包括空间,不包括换行),两个不同的,你的选择(一致值的另一个是一个1 / 0l / rleft / right等) -输出一个ASCII技术飞机字符串的横幅,指向左侧或右侧。为了保持一致性,我将使用leftright整个挑战描述。

平面是|-DI>-/left)或\-<ID-|right)。由于标语是清晰的,因此它由输入字符串的字符组成,这些字符由空格分隔,从左到右(left)或从右到左(right),并用形状框包围

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

要么

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

注意必须有消息的开始/结束和之间有一个空格><字符。

例如,这是消息HAPPY BIRTHDAY!和方向left

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

这是消息PPCG和方向right。请注意,从横幅广告的这一面查看时,字母显示为“向后”:

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

规则

  • 前导或尾随的换行符或空格都是可选的,只要字符本身正确对齐即可。
  • 完整的程序或功能都是可以接受的。如果是函数,则可以返回输出而不是打印输出。
  • 如果可能,请提供一个在线测试环境的链接,以便其他人可以尝试您的代码!
  • 禁止出现标准漏洞
  • 这是因此所有常用的高尔夫规则都适用,并且最短的代码(以字节为单位)获胜。


2
JavaScript,4字节:eval-输入一个程序,该程序为left生成一个左面的平面,一个程序为右方生成一个右面的平面。
darrylyeo

Answers:


6

的JavaScript(ES6),141个 138字节

字符串和方向是通过currying语法输入的。
'/\n|-DI>-/---< '为左,'/\n|-DI<-\\---> '为右。

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


哈,对输出的一部分进行硬编码似乎是对漏洞的利用,但是基于所写的挑战似乎还不错。聪明!
里克·希区柯克

4
@RickHitchcock最终的漏洞是eval...仅提供左右函数源作为您选择的两个值。(我以为是元数据,但我找不到它。)
尼尔(Neil

1
@Neil 即使没有明确说明,eval“技巧”也将是精神上的漏洞。不过,这里的答案有点聪明。
AdmBorkBork

是的,我正在辩论是否要发表eval一个严肃的回答。应对此类未来挑战的解决方法可能是将输入作为字节计数的一部分。
darrylyeo

4

Perl 5、149 +1(-p)= 150字节

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

在线尝试!

两线输入。首先是消息。第二个是左数为0,右数为1。


4

V73,65字节

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

在线尝试!

不是最高分,而是因为其中几乎一半来自反转输出。

十六进制转储:

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                                       <

将字符串作为缓冲区的输入,将方向作为0左,1右方向作为命令行参数。



4

木炭44 40 39 35字节

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

在线尝试!链接是详细版本的代码。第一个输入是1,右边是0,左边是0,第二个是横幅字符串。编辑:通过使用 ReflectButterfly(:Up) as ReflectButterfly(:Down)保存的1个字节当前具有光标定位错误,但是我通过反转打印方向又保存了4个字节,现在我使用哪个都无所谓。38 34 32字节版本(如果允许镜像横幅):

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

在线尝试!链接是详细版本的代码。第一个输入是0代表右,1代表左。说明:

|-DI>-/

打印飞机。

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

打印框的上半部分(注意尾随空格)。

¿N↷⁴‖T

如果第二个输入非零,则反转打印方向,否则反射平面和方框。

⮌⪫η 

以额外的间距打印消息(注意尾随空格)。光标在盒子离飞机最远的一端,因此消息需要反转。

‖B↓

反思得到盒子的下半部分。


详细版本似乎有问题。
暴民埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer Deverbosifier最近被破坏了;TIO似乎尚未解决。
尼尔

2

果冻68 65字节

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

在线尝试!

右边取1,左边取0。

-3字节感谢@JonathanAllanGRR我总是忘了AB+做一样的B+@A


³K“|-DI>-/---< “ < ”j保存一个字节;LḤ‘”-x⁾//jṭ⁶x11¤Fµ,Ñj¢œs3U⁴¡YÑ⁴¡以相同的方式保存另外2个。
乔纳森·艾伦,

1

木炭,56字节

-8个字节,这要感谢完全人性化Outgolfer的Erik!

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

在线尝试!

解决dzaima提到的问题对字节数造成了不小的损失。36个字节(如果允许我们反转<和等字符)/


1
在python中' '.join(s)工作。可以在木炭中使用吗?
totalhuman

1
@totallyhuman也Join可以处理字符串。
暴民埃里克(Erik the Outgolfer)'17年

嗯,我认为这是完全人性化的建议。
暴民埃里克(Erik the Outgolfer)'17年

@EriktheOutgolfer哦,我误解了@totallyhuman的建议,称呼它为' '.joinCharcoal中的Python 。我相信你们两个。
notjagan

您已经破坏了ast处理器...
Neil



1

PHP,175字节

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

运行时-nr,第一个参数= 0面向右或1左,第二个参数= text
在线尝试


1

Perl 5,126个字节

124个字节的代码+ 2个-pl

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

在线尝试!


1

Corea,51个字节

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

在线尝试!

说明

该程序由几个部分组成:

1:初始化

"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:原始文字

以下文本输出到内容字段:


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

3:后同步码

"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字节

匿名VBE立即窗口函数,将输入作为[A1]范围内的字符串和范围内的int 进行输入,[B1]其中,1表示平面在左侧,0表示平面在右侧。

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

Google表格,210字节

匿名工作表函数,将输入输入作为[A1]中的字符串,并将int从[B1]中的整数作为字符串,其中1表示平面在左侧,0表示平面在右侧。

=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,"\","/
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.