突然有一天看到Dcard有在徵暑假實習生,往下滑一滑居然看到要寫小作業,看了看題目覺得還蠻有趣的,就慢慢寫了幾題,裡面有前端也有後端,最後一題還是演算法,看都看不懂所以果斷放棄哈哈!
這是第二題,題目是在說有6種情況(類似撲克牌,因為題目沒有寫得很清楚,所以不知道有沒有花色大小問題,我下面是忽略花色大小,只計算點數)
- (同花順)Straight flush (five cards in sequence, all of the same suit)
- (鐵支)Four of a kind (four cards of one rank and any other (unmatched) card)
- (葫蘆)Full house (three matching cards of one rank and two matching cards of another rank)
- (同花)Flush (five cards are of the same suit, but not in sequence)
- (順子)Straight (five cards of sequential rank in at least two different suits)
- (單隻)any unmatched card
起手式
因為是小作業,順便練練手感,所以嘗試使用TDD,所以會先寫測試,再來寫Code。
一開始先建立mock data,再開始寫測試。
Mock Deck
|
|
就只是單純模擬牌型,所以應該不太有什麼需要解釋的。最後的DeckFactory,是用來隨機模擬牌組。
Test
預計會有一個牌組分析類別(DeckCompare)可以分析牌組或是比較大小。
然後分析每個牌組是否正確
|
|
開始動手做
我們先照著測試的內容把主程式exports出去!
這個題目可以運用之前的CoR Pattern來實作,這樣以後可隨時隨地更改、擴充Handler功能,也可以更改牌型大小的順序!
Base Handler
StraightFlush - 同花順
同時都是同樣花色並且是順子!
|
|
FourKind - 鐵支
4張相同數字搭配一張雜牌。
|
|
FullHouse - 葫蘆
3張相同配2張相同。
|
|
Flush - 同花
5張牌都同一個花色
|
|
Straight - 順子
所有牌都是有順序的!
(沒有檢查是不是同花順是因為前面第一個就handler就檢查過了)
|
|
Unmatch - 雜牌
這個就是最後一個了,前面都沒有的就是這個了!
|
|
DeckCompare
所有的handler都做好了,這樣就可以開始把它們串起來了。
|
|
結論
雖然可以直接用switch做出來,但是就像我之前在介紹CoR Pattern的時候說的一樣,假如要再新增功能或是修改順序,那個程式將會變得很難讀,也沒有彈性!
假如有任何錯誤歡迎提出來,因為還是牛刀小試,多多少少都有Bug!哈哈哈