Keep Hacking :)

Life is complex, it has both real and imaginary parts.

從rvm轉換到rbenv

最近把用了一陣子的rvm給反安裝掉了,然後換成了rbenv來用用。會換過來的原因只是覺得rbenv比較輕量,而不是覺得rvm真的有什麼不好。

來記錄一下要怎麼轉換過來。

反安裝rvm

這個應該是最簡單的一步XD

1
$ rvm implode

然後再將你zshbash中的這一句拿掉。

1
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

一些Octopress的小技巧

最近在發現了一些Octopress的小技巧,就放上來跟大家一同分享。

上傳文章

大家在上傳文章前必做的兩個指令就是

1
2
rake generate
rake deploy

不過它其實可以簡化成

1
rake gen_deploy

就可以把兩個指令併成一個指令了!

Project Euler 61的解答

題目介紹了六種數列,分別是三角形數、四角形數、五角形數、六角形數、七角形數和八角形數。現在問題要找出來六個數字,分別在這六個數列中,而且可以頭尾相連連成一圈。網頁上有舉一個長度為四的數列,如果不懂的話可以去看看。

做表查一下

這題好像出奇的簡單啊啊啊啊,我的做法是把這六種數列的頭兩位數字做成一個表,然後用後兩位數去查有沒有合的數字,然後就一直查下去,直到有六個數字分別來自六個數列並頭尾相連成一圈。

Project Euler 124的解答

題目是這樣說的,有一個函數叫做rad,它是去運算一個整數的所有的質因數的乘積。題目要問的就是請我們對1~100000中的數字用rad的大小做排序(如果rad一樣大,就再用數字的大小去做排序)之後,問排序後第10000的數字是誰?

妳被迷惑了嗎?

其實這題我們並不用去真的對數字去做排序,甚至也不用有個大質數表來做質因數分解:p

我的想法就是去推廣 Sieve of Eratosthenes,但是不是將數字給刪除,反倒是將它建成一個表,去記錄她被哪些質數給整除過,然後在用rad的數字去建一個表,將rad值一樣的數字存入,最後在去算第10000的數字是誰就好了:D

Project Euler 113的解答

題目是這樣說的,如果一個數字從左到右的各個位數是不嚴格遞增的話,那我們就說這種數字叫做遞增數,像是134468。反之,如果一個數字從左到右的各個位數是不嚴格遞減的話,那我們就說這種數字叫做遞減數,像是66420。如果一個數字從左到右的各個位數字,不是屬於上述的兩種狀況之一的話,我們就稱它是彈性數(Bouncy Number)。

現在問題來了,想要請問小於10^100中的數字中,有多少不是彈性數?

高中排列組合

好吧,這題其實不是太難,如果妳的高中數學沒有忘的話:)

遞增數的個數是C(109, 9) - 1,遞減數的個數是C(110, 10) - 101,又遞增又遞減的有9 * 100個,所以就只要寫個binomial的函數就可以了:D

Project Euler 90的解答

題目是這樣說的,有兩個六面骰子,同一個骰子的六個面的數字都不相同(但是不同顆可以有相同的數字) 然後骰子上來的數字都是來自0~9當中,問的是有幾種不同的骰子組合可以組出01, 04, 09, ..., 81,也就是所有的小於一百的平方數。

不過有一點要注意的就是說,題目提到可以將69混用,所以會比較多組答案。

硬爆才是王道

這題最直接的想法就是將所有的骰子的組合給拿出來檢驗,如果可以組出所有的平方數的話,就讓答案加一。

總之,實做上不難,讓我們直接來看程式碼吧!

Project Euler 92的解答

題目是這樣說的,妳只要將一個數字的各位數字平方後相加, 然後妳就一直重複這樣做,要嘛會停在1,不然就會掉到一個由89開頭的迴圈中(是有沒有這麼神奇!?)。

問題就是要去問說,在一千萬以下,有多少數字會跑到89?

直觀的做法

由於經過一次操作過後,數字和一定不會超過567,所以我們可以做一個表,然後去看在0到567中間的數字會停在1或者是89。之後在去檢查小於一千萬裡面的數,有多少會掉到會回到89的數裡面,就可以算出來答案了。

可是寫出來的程式跑的不是很快,讓人心情不是很好,所以就想了另一個演算法。

玩Ruby Warrior學Ruby

最近看到了這個影片,上面談到了一個遊戲叫做Ruby Warrior,說是可以藉由玩這個遊戲來學習Ruby

玩遊戲學Ruby,聽起來挺不錯的,不過要怎麼開始?

開始玩吧!

首先當然要把遊戲先裝起來啊!!先把Ruby Warrior的gem給裝一下

1
gem install rubywarrior

再來執行rubywarrior後,就可以新增帳號開始玩了!

初解八皇后問題

這個其實是個很有名的問題,可是我直到最近才好好的(?)把這個題目給好好的做了一下。看來有人問問題還是比較有壓力快快的解出問題XD

從西洋棋說起

這是一個由西洋棋來的問題,問說是否可以找到一種放置八個皇后的方法,使得八個皇后不會相互吃到對方,也就是說整個棋盤會被八個皇后給蓋住。

在軍中的時候,其實有跟資工的同梯談過這個問題,他說這種題目通常有兩種重要的取向,一個是最快解出一組解,另一個是最快解出所有的解。

不過因為我用的語言不是C/C++,感覺也不用跟別人爭什麼最快,就開開心心的解就好了。