首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使ASCII蝙蝠绕ASCII卫星飞行

使ASCII蝙蝠绕ASCII卫星飞行
EN

Code Golf用户
提问于 2016-10-17 16:00:56
回答 3查看 8.5K关注 0票数 34

背景

这是一个万圣节相关的挑战。

正如你可能从我的上一个挑战中看到的,我非常喜欢我所说的ascii艺术动画,那不仅仅是画一个图案,而是画一个进步的模式。这一想法是在几年前我被要求通过在万圣节时随意飞过屏幕来激活(相当枯燥的)演讲后产生的。不用说,我很感激(我正在为此得到报酬),但这让我觉得,生命中的意义不仅仅是随机的蝙蝠。受此启发,我愿提出这项挑战。

挑战

让蝙蝠绕着月亮飞。

这是一只蝙蝠:

代码语言:javascript
复制
^o^

这是月亮:

代码语言:javascript
复制
     mmm         
   mmmmmmm       
  mmmmmmmmm      
   mmmmmmm       
     mmm     

你必须展示蝙蝠飞行的每一个阶段(见输出)。

输入

输出

代码语言:javascript
复制
      ^o^         
      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm^o^      
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm         
    mmmmmmm^o^    
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm^o^   
    mmmmmmm       
      mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm^o^    
      mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm^o^      


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         
      ^o^         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
   ^o^mmm         


      mmm         
    mmmmmmm       
   mmmmmmmmm      
 ^o^mmmmmmm       
      mmm         


      mmm         
    mmmmmmm       
^o^mmmmmmmmm      
    mmmmmmm       
      mmm         


      mmm         
 ^o^mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


   ^o^mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm         


      ^o^         
      mmm         
    mmmmmmm       
   mmmmmmmmm      
    mmmmmmm       
      mmm   

规则

  • 不读取外部文件或网站
  • 您可以提交完整的程序或函数。
  • 额外的空格和/或换行符对我来说很好。
  • 标准漏洞与往常一样被禁止
  • 蝙蝠必须回到月球的顶端。
  • 请随时清除屏幕之间的框架,如果您希望,但这不是一个要求。如上面所示,输出很好。
  • 由于这是代码高尔夫,获胜者将是字节数最低的答案,尽管欢迎任何答案。

样本

引用实现完全取消Python 2 (620字节),但只是为了证明它是可以做到的。希望稍后再打高尔夫球)。

代码语言:javascript
复制
b='^o^'
m=['                     ',
'         mmm         ',
'       mmmmmmm       ',
'      mmmmmmmmm      ',
'       mmmmmmm       ',
'         mmm         ',
'                     ']
p=[(9,12),(12,15),(14,17),(15,18),(14,17),(12,15),(9,12),(6,9),(4,7),(3,6),(4,7),(6,9),(9,12)]
d=0
for z in range(7):
    x=map(str,m[z])
    c="".join(x[:p[z][0]]) + b + "".join(x[p[z][1]:])+"\n"
    print "\n".join(m[:z]) + "\n" + c+"\n".join(m[z+1:])
for z in range(6)[::-1]:
    x=map(str,m[z])
    c="".join(x[:p[z+6][0]]) + b + "".join(x[p[z+6][1]:])+"\n"
    print "\n".join(m[:z]) + "\n" + c+"\n".join(m[z+1:])

结果

虽然@Jonathan显然在字节计数方面赢得了Jelly,但我要将Brainfuck答案从@Oyarsa标记为可接受的答案,纯粹是因为我认为任何能够在如此疯狂的语言中做这样的事情的人都应该得到+15代表,不管需要多少字节。这不是因为我对打高尔夫的语言有任何问题。如果您有任何疑问,请参阅我对元数据上有关此问题的回答。感谢和尊重所有以任何语言作出贡献的人。

EN

回答 3

Code Golf用户

回答已采纳

发布于 2016-10-21 17:39:20

Brainfuck,690 Bytes

这是我第一次打高尔夫球,所以我相信还有很大的改进空间

代码语言:javascript
复制
-[-[-<]>>+<]>-<<+++[>+++++++<-]>>>+>>-[<-->-------]<->++++++++>+>+++++>+>+++++>+>+++++++>+>+++++>+>+++++>+>++++++++>+>+>+>>+++[<++++++>-]<+>+>-->+>+>+[<]>[[<+>>-[>]+[[<]>+[>]<+[<]>>>-]<<[->>+<<]>-]>-[->>>>+<<<<]>++]>>>[[-]<]>>>>[>]>>+>+++++++<<<<[<]+<+<<+[[<]++++[>++++<-]>[<+[>]>[-<+>]<[<]>>-]>[>]++++++++++[>]>>>-[<]<<[<]<]<[<]>->-<<<[-]++++++<+<+++[>++++++<-]+<++++[>++++++++<-]---<-[>+<-----]++<----[>+<----]--<-[>+<---]<-[>++<-----]++++<-[>+<---]++<-[>+<-------]---<----[>+<----]<--[>+<++++++]<+++++[>+++++<-]++++++>[[[>]>[>]>>[-<<+>>]<<[<]<[<]>-]>[>]>[>]+++++++[>+++++++++<-]>-[->+>+>+<<<]++++[>>++++<<-]>>+<<<<[<]>[.>]>>[.>]<[<]>[-]>[-]>[-]<+[--<---[->]<]<[->+>+>+<<<]<<[[->>+<<]<]<]

在网上试试

为了可读性而打了一些:

代码语言:javascript
复制
-[-[-<]>>+<]>-<<+++[>+++++++<-]>>>+>>-[<-->-------]<->++++++++>+>+++++>+>+++++>+>+++++++>+>+++++>+>+++++>+>++++++++>+>+>+>>+++[<++++++>-]<+>+>-->+>+>+
Sets counters for creation of the m's and spaces
[<]>[[<+>>-[>]+[[<]>+[>]<+[<]>>>-]<<[->>+<<]>-]>-[->>>>+<<<<]>++]
Adds the first counter plus two of the character at the second counter to the end of the
current set of cells removes the first two counters on the list then repeats until
it encounters a 254
>>>[[-]<]>>>>[>]>>+>+++++++<<<<[<]
Removes some excess cells then adds a 7 after the end of the set of cells
+<+<<+[[<]++++[>++++<-]>[<+[>]>[-<+>]<[<]>>-]>[>]++++++++++[>]>>>-[<]<<[<]<]
Adds a newline every 16 characters until 7 newlines are added
<[<]>->-<<<[-]++++++<+<+++[>++++++<-]+<++++[>++++++++<-]---<-[>+<-----]++<----[>+<----]--<-[>+<---]<-[>++<-----]++++<-[>+<---]++<-[>+<-------]---<----[>+<----]<--[>+<++++++]<+++++[>+++++<-]++++++
Removes some excess cells then sets indices for the locations of bats
>[[[>]>[>]>>[-<<+>>]<<[<]<[<]>-]>[>]>[>]+++++++[>+++++++++<-]>-[->+>+>+<<<]++++[>>++++<<-]>>+<<<<[<]>[.>]>>[.>]<[<]>[-]>[-]>[-]<+[--<---[->]<]<[->+>+>+<<<]<<[[->>+<<]<]<]
Loops through the indices replacing the spaces at each index with a bat then printing 
the set of cells then changing the bat back to spaces

我想利用这样一个事实:在开头添加一个换行符,每个阶段可以双向读取,得到两个不同的阶段,但如果不同时生成完整的六个半阶段,我就找不到一个很好的方法来做到这一点。

票数 9
EN

Code Golf用户

发布于 2016-10-18 07:54:08

Python 2,112个字节

代码语言:javascript
复制
b=['   ','^o^']
for k in range(91):r=k%7;print(b[k/7+r==12]*(r%6>0)+(r*(6-r)*8/5-5)*'m'+b[k/7%12==r]).center(15)

把照片打印出来。每一行有三个部分

  • 左边潜在的球棒
  • m's登月的一些作品
  • 右边潜在的蝙蝠

这些部件连接在一个大小为15的方框中,用于间隔。为了避免蝙蝠移动中心,丢失的蝙蝠是三个空格,相同的长度。对于在月球顶部或下面的蝙蝠,省略了左边的杆槽,并占据了右边的槽。

这里有91行: 13张图片中每一张都有7行图片.这些都是通过divmod计算出来的:当k091计数时,(k/7, k%7)就会

代码语言:javascript
复制
(0, 0)
(0, 1)
(0, 2)
(0, 3)
(0, 4)
(0, 5)
(0, 6)
(1, 0)
(1, 1)
 ....
(12, 5)
(12, 6)

将第一个值k/7作为图片,第二个值r=k%7作为图片中的行号,这首先由图片来计算,然后按每张图片中的行号计算,这两个值都是0索引的。

“月亮上的S”( m's )的数字随行号( r=k%7 )的变化而变化为“[0,3,7,9,7,3,0]”(排号)。这个公式没有索引,而是更短一些。一个方便的自由度是,0's可以是任何负值,因为当它乘以m时,仍然会给出空字符串。摆弄抛物线和地板分割会给出一个公式r*(6-r)*8/5-5

现在,我们将选择是画球棒还是在两边画空空间。数组b=[' ','^o^']包含这些选项。

图0(顶部)第0行,图1(右边)第1行,图6第6行(顶部)中的蝙蝠。因此,很容易检查它是否显示为行号和图片号是否相等,k/7==r。但我们也需要图片12来看上去像图片0,所以我们先取图片号模12。

左边是相似的。蝙蝠出现在左边的行中,r=5,4,3,2,1在图片7,8,9,10,11中。因此,我们检查行号和图片号是否等于12。我们还确保在06行上只画三个空格--右边的蝙蝠槽会画出球棒,我们不能搞乱它的中间位置。

票数 7
EN

Code Golf用户

发布于 2016-10-19 13:27:10

///,205个字节

代码语言:javascript
复制
/*/\/\///B/^o^*9/         
*M/mmm*N/MM*O/   *0/OO*n/

*1/O Nm0
*2/NM0
*3/0M9*4/1O2*7/13n*5/34/0B9570MB0
473O NmBO 
O2731ONMBO
75O NmBO 
3n510MB0n
5130B9n51OBM9n5 BNm0 
3n31B273 BNm0 
O27OBM9470B90M0O
410MO

在网上试试!

除非我不需要大量的尾随空间。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/96541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档