冬去春來 自然 山水一色 天成

冬去春來 自然 山水一色 天成
冬去春來 自然 。。。。。 山水一色 天成

2021/10/01

中秋佳節新活動

 以前中秋節被不肖廠商引導到烤肉後, 無數雞豬蛤蝦等海陸族群最怕這一天, 讓佳節蒙上血腥之污. 今年適逢中秋, 除回味以前寫的中秋愁一詩外, 也移植種下龍眼樹2棵, 以此為引, 希望中秋節成為團圓與新生的節日. 寫詩一首:

今年種下一對希望的小樹
明年長成二棵遮蔭的大樹
後年結出一堆幸福的果實
年年招來人們圓滿的停駐



猜數字遊戲的演算法

 終於完成猜數字遊戲的演算法!

藉由過程的撰寫, 把整個問題思考的邏輯及解題順序再整理, 找出了佔用演算時間的關鍵原因, 終於讓最後的10位數, 以平均花16.7秒猜11.2次找到答案. 而最佳成績也在完稿 https://www.facebook.com/shihkunfu/posts/4754282177924342
http://shih-fu.blogspot.com/2021/10/blog-post.html
前一次試玩出現, 10位數不到1秒, 猜7次猜中, 如圖示. 可以看出還有細節要調整.
演算法如下
1.預猜,
2.找出組成答案的字,
3.利用最多A的那組猜答做預排,
4.把答案中的其他字排入步驟3.所預排的字的所有空位, 但每排入下一位置前先檢查已排好的是否還符合所有已猜答的A值
5.猜答後,
5.1.若答對就停止,
5.2.若不對, 先看A值是否更大,
5.2.1.若更大, 回到步驟3. 開始新的預排,
5.2.2.若沒有, 回到步驟4. 調整出另一個可能的排列
5.2.2.1.若空位的各種可能排法都完成, 但尚未找到答案, 回到步驟3. 選出下一組可能的預排, 接著步驟4.與步驟5



猜數字遊戲

 多年前, 很多很多年以前, 寫了一個排7接龍的電腦撲克牌遊戲, 把自己的玩法教給了電腦. 擁有遊戲的人, 與其說是跟電腦玩, 其實是跟我玩. 自己以前也常跟自己玩, 贏的人當然通常是我自己. 看著電腦玩家一家接著一家自動順暢的出牌, 是很療癒的.

最近因為AI盛行, 想起了那個遊戲, 却遍尋不到, 但找到了1A2B猜數字遊戲. 試玩一下, 是由電腦亂數出題來讓自己猜, 也有快速運算解法協助, 當時用的解法是試誤法, 就是從小的數字逐次加1, 先檢查每個數字是否有重覆, 沒有重覆後, 再檢查與先前猜的數字的A/B數是否符合, 若符合就有可能是答案, 一直重覆直到找到正解.
這個方法很靠運氣, 若答案小, 很快就猜到. 當玩多位數時, 例如5位數, 就會玩很久, 等到答案出來都天暗了. 這樣玩, 沒有什麼樂趣, 要快速找出答案才有成就感.
這個試誤法沒有利用A/B的資訊, 浪費了很多不可能的數字的檢查, 例如 1234 若 A+B<3 的情況, 例如 2A 或 2B 或 1A1B, 接下來檢查 1235 , 1236 ...根本是浪費時間. 道理簡單易懂, 但怎麼教電腦做智慧檢查才是問題!
一般在猜數字, 就是從一組已猜測的中選出 A+B 個字, 與另一組組合後, 比對其他組是否合理, 所以就用這個方法來試. 流程, 也就是演算法, 如下:
1, 把 0 ~ 9 依某種方法猜過, 直到所有的 A, B 數加起與玩的位數一樣, 例如3位數 => 123 0A1B, 456 1A1B, 後面的 7/8/9/0 就不必猜了.
2. 從1組中選出數字, 123, 可以選出 1, 2, 3 三種情況
3. 把選出的數字做排列, 1有 1**, *1*, **1三種可能, 2與3也一樣
4. 檢查排列是否合理, 例如 456要選出2個字, 45, 排列有 45*, 4*5, 54*, *45, 5*4, *54六種可能, 但其中 45* 是不對的, 這有2A, 54*, *45, 5*4也不對, 0A, 所以只有 4*5, *54兩種可能. 同理1**是不對的.
5. 合併, *1*可以併出415/516等組合, **1可以併出461/651等, 2有 254/246/462/652, 3有354/346/435/536等組合, 這樣剩下12個可能
6.與其他組猜過的做驗證, 例如先猜了415 0A1B, 要猜516前比對 415有1A1B, 所以是不對的
7. 做完所有檢查都符合的組合就是下一個要猜的, 如246.
8. 如果沒有猜對, 對於步驟4所得到的結果先行再淘汰, 避免浪費後續合併/檢查的時間
這個方法大量減少了要算的數字, 以6位數為例, 301846, 在同一台電腦實際比較, 方法1用了30分24秒, 猜了6次, 而方法2 玩10次, 平均只用15.6秒, 猜6.6次. 如果倒霉電腦出到9*****, 就要1個半小時,方法1才會得到答案.
雖然有了重大改善, 但因增加了選字, 排列, 合併的工作, 對於少位數的5, 6個字, 或許可接受了, 但7以上的還是會等很久,例如 14分鐘, 甚至30分鐘, 當然跟運氣也有關.
檢查一下, 因為是用 EXCEL 寫的, 借用儲存格當候選字的記錄, 在把字寫入儲存格中會浪費很多時間, 加上7位數, 若前兩猜都 5B 情況下, 需要合併 14568 * 14568 次, 會有 212百萬個合併結果, 比方法1多了21倍多的檢查量, 難怪還要等很久. 雖然步驟8已經讓後續的合併大量減少了, 所以還需要再調整方法.
接下來方法3把焦點放在5位數以上, 只需預猜2次的情況. 方法2 把所有可能都排了出來, 方法3要改變作法. 方法如下. 以7位數, 3456789 2A2B, 0123456 5B為例, 可以知道 3456 內有2個(2+2+5-7=2), 因為重猜一次多了2個A或B. 這樣知道012都是有的, 排列方式只有6種. 再與 3456789 選出的2A2B排列組合做合併, 就可以大幅降低時間了. 同時, 不一一列出可能的組合再合併, 而是合併一個就檢查一個.
實測這方法7位數10次, 平均 5.5秒猜7.5次. 可以了嗎? 還得用8/9/10 位數確認. 8位數, 5次平均 47.2秒 猜9次, 還可以接受, 但9位數猜了11分鐘11秒, 還是需要再進化.
再檢查整個過程發現, 高位數的排列結果數量很多, 檢查時間當然多. 如何避免不必要的檢查呢? 就是A+B不足遊戲位數的不排. 例如8位數, 答案是 12345678 組成. 則01234567, 23456789就不要再排了, 一定不會答對.
於是, 方法4就是先確認所有的數字. 所以利用方法3的方法, 把兩組數字選出的字排列的工作移到最後, 這樣還可以節省一些時間, 但猜的次數可能會增加. 8位數大概省2/3, 9位數大概省1/2的時間.
實測方法4, 8位數10次平均花15.2秒 9次猜中, 大約是方法3的1/3時間而已. 9位數10次平均花 261秒 11.2次猜中.
平均4分20秒猜中9位數雖然快了很多, 但還是久, 倒霉時要等到8分鐘, 還是需要再精進. 從前面的幾個改進, 主要在減少合併的時間, 方法4雖又減少了排列的時間, 但對A數字的利用只在答案的檢查, 所以精進的方向就是拿A的資料來做排列的減少.
方法5 的想法是, 在排除沒有的數字過程中, 所猜的結果中, 以A的數值最大的做為基礎, 從中先選出A量個字, 這些字因為是A, 所以不必每個位置排列, 這樣就可減少排列了. 例如 答案由 123456789 組成, 在過程中 234567890 有 3A5B 是最多的A, 所以可用 234等先選3個固定數再組合156789的排列的方式來減少排列. 此例大約可以減少到剩1/9的量, 若是2A而已, 減少到剩 7/18的量. A的量越多越省時間.
實測方法5, 8位數10次平均花9.4秒 猜9.2次, 9位數10次平均花124.7秒猜10.3次. 10位數呢? 試了1次, 刻意找2A, A的位置較前的預猜, 花了25分34秒猜11次, 真的是運氣佔比高, 因為一次就會猜中所有的數字, A多就快, A少就慢; 所以不太敢再試, 約會較9位數多10倍的時間, 等9位數有進一步改善再試吧.
方法5只靠一次的A量後就進行排列猜測, 對其他或後續的A量只做檢查用, 應該還有改善方法. 只是演算法是如何, 還在思考中.
檢查選A字過程, 發現後來猜的A會減少, 但在選出A字時沒有先與猜的資訊檢查就進行排列, 結果一些不合的A字就多浪費了排列的時間, 經修正方法5, 9位數10次的平均變為79.6秒11次,又減少了1/3的時間.
測試10位數, 因為0A的機會很高, 所以預猜的部份先多做了幾次, 在找出最多A最優A的預猜後再開始遊戲的過程, 結果A為2時4次平均花298.5秒猜10次, A為3時2次平均28.5秒猜10.5次, A為4時4次平均16.5秒猜9.25次.
從以上10位數分析開發了方法6, 如果每一次的猜題所得到的A數較原來的高, 利用這個新猜結果重新開始, 應該可以大幅改善花用的時間. 測試9位數10次平均花65.5秒猜11.7次,10位數5次平均花241.8秒猜11次. 9位數有小幅改善, 10位數進到了5分鐘內.
在看程式猜字過程中發現
1. 9位數與10位數一開始猜中的A的數很低, 透過排列得到可能的答案後再猜測來取得較大A的時間要很久
2. 當再猜了一個答案, 例如 9******** 有0A10B, 因取字/排列都是利用遞迴寫法, 會一直做完所有檢查, 所以還會再把所有的 9********都檢查過, 而0A已經說9不會在第一的位置了, 所以這是浪費時間的地方
有了這個觀察, 就改成在排列下一個位置前先檢查已經排好的是否符合, 這樣, 當猜了一個答案後, 後續的排列就會檢查是否需要再往下一位置排下去, 還是要往上換不同的選字.
把有較多A就重開始的方法先停用, 只做排前先檢查, 10位數13次平均花50.2秒猜11.2次. 有了關鍵的改善. 但也看到一個現象, 個位數秒數, 甚至到1 秒, 找出答案的都是一開始是0A的; 當然秒數最多的那次也是一開始是0A. 而一開始是1A的有2次高於平均, 1次低於平均; 一開始是3A的只1次, 是低於平均.
把有較多A就重開始的方法再結合進來, 結果達到了極佳的成果, 9位數10次平均花6.9秒猜12次, 10位數10次平均花16.7秒猜11.2次.
以下是最佳成績的面, 10位數, 花不到1秒, 猜了7次就中.



2019/09/05

瘟 = 這

孫子回到鄉下,聽不慣國語的阿媽手把手的教孫子台語。
這是什麼,賊ˉ細殺密。第一句就教最常用的。
孫子努力的練習,阿媽就看電視。
新聞廣告都剛好在報導中國豬瘟,呼籲國人不要以身試法。
孫子邊練也邊看電視,就問阿媽,豬瘟台語怎麼說?
滴賊ˉ。阿媽不藏私,很多人不會唸的。
滴賊ˉ滴賊ˉ滴賊ˉ,孫子唸著唸著,A,怎麼跟'這'的台語同音?有關係嗎?
同音的很多,狗跟九不是一樣,不然你問獅副。
剛好路過的我又被攔下,原來是命名的問題。
當然有關。早期知識不發達,跟本不識瘟為何物,何況名稱,更別說醫治了。當發生瘟疫,人們不會表達,只好用實物加上代詞'這'來說明,{就是'這'},久了,'這'就成了瘟的名字了。
但現在癌症不是也不會醫嗎,怎不用'這'的名稱?
瘟是看不到,不好起名字,所以用'這'來表達。但癌是摸得到的,像瘤一樣的東西,所以就稱作瘤。這樣懂了嗎?
孫子點頭認同。阿媽說,獅副這麼厲害,知道這麼多,人又帥,改天介紹個女生給你認識。
謝過阿媽,'這'甘好?

無為而治

學課, 講到最有智慧的老子道德經, 來到第三章的無為而治. 剛好九合一完選, 選舉的結果成了討論的重點.
蔡總統的維持現狀是否符合無為而治? 同學問.
另一個同學, 可能悶很久了, 代老師說, 是無為沒錯, 但反而更糟, 完全不治.
維持現狀應該只是外交方面吧, 內政方面不是做了很多, 例如年金改革, 轉型正義, 不當黨產, 勞政工時. 這個更糟的情況應該來自這些半調子的有為吧! 有人不同意, 出來反駁.
看來是這樣沒錯! 有同學附和這個講法. 蔡總統日前反省說: "改革方向沒錯,但過程累積人民對政府的不滿,要深刻反省,此外,決策上她為了降低衝突,選擇模糊,沒有面對問題,不但沒有平息爭議,反而讓社會更對立,......,政治就是要給答案,她以後一定會調整。"
那外交上無為, 真的有幫助嗎? 一個同學把問題拉回到無為上,
當然也是沒有幫助! 不是三個邦交國離我們而去, WHO國際會議不能參加, 航空公司更改我國國名.....不做為, 就等著被打壓. 有同學憤恨不平的說.
這樣沒效的無為, 老子不就是隨便說說, 怎麼會有人信, 還一直傳到現在? 有同學開始懷疑課程的目的了.
要責難老子前, 讓我們先來看看老子是怎麼說的. 老師慌了.
******************
不尚賢,使民不爭;不貴難得之貨,使民不為盜;不現可欲,使民心不亂。
是以聖人之治,虛其心,實其腹,弱其志,強其骨。常使民無知無欲,使夫智者不敢為也。
為無為,則無不治。
******************
老子的無為是真的無為嗎? 老師問.
看來不是, 老子的無為是指做應該做的事, 虛其心, 實其腹, 弱其志, 強其骨. 有同學似乎有一點了解.
老子的無為是指不做錯的事, 尚賢, 貴難得之貨, 現可欲, 引導人民把力量用在對的事上. 另一個同學補充.
人民不追逐虛幻的名聲, 無用的奢華, 有心人就無法從中鼓動, 社會自然和諧, 民安則國泰. 又有同學附和.
原來老子的無為是指不要為自己的名利謀算, 要為人民的福址努力去做, 與人民站在同一邊. 有同學下了結論.
蔡英文書唸到那裡去了, 怎麼這樣簡單的幾行字, 讀成這樣, 我們還選他總統? 有同學諷刺的說.
所以我們不能斷章取義, 只看表面就評議, 而應該在了解整個過程, 內容後, 以不偏不倚的立場提出看法, 避免造成誤會與傷害. 老師說.
那對傷害我們的三個邦交國, 我們該如何做呢? 有同學問.
剛好鐘聲響起. 老師說, 這一題我們下回再詳細來討論, 不過原則上, 我們應該檢討自己才會有有效的對策, 請大家回去想想. 下課.
照例, 老師問我有什麼看法?
2016, 大家認為小英創造了一個歷史, 第一位台灣女總統. 其實他當時還有創造了幾個歷史, 第一位沒連任的台灣(女)總統. 我這樣預言.

挑菜

阿花趁空去市場,來到菜攤,很多婆媽正在撿菜,高麗菜崩盤,大家都在撿便宜。
阿花湊了上去,在看來都一樣的菜堆中不知如何下手。他左顧右盼,發現有一個先生一粒挑過一粒,不知在找什麼,但一定有玄機。
阿花移到這先生旁,問他是不是有什撇步,翻了那麼多,撿沒兩顆。
這先生支支吾吾,顯然怕阿花搶了他要找的貨。阿花看這先生不太想講,一時之間有點尷尬。突然,阿花問這先生會不會唱鳳飛花的小河。
小河,有這首歌嗎?這先生面有難色的回,不會。
怎麼可能,常常聽到的哦!阿花想是這先生故意的,就問撿菜的婆媽們。大家也都搖頭,一臉狐疑。一個媽媽說,你確定是小河,不是大河?顯然有點嘰歪。
有個阿婆提醒阿花,歌怎麼唱?唱幾句聽聽,也許大家會知道。
世上的人兒這樣多,你卻遇見我...阿花唱了起來。
這先生沒好氣的說,是巧合啦,講什麼小河,還臭奶呆哦?
沒有啦,我是想說,巧合遇到就是緣份,教一下不會損失什麼啦!阿花應著這先生。
好啦,看你這麼好笑,就教你啦。夏天高麗菜貴,商人就進口,但品質差,難吃。我發現這些難吃的有一個共同點,紮實又重又硬,一粒稱下來好幾百。有一次故意撿了一顆輕的,蓬鬆的,稱下來便宜很多,想不到吃起來好吃太多,這就是我的秘訣。
原來如此,謝謝哦!阿花謝謝這先生的教導。不過現在價格崩盤,好吃又便宜,價格算粒的,挑輕的不是吃虧了嗎?阿花有疑問。
這先生冷不防的拍了一下額頭說,對吼,現在的好吃,算粒的當然挑重的。老糊塗了我。換我謝謝你ㄋㄟ。
阿花隨便撿了兩粒,心想,來年夏天一定要來試試這秘招。

藏寶

富翁為他的收藏請了一個收藏師, 負責管理這些收藏品。隨著收藏品的增加,場地、設施不斷擴大規模。
為了讓收藏規模更多樣化,富翁除了更努力賺錢外,大部份時間都花在找精品、古董上。
該來的還是終於來了,富翁倒了下來,在醫院的安寧病房,找來了家屬交待好了後事,但念念不忘的是他的收藏。
大部份的東西,對富翁來說,都只有二面之緣,收購與上架的時候,然後就被埋在收藏館中了。現在富翁卻沒有機會再去看他最愛的收藏。
富翁找來了收藏師,請他聊聊這些收藏。隨著兩人回憶的推展,往事一幕一幕的彷彿昨日再現。收藏師精彩的評注每一件作品的精妙之處及作品間的高下,讓這段談話如龍敖九天、潛深四海。
富翁不禁感慨,到底誰才是真的富翁?自己彷彿成了收藏師的工作者,賺錢、購物,除了購買的一面之緣,未曾有一天真正欣賞這些藝品。而收藏師整天整理、欣賞、把玩這些收藏品,才是真正擁有了、享受了這些藝品。
聽了富翁的話,收藏師說,先生您誤解了,對於這世間的財物,我們都只是保管人,未曾擁有。您看似我的工作者,而我却是這些東西的奴隸,每天為它們清潔、照顧,投入了我們的一生,但對其他的人們,未曾起到任何的好處。在您身後,又勢必引起無盡的爭奪,流落各方。
富翁了解收藏師講的,當東西被據為己有時,擁有人就成了奴隸,世間的有錢人都是財物的保管人,只有當財物變成大家的,才能發揮最大的效用。
富翁把他的收藏成立了博物館,經由一套制度,收藏品持續成長,是全人類永續經營共享的財寶。