主要想學的原因是因為一些ProjectEuler的題目用Ruby
或是Perl
寫的時候,因為計算量太大,然後程式沒有辦法在一分鐘內跑完。
本來是想用之前學的C/C++
來寫的,不過看到最近golang
這麼熱,就來學一下啦!
先來記錄一些學習的資料
這些應該夠我看一段時間了:)
主要想學的原因是因為一些ProjectEuler的題目用Ruby
或是Perl
寫的時候,因為計算量太大,然後程式沒有辦法在一分鐘內跑完。
本來是想用之前學的C/C++
來寫的,不過看到最近golang
這麼熱,就來學一下啦!
先來記錄一些學習的資料
這些應該夠我看一段時間了:)
最近把用了一陣子的rvm
給反安裝掉了,然後換成了rbenv
來用用。會換過來的原因只是覺得rbenv
比較輕量,而不是覺得rvm
真的有什麼不好。
來記錄一下要怎麼轉換過來。
這個應該是最簡單的一步XD
1
|
|
然後再將你zsh
或bash
中的這一句拿掉。
1
|
|
最近在發現了一些Octopress的小技巧,就放上來跟大家一同分享。
大家在上傳文章前必做的兩個指令就是
1 2 |
|
不過它其實可以簡化成
1
|
|
就可以把兩個指令併成一個指令了!
題目介紹了六種數列,分別是三角形數、四角形數、五角形數、六角形數、七角形數和八角形數。現在問題要找出來六個數字,分別在這六個數列中,而且可以頭尾相連連成一圈。網頁上有舉一個長度為四的數列,如果不懂的話可以去看看。
這題好像出奇的簡單啊啊啊啊,我的做法是把這六種數列的頭兩位數字做成一個表,然後用後兩位數去查有沒有合的數字,然後就一直查下去,直到有六個數字分別來自六個數列並頭尾相連成一圈。
題目是這樣說的,有一個函數叫做rad
,它是去運算一個整數的所有的質因數的乘積。題目要問的就是請我們對1~100000
中的數字用rad的大小做排序(如果rad一樣大,就再用數字的大小去做排序)之後,問排序後第10000的數字是誰?
其實這題我們並不用去真的對數字去做排序,甚至也不用有個大質數表來做質因數分解:p
我的想法就是去推廣 Sieve of Eratosthenes,但是不是將數字給刪除,反倒是將它建成一個表,去記錄她被哪些質數給整除過,然後在用rad的數字去建一個表,將rad值一樣的數字存入,最後在去算第10000的數字是誰就好了:D
題目是這樣說的,如果一個數字從左到右的各個位數是不嚴格遞增的話,那我們就說這種數字叫做遞增數,像是134468
。反之,如果一個數字從左到右的各個位數是不嚴格遞減的話,那我們就說這種數字叫做遞減數,像是66420
。如果一個數字從左到右的各個位數字,不是屬於上述的兩種狀況之一的話,我們就稱它是彈性數(Bouncy Number)。
現在問題來了,想要請問小於10^100
中的數字中,有多少不是彈性數?
好吧,這題其實不是太難,如果妳的高中數學沒有忘的話:)
遞增數的個數是C(109, 9) - 1
,遞減數的個數是C(110, 10) - 101
,又遞增又遞減的有9 * 100
個,所以就只要寫個binomial的函數就可以了:D
題目是這樣說的,有兩個六面骰子,同一個骰子的六個面的數字都不相同(但是不同顆可以有相同的數字)
然後骰子上來的數字都是來自0~9
當中,問的是有幾種不同的骰子組合可以組出01, 04, 09, ..., 81
,也就是所有的小於一百的平方數。
不過有一點要注意的就是說,題目提到可以將6
和9
混用,所以會比較多組答案。
這題最直接的想法就是將所有的骰子的組合給拿出來檢驗,如果可以組出所有的平方數的話,就讓答案加一。
總之,實做上不難,讓我們直接來看程式碼吧!
題目是這樣說的,妳只要將一個數字的各位數字平方後相加, 然後妳就一直重複這樣做,要嘛會停在1,不然就會掉到一個由89開頭的迴圈中(是有沒有這麼神奇!?)。
問題就是要去問說,在一千萬以下,有多少數字會跑到89?
由於經過一次操作過後,數字和一定不會超過567,所以我們可以做一個表,然後去看在0到567中間的數字會停在1或者是89。之後在去檢查小於一千萬裡面的數,有多少會掉到會回到89的數裡面,就可以算出來答案了。
可是寫出來的程式跑的不是很快,讓人心情不是很好,所以就想了另一個演算法。
最近看到了這個影片,上面談到了一個遊戲叫做Ruby Warrior,說是可以藉由玩這個遊戲來學習Ruby。
玩遊戲學Ruby,聽起來挺不錯的,不過要怎麼開始?
首先當然要把遊戲先裝起來啊!!先把Ruby Warrior的gem給裝一下
1
|
|
再來執行rubywarrior
後,就可以新增帳號開始玩了!
這個其實是個很有名的問題,可是我直到最近才好好的(?)把這個題目給好好的做了一下。看來有人問問題還是比較有壓力快快的解出問題XD
這是一個由西洋棋來的問題,問說是否可以找到一種放置八個皇后的方法,使得八個皇后不會相互吃到對方,也就是說整個棋盤會被八個皇后給蓋住。
在軍中的時候,其實有跟資工的同梯談過這個問題,他說這種題目通常有兩種重要的取向,一個是最快解出一組解,另一個是最快解出所有的解。
不過因為我用的語言不是C/C++,感覺也不用跟別人爭什麼最快,就開開心心的解就好了。