2015-10-01 52 views
-5

重寫下面代碼段的最短可能的方式是什麼?寫這段紅寶石段的最短可能方式

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,但是沒有完全理解語法。

編輯:對於卡里別人給一個完整的上下文我的程序的完整代碼如下後幾個建議:

@a,@b,@c,@d=gets.split(" ").collect{|x|x.to_i}; 
do 
print"SN[[email protected]<=>@d,1]; 
@d+=t print"EW"[[email protected]<=>@c,1]; 
@c+=t 
end 
+2

我投票關閉這一問題作爲題外話,因爲它應該是對HTTP偷一個想法: //codegolf.stackexchange.com –

+0

@mu,我不太確定。 Code Golf通常允許任何語言的答案,但是OP特別需要Ruby。有沒有規定這樣的問題不能在SO上?此外,每個人都可以使用一點樂趣。 –

+2

@CarySwoveland我不希望在「真正的」軟件中看到類似這樣的代碼(如果我做了,我會到達我的發射棒),所以我不認爲這是正確的地方,我傾向於看到SO作爲更專業的一面的家。常見問題解答甚至說「爲實際的,詳細的問題獲得答案」,而且我沒有看到任何有關這類遊戲的實際情況。恥辱我不能告訴你脫下我的草坪:) –

回答

5

歡迎代碼高爾夫!這是一個可能性:

print ['',?S,?N][[email protected]<=>@d]; @d+=t 
puts ['',?E,?W][[email protected]<=>@c]+' '; @c+=t 

編輯從@Steve竊取一個想法。

+1

我看你是一位優秀的高爾夫球手 –

+0

我得到 「字符串不能被強制轉換爲Fixnum(TypeError)」 以上。我忘了提到原始代碼被封裝在do end循環之間。這會影響縮短代碼的寫入方式嗎? –

+1

金屬,我建議你編輯你的問題給出值或四個實例變量,以便我們可以比較答案。 –