这是一个万圣节相关的挑战。
正如你可能从我的上一个挑战中看到的,我非常喜欢我所说的ascii艺术动画,那不仅仅是画一个图案,而是画一个进步的模式。这一想法是在几年前我被要求通过在万圣节时随意飞过屏幕来激活(相当枯燥的)演讲后产生的。不用说,我很感激(我正在为此得到报酬),但这让我觉得,生命中的意义不仅仅是随机的蝙蝠。受此启发,我愿提出这项挑战。
让蝙蝠绕着月亮飞。
这是一只蝙蝠:
^o^这是月亮:
mmm
mmmmmmm
mmmmmmmmm
mmmmmmm
mmm 你必须展示蝙蝠飞行的每一个阶段(见输出)。
无
^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字节),但只是为了证明它是可以做到的。希望稍后再打高尔夫球)。
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代表,不管需要多少字节。这不是因为我对打高尔夫的语言有任何问题。如果您有任何疑问,请参阅我对元数据上有关此问题的回答。感谢和尊重所有以任何语言作出贡献的人。
发布于 2016-10-21 17:39:20
这是我第一次打高尔夫球,所以我相信还有很大的改进空间
-[-[-<]>>+<]>-<<+++[>+++++++<-]>>>+>>-[<-->-------]<->++++++++>+>+++++>+>+++++>+>+++++++>+>+++++>+>+++++>+>++++++++>+>+>+>>+++[<++++++>-]<+>+>-->+>+>+[<]>[[<+>>-[>]+[[<]>+[>]<+[<]>>>-]<<[->>+<<]>-]>-[->>>>+<<<<]>++]>>>[[-]<]>>>>[>]>>+>+++++++<<<<[<]+<+<<+[[<]++++[>++++<-]>[<+[>]>[-<+>]<[<]>>-]>[>]++++++++++[>]>>>-[<]<<[<]<]<[<]>->-<<<[-]++++++<+<+++[>++++++<-]+<++++[>++++++++<-]---<-[>+<-----]++<----[>+<----]--<-[>+<---]<-[>++<-----]++++<-[>+<---]++<-[>+<-------]---<----[>+<----]<--[>+<++++++]<+++++[>+++++<-]++++++>[[[>]>[>]>>[-<<+>>]<<[<]<[<]>-]>[>]>[>]+++++++[>+++++++++<-]>-[->+>+>+<<<]++++[>>++++<<-]>>+<<<<[<]>[.>]>>[.>]<[<]>[-]>[-]>[-]<+[--<---[->]<]<[->+>+>+<<<]<<[[->>+<<]<]<]在网上试试
为了可读性而打了一些:
-[-[-<]>>+<]>-<<+++[>+++++++<-]>>>+>>-[<-->-------]<->++++++++>+>+++++>+>+++++>+>+++++++>+>+++++>+>+++++>+>++++++++>+>+>+>>+++[<++++++>-]<+>+>-->+>+>+
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我想利用这样一个事实:在开头添加一个换行符,每个阶段可以双向读取,得到两个不同的阶段,但如果不同时生成完整的六个半阶段,我就找不到一个很好的方法来做到这一点。
发布于 2016-10-18 07:54:08
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计算出来的:当k从0到91计数时,(k/7, k%7)就会
(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。我们还确保在0和6行上只画三个空格--右边的蝙蝠槽会画出球棒,我们不能搞乱它的中间位置。
https://codegolf.stackexchange.com/questions/96541
复制相似问题