2015-01-06 8 views
1
y=(1..10).map{|i| i.to_s==$*[0]?($*.shift;?0):?.} 
4.times{|i| puts (y.pop(4-i)* ' ').center 8 } 

输出:寻找澄清这个红宝石挑战赛结束 - 保龄球的Ascii艺术

. . . . 
. . . 
    . . 
    . 

什么是* ' '的括号

+2

您可以在PPCG上问我! ;) – britishtea

+0

我即将提到[这个答案](http://quia.cf/orange/pooxy4/nph-poxy.pl/es/20/http/codegolf.stackexchange.com/questions/42645/draw-a (我猜我刚刚做过),并要求@britishtea提供解释。但是,答案似乎是针对更普遍的情况。对于点图,它会简化很多。 –

+1

似乎没有人提到'$ *'是一个包含命令行参数的全局变量。 –

回答

1

第一线后的内部做,y是这样的字符串排列:

y=(1..10).map{|i| i.to_s==$*[0]?($*.shift;?0):?.} 
# => [".", ".", ".", ".", ".", ".", ".", ".", ".", "."] 

Array#*str是等效的到Array#join(str),它将字符串连接在一起。特别地,* ' '将数组中的字符串与空白字符串连接在一起:

y.pop(3) 
# => [".", ".", "."] 
y.pop(3) * ' ' 
# => ". . ."