重写下面代码段的最短方法是什么?
print @b > @d ? ( @d+=1 ;"S" ) : @b < @d ? ( @d -= 1; "N" ) : "";
print @a > @c ? ( @c+=1 ; "E") : @a < @c ? ( @c -= 1; "W" ) : "";
puts" "
第一行和第二行在结构上是相同的但具有不同的变量,因此如果对象要将字节数保持为最小,则某种宏扩展可能是有用的。 ruby是否支持任何宏扩展样式语法?像c或c ++这样的东西。
我发现这个fizzbuzz挑战的例子鼓舞了短代码https://www.ruby-forum.com/topic/99787,但并不完全理解语法。
编辑:对于Cary和其他人提供一个完整的上下文,我的程序的完整代码如下一些建议。:
@a,@b,@c,@d=gets.split(" ").collect{|x|x.to_i};
do
print"SN[t=@b<=>@d,1];
@d+=t print"EW"[t=@a<=>@c,1];
@c+=t
end
答案 0 :(得分:5)
欢迎来到Code Golf!这是一种可能性:
print ['',?S,?N][t=@b<=>@d]; @d+=t
puts ['',?E,?W][t=@a<=>@c]+' '; @c+=t
编辑从@Steve窃取想法。
答案 1 :(得分:2)
你可以试试这个......
print " SN"[@b<=>@d];@d+=@b<=>@d
puts " EW"[@a<=>@c];@c+=@a<=>@c
编辑从Cary窃取想法
print " SN"[t=@b<=>@d];@d+=t
puts " EW"[t=@a<=>@c];@c+=t