murmur (17)
2009-09-13 15:33
難得精神還不錯,趕快趁這機會做點正事...
別浪費掉了
2009-09-13 17:42
因為第一場忘記了,好吧來看看第三場 XD
不過真的開始時 Plumm 又不見了... =_=b
那我就只看個大概,不寫程式了喔...?
All Your Base
這題很簡單,只要一個規則就好:
先找到最小需要的進位數,比方說 ABC 就是三進位,
cats 就是四進位,11001001 就是二進位。
接著第一個位數不能是 0, 因此只好填 1,
第二個位數理所當然就填 0 了,後面依序遞增即可。
也就是越 significant 的填越小... 等等,這樣一定對嗎?
重複位數時也是嗎?大概啦,懶得寫程式了。
Bribe the Prisoners
這個看起來也很簡單?反正從中間切下去,
接下來越容易碰到邊緣。切下去之後分成兩段,
形成一個遞迴的狀況,兩邊再對切,也就是 1/2, 1/4, ...
以上面的 sample 為例,因為 14 靠 20/2 => 10 最近,
等等,這樣說起來的話,6 也同樣是最近的。
那麼差別就在後面切的狀況了 @@
切 14 => |20/2 - 14| => 4
切 6 => |13/2 - 6| => 0.5
切 3 => |5/2 - 3| => 0.5
如果從 6 開始的話:
切 6 => |20/2 - 6| => 4
切 14 => |14/2 - 14| => 7
切 3 => |5/2 - 3| => 0.5
第二刀的效率就比較差,所以可能不能直接切。
3 => 7, ...
6 => 4, 7, 0.5
14 => 4, 0.5, 0.5
應該就是算出綜合最低的那個,第一刀應該是最 significant?
因此 3 的第一刀是 7 就不考慮了。
比第二刀是 14 勝,也就不算第三刀?
2009-09-13 19:09
看了 ScalaCheck, 結果相容 scala 2.8 的 branch,
build 不起來,原因不明。又看到 sbt,
simple-build-tool, 看起來「似乎」是比 ant 簡單些。
當然更別提 maven 了,稍微試了一下就放棄了,
這樣瘋狂下載東西到 ~/.m2/repositories 有點...
還有 sbaz, 目標大概是像 gem/cabal/cpan 那樣吧?
不過 ScalaCheck 倒是灌不起來,有點問題...
雜七雜八試了半天,結論是,好像沒有完全直接可用的?
ant 和 maven 算是比較成熟,但是一個比一個肥大很討厭。
跟 java 扯上關係就會無故肥大...
好吧,慢慢等。希望是這樣,以後都能透過 sbaz 簡單下載,
用 sbt 取代 ant/maven, 測試就用 scalacheck.
目前決定還是先不寫 test 好了,搞半天不知道什麼能用。
要弄到 ant/maven 能用又要搞半天,很麻煩...
欸,想睡了,好精神還真的浪費了 XD
2009-09-13 21:13
還是試了一下 ScalaCheck, 不過不知道是有 bug 還是怎麼,
object Abc extends Properties 的方式不能用,
這樣管理上會變得比較困難些。不過無妨,反正也不是正式的測試。
用起來的感覺大概是這樣:
1. 建立產生任意 data 的 generator
2. implicit 定義 Arbitrary[T] 的 converter
3. 使用 forAll{...}.check 測試
這樣會任意產生 100 個 test case, 會有一個輸出訊息是:
+ OK, passed 100 tests.
這樣缺點就是一堆測試時根本看不出來什麼,需要另外的方法管理。
沒差,總之先看個感覺這樣。但這種測試法讓我有點困惑,
因為實際上我現在在測的東西,差不多就是用 table 做 lookup,
那我要測試這個,等於是要再寫一次 table, 這樣就有雞生蛋的問題,
到底對的是我的 test case, 還是實際上跑的程式?
如果直接 copy 實際上跑的程式,或是使用實際上使用的程式,
那不就等於是根本沒測試嗎?用另一種方式再建一個 table 的話,
這樣好像也就只是確保兩種實作有同樣的結果而已,談不上什麼測試吧?
不知道,也許是正好這個狀況不適合這種測試法吧?
假設用傳統的 assert, 其實不也一樣?只是一個是寫死的,
另一個是重新寫一個 table 做 lookup...
*
嘖,這叫什麼 murmur 啊?
2009-09-13 22:05
shutting down computer,
hopping there's another kind of tomorrow.
0 retries:
Post a Comment
Note: Only a member of this blog may post a comment.