基本上,我試圖用Ruby解決第一個Project Euler問題。 Here是如果你想知道作爲參考的問題。我試圖從頭開始嘗試解決這個問題,但這並沒有太完美,所以我決定採取另一種方式:在網上找到別人的解決方案,分解它,向自己解釋並嘗試看看我是否可以構建我自己的獨特解決方案,如果我能弄清楚他們的代碼究竟在做什麼。根據我的經驗,這只是我學習的最佳方式。下面是我發現的,並決定撕開了解決方案:我對此代碼的工作原理有正確的理解嗎?
puts (1..1000).select{ |n| n % 3 == 0 || n % 5 == 0 }.reduce(:+)
我發現這個解決方案here。基本上,我想要的不是「告訴我問題的答案」,而是「閱讀我的筆記,並告訴我什麼是對的,什麼是錯的,併爲我逐步分解問題。」再一次,如果這不是一個適當的使用SO,我很抱歉!我不確定要問哪裏,如果這不是我應該問的地方,我會刪除我的問題。 :)下面是我的筆記上的代碼,我如何解釋自己:
它把數1-999(「範圍」)下
然後用「選擇」選擇它。花括號幾乎像css一樣使用,但更類似於Ruby中的「do」和「end」(「do」開始一個命令,「end」結束它)。 「do/end」和大括號之間的區別在於,大括號是可以放入一行而不是需要多行的命令。
- | | =管道定義了一個「塊」,而「n」代表數字/數字。它是一個包含變量的塊。這意味着| n |要求命令調出選定範圍的數字。
- 「n%3」尋找3的倍數; == 0查找答案(?)。重複五次。
- 然後「.reduce(:+)」通過將所有數字相加在一起來縮短命令。
我覺得我對它的理解有點信心,但如果有什麼是關閉(術語,一般概念,等等),我很樂意,如果你讓我知道,解釋!我真的只是試圖學習和把事情分開,向我自己解釋他們通常最能幫助我。
這正是這裏發生了什麼。你理解正確,我無法更好地解釋它。除了你的解釋之外,'.select'就像一個過濾器函數,它過濾了範圍的數組,並且裏面的內容是條件'n%3 == 0 || n%5 == 0'這是選擇可以被3或5整除的所有數字。我的建議是作爲初學者,嘗試以塊格式編寫大部分代碼,以便更好地理解它們在你面前的工作方式將所有東西縮短爲一行。 – lusketeer
'..'從頭到尾*包含*。 '......'*排除*最終值。 –
這兩件事都有幫助!謝謝! –