發表文章

目前顯示的是 5月, 2021的文章

基金日記: 熱錢大量湧入!

圖片
 去年Covid-19爆發以來, 全球央行大放水救市, 特別是美金多到不行! 以致於大量美金進入台灣, 導致今年3/3台幣兌美元滙率創下一年來的最高記錄27.5。原本以為這個趨勢會續繼下去, 沒想到3/8來一個大轉彎, 台幣兌美元連幾日反向走跌, 很快就來到28.3。當下, 我的反應是要搶快買些美元, 以免買不到便宜的美元了。但又想, 沒有什麼大事件改變全球局勢, 就決定先不買了。美元仍漲了一個月左右的時間, 現在想想, 當時也是可以買的, 只是不能握太久, 很快的就要見好就收。果然, 美元這波升值走勢持續不久, 四月初就開始見到跌勢。見之前貼文: 基金日記: 熱錢去而復返 玩長線的, 還是看跌美元才是, 今日來看: 摘自兆豐銀網站 上圖中的(1)應可視為因美國疫情控制良好導玫的美金回流美國現象, (2)則是台灣疫情破口失控造成的小量美元外逃現象。但不管如何, 今日的台幣兌美元滙率又來到了27.7。所以三月初時, 沒大買當時已小漲的美元, 現在看來是對的。反正又會跌回來, 沒什麼好急的。這也代表美元熱錢又回來台灣了, 看看今日台股: 摘自Yahoo股市網站(2021/05/28) 這不是大漲了嗎? 在台灣疫情破口失控的情況下, 熱錢仍進來台灣撐台股, 是看在台股本益比仍低, 還是另有原因呢?

想不開的老爸:到底是誰在念小學? Part II

圖片
 好! 這個數學老師又出了一道難題, 兒子又來求救了. 想不開的老爸又來挑戰, 題目: 這次容易一點, 3 x 3, 也就是數字必須是由1到9填入格子, 同樣要滿足各行各列加總等於其各自的行或列加總值。 這不是比前一題容易多了嗎?9!=362,880 排列數目少了太多,把之前的test3.c改一下,不用一秒就可以算出來了。沒錯,我改了一個test3_3x3.c的程式, 來算這個題目。果然0.04秒就算完了。 但老師的題目不只是如此,題目是自己設計一個題目(也就是自行指定各行列的加總值),而這個題目可以求出最多的答案(就是1到9的排列符合此行列加總值的數目最多)。 一開始,我們父子倆想到的方法就是填入可以倆倆交換的數對,例如: 這4個數字,2比1大1,而3比4小1,所以1,2互換,同時3,4互換。這樣第一行和第二行的加總值都不會改變,而且第一列和第二列的列加總也不會改變。以這種想法, 可以再加上5,6或7,8等,這樣就可以有多種換法,所以可以得到多個答案。但是到底有多少答案呢?當然,可以用test3_3x3.c來求解即可。把9個數字排好後,求出各列和各行的加總值,放到test3_3x3.c程式去: 如上圖中的A1, A2, ..., B3,共6個數字。 這樣就可以求解得這個題目的答案數目,問題是要找到最多答案的題目,我們要試很多種行列加總值,這樣是要試到何時,而且也不能確定最多答案是多少。我們排了一種情況,算出其行列加總值,由test3_3x3.c求得其答案數為18種。這是最多的答案數了嗎?不知道,所以又排了另一種情況,運算不錯,其答案數目為30種。但是不是有更多種答案數目的呢? 這時候,宊然想到一個方法: 即然,我們已經可以由程式排出1到9的所有排列,我們也就可以同時得到每一種排列的行列加總值啊!那就把行列加總值排序,同樣的行列加總值計數,這樣不就可以得到同樣的行列加總值可以得到的答案數目嗎!取最大的數目,就是正確的解答了! 因此,修改test3_3x3.c得到test3_3x3_max.c: 1. 取消印出進度 2. 不再比較行列加總值 3. 每個排列都輸出其行列加總值,如下程式 test3_3x3_mac 程式的輸出: ... 12,15,18,18,12,15 12,15,18,18,10,17 12,15,18,17,11,17 12,15,18,17,12

想不開的老爸:到底是誰在念小學?

圖片
 兒子小四,老師出了一個數學作業: 一個4 x 4的方格,要把1到16的數字都填上去,已經知道4個角落的數字如上圖,分別為1,12,16,10。1到16的數字都必須填上去,不能少也不能多。而且填好的數字必須滿足各行相加後等於其行的加總值,還有各列相加後等於其列的加總值。可以看得出來,這題目的用意是要讓孩子們在遊戲之中,可以多多練習加法運算。老師用心良苦啊! 可那不爭氣的孩子,算了一個晚上都算不出來,來找老爸求救。 可憐,好不容易才脫離可怕小學生涯的老爸,只好硬著頭皮來算算看。 其實這題目不難,就只是將1到16的排列(permutation)都列示出來,每一種排列的可能都如圖般的排好後,再去計算是否符合各行列加總後是否等於各自行列加總值的條件,若符合即為答案,如此即可。 不過,聰明的我們都想找捷徑,例如我們看到第一列,就會想:"已經知道2個數字了,而且該列加總值為31, 所以第一列剩下的2個數字加總必為31-12-1=18"。同樣的,第4列剩下的2個數字加總必為49-16-10=23。第一行剩下的2個數字加總必為43-1-16=26。第四行剩下的2個數字加總必為33-12-10=11。然後就很高興自己找到一個捷徑,第四行。因為其剩下的2個數字加總應為11。而且1和10已經用掉了,所以只剩下以下4種組合(8種排列): 2 9 3 8 4 7 5 6 只要用這種方式,把第一行和第一列及第四列的可能組合也都列示出來,就可以大大簡化需要嘗試的次數。可是人類還是記憶容量太小的動物,要這麼多種可能的記錄和檢查,實在很容易出錯的。 學過程式的老爸實在懶得算,想想還是交給電腦算比較輕鬆。 不過太久沒寫程式了,都忘得差不多了。就找個不太需要安裝的python直譯器來寫就好了吧!那麼第一步是先產生所有的排列吧,google一下python產生排列的寫法,很好,網路上都有: https://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list 看到了,其實用python寫不難,人家程式庫都已經放在那等你拿去用,如上圖試了一下產生1到3的排列,果然很容易就做出來了。好,那試一下產生1到16的所有排列了。結果,記憶體不夠!哇哇!電腦都卡住了,少少的這幾行簡直就變成電腦炸彈,