猎鹰重型战车


43

从以下四组中的任何一组中选择一组四个字节而不替换(即,不重复字节),并且不一定按任何特定顺序进行:

  1. 任何一个单字节编码的字符
  2. Unicode字符,范围为​​00–FF
  3. 有符号十进制整数,范围为−128–127
  4. 无符号十进制整数,范围为0–255

您选择的四个值(请说明它们是哪个)将是有效输入。您必须将每个值与以下ASCII图稿之一配对。

给定(通过任何方式)您的四个有效输入之一,以相应的ASCII艺术形式响应(以任何方式,甚至是字符串列表)。只要图像在一个连续的2D区域中,在所有面上都可以有多余的空白。

第一个字节:

     /\
    /  \
   |    |
   |    |
   |    |
   |____|
    \__/
    |  |
    |  |
    |  |
    |  |
 /\ |  | /\
/  \|  |/  \
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
|  ||  ||  |
AAAAAAAAAAAA

第二个字节:

  /\
 /  \
|    |
|    |
|    |
|____|
 \__/
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 |  |
 AAAA

第三字节:

  /\
 /  \
|    |
|    |
|    |
|____|
 \__/
 |  |
 |  |
 |  |
 |__|
  /\

第四个字节:

 db
_/\_
\__/
|  |
|  |
|  |
|__|
 /\

这个ASCII艺术Kolmogorov复杂性挑战有何新内容?

  1. 选择有效输入的能力为挑战提出了新的方面。输入显然太局限了,无法对整个结果进行编码,但可以携带足够的信息来引起注意。

  2. 多个可能的输出共享许多结构,因此在每个图像内以及图像之间重用代码或子图像是可行的。

  3. 有足够的重复性,即使是不善于应对此类挑战的语言,也有很大的机会能够使用智能代码,而不仅仅是广泛地对字符串进行硬编码。


2
db听起来像是阿斯顿·马丁!AFAIK这是特斯拉跑车。
Level River St

1
@LevelRiverSt Bowie,不是布朗!
亚当

是否允许前导/尾随空格,尤其是在左侧?
水平河圣

@LevelRiverSt谢谢。我忘记写了,尽管我确实想到了。
亚当

1
这真的是动画吗?
FantaC

Answers:


41

JavaScript(ES6),247个字节

RegPack的。期望0 ... 3作为输入。

n=>[...'BigFu!#?%$Rocket'].reduce((s,c)=>(x=s.split(c)).join(x.pop()),`oF#$!
FRFRFRF|??|$i$t$t$t$t%# t #
!t!BBB
uuceeeeeee%c%|?|
o#, db
_#_
iggg
|?|%#g|o|e%t%t%tkgttgttcu,o#%!
RRR|??|%ieF R|oo|
$
oo%
 ?__#/\\!/o\\uAAAAFo g
ti\\?/Bkkk`).split`,`[n]

在线尝试!


16
BigFu!#?%$Rocket?但是,这只是Falcon Heavy!
亚当

16
@Adám是的。但是BFR.reduce() == FalconHeavy:p
Arnauld

这是天才。一秒钟,我就像在等什么,有内置的javascript吗?!然后我开始感官……+ 1!
rodolphito

一如既往的令人印象深刻。

"FRFRFRF" = "Fu!#?%$RocketFu!#?%$RocketFu!#?%$RocketFu!#"对?我最喜欢这个答案,大声笑。
魔术章鱼缸

13

木炭,67字节

NθF⁼³θ«PAA↑↑¹⁸↗²‖MM⁴±χ»¿θ«↙²↓⁴M↗__¶\_¶»↓d/_¶ _\↓×⁴∨›²θ⁶¿‹¹θAA↑¶/_‖M

在线尝试!链接是详细版本的代码。输入数字3-0。说明:

Nθ

输入号码。

F⁼³θ«PAA↑↑¹⁸↗²‖MM⁴±χ»

如果是3,请拉升助推器的一半,然后镜像,然后移至火箭的尖端。

¿θ«↙²↓⁴M↗__¶\_¶»

如果不为0,请拉出前油箱的左半部分。

↓d/_¶ _\

但如果为3,则画左鼻锥的一半。

↓×⁴∨›²θ⁶

绘制火箭的左侧。

¿‹¹θAA↑¶/_‖M

画出火箭的适当底部,然后镜像完成。


Charcoal是为比赛创建的吗?
nielsbot

@nielsbot木炭已经7个月大了(请参阅提交日志)。
phyrfox

我是开玩笑的。但是我想这引发了一个问题:如果您创建一种语言来解决问题,是否会打高尔夫球?边界在哪里?
nielsbot

1
@nielsbot我认为这是标准漏洞之一
尼尔

7

干净292个 278 273 271 262 261字节

-5字节感谢Adám

import StdEnv,Text
e=[k,k,k,"|__|",m]
l=repeatn
o="\\__/"
n="/  \\"
m="/\\"
u="|    |"
s="AAAA"
k="|  |"
?z=[m,n,u,u,u,"|____|",o:z]

\i=[cjustify 12[c\\c<-:q]\\q<-[?[k,k,k,k,m+" "+k+" "+m,n+k+n,k+k+k:l 18(k+k+k)]++[s+s+s],?(l 24k++[s]),?e,["db","_/\\_",o:e]]!!i]

在线尝试!

一个lambda函数,按照OP中列出的顺序将Int值映射0..3到图像。


1
287
亚当

@Adám谢谢!我能够套用它,但是我只是将其进一步缩短后才看到它-尽管仍然节省了字节:)
OOurous

嗯,为什么会有两个片段?
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer第二个是lambda。第一个是它所依赖的代码。我不会将它们放在相同的代码段中,因为我无法将任务多行添加到代码段中。
世纪

5

Python 2中292个 290 284 282 281字节

i,j,d,e,x,y=input()," "," /\\ ","/  \\","|  |","\__/"
f=i<1
l,m,n,p,q,s=3*f*j,j*(i<3),d*f,e*f,x*f,j*(i>0)
print"\n".join(([l+j+d,l+j+e]+[l+"|    |"]*3+[l+"|____|",l+j+y],[" db\n_/\_",y])[i>2]+([l+j+x]*4+[n+s+x+n,p+s+x+p]+[q+s+x+q]*18+[s+"A"*(4,12)[f]],[m+x]*3+[m+"|__|",m+d])[i>1])

在线尝试!

将0到3的整数作为输入,并使用列表索引(1或0)构建每个输出。

-2表示不需要的括号。

-6通过删除仅使用一次的变量分配。

-2用于另一个一次性变量。

-1,@ Rod提示


1
npq变量是不必要的太(-2字节的每个)。" db"并且"_/\_"将与加盟"\n"后,你可以把两成" db\n_/\_",以节省一个字节。您可以(可能)将+y每个元素中的,移出列表(并删除co​​nst),例如(...)[i>2]+["\__/"]
Rod

@Rod感谢您的\ n提示。我想念那个。虽然不确定n,p和q。它们每两次使用一次,主火箭的每一侧用来定义是否需要助推器。Simailarly y在一种情况下需要换行,而在其他情况下则需要一些其他字符。老实说,可能可以从完整的重写中受益。随时从中获取任何想法,并使用它们发布您自己的答案。
ElPedro

5

红宝石234个 212 205字节

->n{y=*"| "
h=%w{/ /\ }+["|  "]*3+%w{|__ \\_}+y*3
t=%w{|_ /}
[h+["| ","/\\ | ","/  \\| ",*["|  || "]*18,?A*6],h+y*21<<?A*2,h+t,%w{d _/ \\_}+y*3+t][n].map{|a|a.rjust(6," ")+a.reverse.tr("\\\\/d","/\\\\b")}}

在线尝试!

取整数0-3。构建每个阶段的左半部分的数组,索引到其中,然后填充并反映每行。所有填充都具有相同的宽度,因此后面的阶段具有领先的空白。返回字符串数组。

-2字节:立即声明y为数组,而不需要*[y]稍后使用。

-5字节:替换x="\\"t=%w{_| \\}

-5字节:更少的解引用,更多的数组添加。

-1个字节:h+y*21+[?A*2]-> h+y*21<<?A*2在阶段1中。

-3个字节:规范允许省略*$/加入结果。

-4个字节:["b","\\_","_/"]-> %w{b \\_ _/}在阶段3中。

-2字节:%w也在头数组中使用表示法。

-7个字节:使用rjust而不是手动填充(这也意味着生成左侧并对其进行镜像,而不是从右侧开始)

取消高尔夫:

->n{
  y=*"| "                                            # Same as y=[" |"]
  h=%w{/ /\ }+["|  "]*3+%w{|__ \\_}+y*3              # Head for phases 0-2
  t=%w{|_ /}                                         # Tail for phases 2,3
  [
    h+["| ","/\\ | ","/  \\| ",*["|  || "]*18,?A*6], # Phase 0
    h+y*21<<?A*2,                                    # Phase 1
    h+t,                                             # Phase 2
    %w{d _/ \\_}+y*3+t                               # Phase 3
  ][n].map{|a|                                       # Choose phase
    a.rjust(6," ") +                                 # Pad left to width 6
    a.reverse.tr("\\\\/d","/\\\\b")                  # Add mirror (right side)
  }
}


2

红宝石209个 183字节

->n{z=[a=' /\\ ',b='/  \\']+['|    |']*3+%w{|____| \__/}+[c='|  |']*24+[?A*n]
n>4&&z[10..-n/6]=n>8?[c,a+c+a,b+c+b]+[c*3]*18:['|__|',a]
n==5&&z[0,6]=%w{db _/\_}
z.map{|i|i.center(12)}}

在线尝试!

所需的输入如下:

Centre core + upper stage + fairing: 4
As above + boosters : 12
Upper stage + fairing: 6
Upper stage without fairing 5

想法是将其centre core + upper stage + fairing作为默认值,并针对其他输出进行修改。

已评论

->n{
  #z = array of parts for centre core + upper stage + fairing, with n A's at the bottom
  z=[a=' /\\ ',b='/  \\']+['|    |']*3+%w{|____| \__/}+[c='|  |']*24+[?A*n]

  #if n not 4, z from element 10 to the last [10..-1] or last but one [10..-2] =
  n>4&&z[10..-n/6]=
    n>8?[c,a+c+a,b+c+b]+[c*3]*18:   #centre core + boosters#
    ['|__|',a]                      #upper stage engine
  n==5&&z[0,6]=%w{db _/\_}        #if n==5, replace first 6 elements with unfaired payload
  z.map{|i|i.center(12)}          #pad each element of array to 12 characters
}                                 #return array of strings (format allowed by question)

充分利用输入的第一个答案!非常好。
benj2240 '18

1

红色,333字节

f: func[g][t:{    }b:{ /\ }c:{/  \}d:{   |}e:{|}j:{\__/}k:{|  |}a:{AAAA}h:[1[t b]1[t c]3[d t e]1[d{____}e]1[t j]]z:[3[t k]1[t{|__|}]1[t b]]r: func[w][foreach[i v]w[loop i[print rejoin v]]]switch g[1 do[r h r[4[t k]1[b k b]1[c k c]18[k k k]]r[1[a a a]]]2 do[r h r[24[t k]]r[1[t a]]]3 do[r h r z]4 do[r[1[t{ db}]1[t{_/\_}]1[t j]]r z]]]

在线尝试!

取1-4作为输入

f: func [ g ] [
    t: {    }
    b: { /\ }
    c: {/  \}
    d: {   |}
    e: {|}
    j: {\__/}
    k: {|  |}
    a: {AAAA} 
    h: [1 [t b] 1 [t c] 3 [d t e] 1 [d {____} e ] 1 [t j]]
    z: [3 [t k] 1 [t {|__|}] 1 [t b]]
    r: func [ w ] [
        foreach [ i v ] w [
            loop i [print rejoin v]]]
    switch g [
        1 do [r h r [4 [t k] 1 [b k b] 1 [c k c] 18 [k k k]] r [1 [a a a]]]
        2 do [r h r [24 [t k]] r [1 [t a]]]
        3 do [r h r z]
        4 do [r [ 1 [t { db}] 1 [t {_/\_}] 1 [t j] ] r z]
    ]
]

Rebol,258个字节

我对Rebol的compress功能进行了实验,压缩了所有四个阶段的字符串,并在解压后打印了它的相应部分:

f: func[n][o:[[1 374][374 196][570 74][644 37]]
b: decompress debase{eJzjUgAB/RguMKWgAGbUgDg1OFnxQABmKcTEx+uDGTVQOZwM/RgwA2QTyBYQG2wbiAHDw5vjiAS4IEEOCwGoWmQKGsaQAIYE4eAhqeMFSCICGZKSxBWvHxPPBVYKDzkoAVamHwMAjkWmoKkCAAA=}
repeat i o/(n)/2[prin b/(i + o/(n)/1)]]

 f 3
  /\
 /  \
|    |
|    |
|    |
|____|
 \__/
 |  |
 |  |
 |  |
 |__|
  /\

1

Jstx,124 个字节

↕t▌ÇÇÉÇ~éÇÇÇÇÇÇÇÉΘçK↑ε♀▄ü╙Çz⌡"#ße┐é+\òEhZ█╣S♪[ƒuø>!f♪K▌;0♂9☺}ås══½☻eP▌◙&£óZß:&╝af$V≈-wº[√D(♪╘Pφó√ò▲¶>å⌡◘├^∟z◘αßj◙÷»|æ⌠┼øk&£b

说明

↕t▌ÇÇÉÇ~éÇÇÇÇÇÇÇÉΘçK↑ε♀▄ü╙Çz⌡"#ße┐é+\òEhZ█╣S♪[ƒuø>!f♪K▌;0♂9☺}ås══½☻eP▌◙&£óZß:&╝af$V≈-wº[√D(♪╘Pφó√ò▲¶>å⌡◘├^∟z◘αßj◙÷»|æ⌠┼ # Push literal      /\\n    /  \\n   |    |\n   |    |\n   |    |\n   |____|\n    \__/\n    |  |\n    |  |\n    |  |\n    |  |\n /\ |  | /\\n/  \|  |/  \\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\n|  ||  ||  |\nAAAAAAAAAAAA0\n  /\\n /  \\n|    |\n|    |\n|    |\n|____|\n \__/\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n |  |\n AAAA0\n  /\\n /  \\n|    |\n|    |\n|    |\n|____|\n \__/\n |  |\n |  |\n |  |\n |__|\n  /\0\n db\n_/\_\n\__/\n|  |\n|  |\n|  |\n|__|\n /\
ø                                                                                                                       # Push literal 0
k                                                                                                                       # Push a list of strings obtained by splitting the second stack value with the first stack value.
&                                                                                                                       # Swap the top two stack values.
£b                                                                                                                      # Push the value in the list of the second stack value at the index of the first stack value.

在线尝试!


0

C(clang)421408字节

r,d,i;f(t){char *s="    ",*e="\n",*l[]={" /\\ ","/  \\","|    |","|____|","\\__/","|  |","AAAA","|__|"," /\\ ","_/\\_","\n"," db","|  ||  ||  |"},*p[]={"VABU3C1DVE8FFF1G","VABU3C1DVE4F1RYAFAKBFBKZ9MM1YGGG","VABU3C1DVE3F1HI","VLJE3F1HI"},*a="",*b,*c=e,*q=p[t];for(r=1;d=*q++;r=(d/48&&57/d)?d-48:r,c=(d/89&&90/d)?e+90-d:c,a=(d/82&&86/d)?s+86-d:a)if(d/65&&77/d)for(b=l[d-65],i=0;i<r;i++)printf("%s%s%s",a,b,c);}

在线尝试!


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.