2015年6月27日 星期六

程式壓縮技巧 1 ─ 常數、變數排列重整

http://4rdp.blogspot.com/2015/06/1.html?m=0

從本週起,有空將陸陸續續發表一些程式壓縮技巧,通常 PC 上執行的程式比較沒有大小限制的問題,不過這對單晶片程式設計很重要,尤其是低價或是簡易功能的商品,多是選用小型 MCU,ROM size <= 64 kB,以前曾設計過 4 kB 微波爐控制器還含有食譜的火力表,因此寸土寸金的程式空間要擠下那麼多功能,再再考驗程式設計師的智慧與功力。

言歸正傳,程式壓縮技巧百百種,只要掌握基本原則,編譯後程式碼自然縮減許多,本文先點出一個簡單但很容易忽略的方法,那就是把常數、變數位址重新整理調整

Arduino 例子如下:

2015年6月24日 星期三

訓練數學感 67 ─ 「妞妞」的機率有多高?

http://4rdp.blogspot.com/2015/06/67.html?m=0

最近新聞報導有國中生玩「妞妞」,一晚輸了 25 萬元的駭人新聞,因此網路查閱一下其玩法,它可以多人同玩,莊家以一對多,只要全輸給閒家恐慘賠到脫褲子。

54 張撲克牌,10、J、Q、K、王牌 (鬼牌) 算是10點,其它依點數算點。每人隨機發五張牌,只要組合出三張點數為 10 的倍數,就稱為「有妞」,另兩張點數和也是 10 的倍數,那就稱為「妞妞」。接下来在將其餘的两張的點數相加得出幾點,去掉十位數,只留個位數來進行比較。

兩者牌型相同時,比手牌中最大的一張牌 大王 > 小王 > K > Q > J > 10 ... > 2 > A,比花色則是 黑桃 > 紅心 > 方塊 > 梅花。

請計算下列牌組機率:
一、無妞:無法使用3張牌凑成 10 或 20 或 30 的整數,我们稱之為無妞。
二、妞一 ~ 妞六
三、妞七、妞八
四、妞九
五、妞妞
六、帶王妞妞
七、五花妞:五張牌都是 10、J、Q、K 的牌型。如:KKQJ10,KQJJ10
八、雙王妞妞


難度

2015年6月20日 星期六

合約橋牌 (Contract Bridge)

http://4rdp.blogspot.com/2015/06/contract-bridge.html?m=0

如果有人請我介紹什麼是合約橋牌?我會講一個故事,

上帝準備四個手提箱,將四種已知總額的不同貨幣隨機裝入手提箱中,四位玩家只能各取一只皮箱前往古董拍賣會場去競標花瓶,四人兩兩一隊合作,每個人只能看到自己皮箱裡的錢,彼此之間不能以言語、表情、手勢等暗號打 pass 給自己的同伴,一切只能將合約競叫的內容寫在競叫的記錄紙上。

牌局開始先叫牌,例如一紅心或一黑桃,找配合牌組當王牌,也就是尋找強勢貨幣,基本上,有錢的人會叫高價錢,沒錢的人則以 pass 回應,一個有價值的古董,應喊到應有的價格,而非低價取得,低價的分數是不高的。

橋牌也是有犧牲策略,明知合約屬於敵人的,硬是以高價奪標搶下古董,但是你與同伴的總金額不足以保全競標所獲取的古董,敵人就會用多餘的錢去買武器及地雷,在莊家運送古董回家的路上,也就是莊家主打時,防家於合法防禦下,極盡能事破壞,因此最佳的分數是合約儘可能喊高並且做到。

2015年6月17日 星期三

訓練數學感 66 ─ 龐氏騙局 (Ponzi scheme)

http://4rdp.blogspot.com/2015/06/66-ponzi-scheme.html?m=0

最近看到一篇報導有關『南寧騙局』,讓我想起龐氏騙局,也就是俗稱的老鼠會,在年輕的時候就曾遇過一例,打著知名人物旗號設立公司,並藉口銷售各式商品,但是以拉人當下線為主,銷售可以高額抽佣,因此商品價格通常是市價數倍以上,隱約記得規則是拉三個人當下線,就可以當上線主管,另外成為會員後,每出售一項商品,銷售員本身可以抽取 18% 佣金,上線第一層主管可以抽 6%,第二層抽 2%。

如果這組織只有單一商品銷售,商品銷售單價為 100 元,成本為 30 元,再扣除銷售抽佣,請問每項商品公司可以獲利多少?

加分題,假設台灣無論男女老少,所有的人都參加,請問這組織大約會有幾層?

難度 

2015年6月13日 星期六

ROSA 的 Profile 語法

http://4rdp.blogspot.com/2015/06/rosa-profile.html?m=0


續前文,下表指令僅能使用於 profile 之中,

LOOP id,n
id: 0~9        n: 0 不停    1~255 重複次數
NEXT id
執行下一個 LOOP
#remark
註解
:label
標籤位址,label:前九字元有效,
可以用數字當起頭,字母大小寫有別
GOTO label
跳至某標籤位址,label:前九字元有效
CALL label
呼叫某標籤位址,label:前九字元有效
RETURN
副程式執行結束,退回呼叫層,最多九層深度呼叫

範例參考,

2015年6月10日 星期三

訓練數學感 65 ─ 抵達終點的步數

http://4rdp.blogspot.com/2015/06/65.html?m=0

有左邊路徑圖,每個線段之間距離等距,剛走過的路,不能回頭走,遇到 B 及 E 叉路點,選擇下一路徑的機率是相等的,請問從 A 點出發,終點為 F 點,抵達終點的期望步數為多少?

2015年6月6日 星期六

關於 ROSA 的授權應用

http://4rdp.blogspot.com/2015/06/rosa.html?m=0

續前文,ROSA 與專利是無意間的產物,當初寫 ROSA 時,是想當機器人控制技術演示的產物,展現機器人多工同步無等待的概念,沒想過有專利技術在裡面,個人想如果應用工程師在寫機器人控制程式時,如果沒有那些 if 邏輯複雜的條件式,讓應用程式變好寫,就可以提高生產力,只是作業系統內部程式變複雜,因為這樣單純的進步想法,因而產生專利。

我不清楚各大學資工系,學習「作業系統」課程後,是否有要求同學實作程式寫作業系統?如果有是寫甚麼呢?現在個人推薦這個好題材「ROSA 機器人作業系統」,這個程式不大,約 1700 行,很適合給學習作業系統學生練功題,我已經在部落格上概述相關規格,後續設計規格還會一一貼文,因 ROSA 的功能規格則採公開方式發表,有興趣的人可以自己仿製,專題實作是一種很棒的技術學習的方法。

現在我對 ROSA 的態度是,規格免費開放給 Arduino 學習者,因此各級學校於教學領域可無償使用,才藝教學另談,而原始碼會陸續釋出,但禁止商業使用,想商業應用者需另談專利授權,這樣的策略,

2015年6月3日 星期三

訓練數學感 64 ─ 值日生

http://4rdp.blogspot.com/2015/06/64.html?m=0

最近在網路上看到一題排列組合蠻有趣,其中概念也值得討論,現在題目稍微修改,大家試看看。

有甲乙兩個人同在校外租屋,因共用同一套衛浴設備,因此決定以擲銅板方式安排值日生清掃,請問兩週中兩個人各值班七天的機率有多少?