什么是重写下面代码段的最短方法?
print @b > @d ? ( @d+=1 ;"S" ) : @b < @d ? ( @d -= 1; "N" ) : "";
print @a > @c ? ( @c+=1 ; "E") : @a < @c ? ( @c -= 1; "W" ) : "";
puts" "
Run Code Online (Sandbox Code Playgroud)
第一行和第二行在结构上是相同的但具有不同的变量,因此如果对象要将字节数保持为最小,则某种宏扩展可能是有用的.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
Run Code Online (Sandbox Code Playgroud)
欢迎来到Code Golf!这是一种可能性:
print ['',?S,?N][t=@b<=>@d]; @d+=t
puts ['',?E,?W][t=@a<=>@c]+' '; @c+=t
Run Code Online (Sandbox Code Playgroud)
编辑从@Steve窃取了一个想法.