2014年11月18日 星期二

[閒聊] 12 顆球 只磅三次 找到哪一顆球 不一樣的問題


12 顆球 只磅三次 找到哪一顆球 不一樣的問題

我自己的解法  肯定不是正解 因為要靠運氣

先六六分 比輕重!

抓重的或輕的 對半 在比 就可以得知 那顆假球的輕重

假設 拿重的那組 對半比 一樣的情況 得知 那顆假球是輕的 而且在另外 六顆中!

如果一半輕 一半重 那就可以知道 那顆假球 是重的 在比較重的那三顆中!

假設拿輕的那組 假球的輕重就是反過來

到此 輕重 就確定了! 問題只是在 六顆 或 三顆

知道輕重 三顆 只要一次! 剛好滿足

六顆要兩次, 所以我的答案是 無解 除非運氣好 否則 確定一定要四次.

所以我覺得這題是無解的

後來發現 上網找解答 了解 444 的分法

有問題的就是在不同的情況

基本上我的理解然後把三個四堆 分成 ab cd ef 八個部分(原文試分成 a1 a2...b1 b2.. c1 c2.. 這樣我改成兩球一單位 變成 abcdef)

假設 ab 是重的那堆
         cd 是輕的那堆
         ef  理論上是正常的那堆!

         ac 和 be 這樣下去比 

        如果一樣問題就是在 d 
        如果 ac 比較輕  問題在 c
        如果 ac 比較重  問題在 a

不知道為啥完全 剔除 b  會出錯的可能性

(444 的解法 出處 https://www.ptt.cc/bbs/Inference/M.1212618886.A.EDF.html)

但是問題球也可能出現在 b 所以這個解法 我是覺得有問題

至少 要跟我一樣 四次 我才敢確定


然後我 提出我覺得有可能解法 不過但是感覺是很特殊的案例

所以我覺得可能有問題

不過我還找不到問題

所以就當是正解 至少他提出的案例 是無可反駁得

https://www.ptt.cc/bbs/logic/M.1249003431.A.616.html

基本概念如下
解法一: 將十二顆球編號 ABCD EFGH IJKL 不論各次結果如何,如下三次秤,記其結果: (1) ABCD 與 EFGH 秤 (2) AEJL 與 BDFI 秤 (3) CGIL 與 ADEK 秤

紀錄 大小平手 之後 去推論 哪一顆球 是有問題的詳細的推論過程請到網址去看

不過我私心認為 這應該是特殊案例.


另外一題 五十隻狗 找 病狗的問題

我覺得資訊太少 到底狗主人一天能確認多少隻狗?

正常狗 會不會死亡? 如果會 那減少的群 就不能當作是病狗

所以這個問題 我覺得很怪

我只能確定 不只一隻病狗 < 50隻病狗 (假設有病狗的情況下)

然後網上其他的說法 像是三隻病狗 或是 四隻病狗的

我都覺得很奇怪

假設 第一天 就槍斃 我能確定只有一隻 (因為沒有 所以估計是兩群)

第二天的話 應該是兩群 而且兩群都沒減少 所以第二天狗沒有減少 所以無法鑑別 病狗

第三天 可能有一群減少了 所以假設 減少的那群是病死 所以同樣的全是病狗 所以一堆槍聲

詳細隻數 等等的我就無法推論了

詳細問題可以到
http://www.mathland.idv.tw/talk-over/memo.asp?srcid=11330&bname=ASP
這去看


2014年6月17日 星期二

[GIT]人生的第一次的 Git 經驗

終於  GIT 算是正式開始使用了~

雖然相關的帳號 早就申請了 但是今天才正式開始使用!

介紹一下我看的教學

http://ihower.tw/git/

寫得很詳細!

裡面有教學是基本的 CMD 的 git 工具 msysgit

然後有小烏龜板的 git UI介面軟體 tortoisegit

這樣我就會用了 !

不過還沒公開放在網路上就是~

等熟一點後我就會公開了~

總之先留下一些東西 以後要再用也簡單點

2014年5月23日 星期五

[AS][AIR] Android App 取的前置鏡頭

因為自己要弄一個 簡單的 APP demo  時一直拿不到前置鏡頭

所以花了將近兩個小時再找資料..後來在一次回去翻 ActionScript® 3.0 參考

才發現有一個 position 的屬性

那問題就解決了!

下面是 as 的程式碼

        public function tryGetFrontCamera():Camera {
            var numCameras:uint = (Camera.isSupported) ? Camera.names.length : 0;
           
            trace(numCameras);
            for (var i:uint = 0; i < numCameras; i++) {
                var cam:Camera = Camera.getCamera(String(i));
                if (cam && cam.position == CameraPosition.FRONT) {
                    return cam;
                }
            }
            return null;
        }


 application.xml 中需要新增
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-feature android:name="android.hardware.camera.front" android:required="true" />
        <uses-feature android:name="android.hardware.camera" android:required="false" />


這樣就可以取的手機上的前置鏡頭了!

PS: 題外話 !
我一直以為前置是螢幕後面的那個!
跟螢幕同一邊的才是後置...沒想到居然是相反的!
話說預設是 "螢幕後面" 的鏡頭 !!

記錄一下一個搞了很久的東西

[AS] Starling 的相關優化!

以前只作了基本 可以動之後 就很久沒碰了!

在找資料時看到 git  上有人優化的版本!

https://github.com/zmLiu/StarlingFeathers

稍稍關心一下 是作了哪些部分 ?

1. enterFrame 的統一管理! 關閉!

2. 傳輸數據包的改良!

3. 跳過 ADD_TO_STAGE,REMOVE_FROME_STAGE事件, 的添加方式!?!!

4. 主動 跳帧 策略!


2014年5月16日 星期五

[AS][starling] Starling 的性能優化


主要是要記錄這篇文章

http://wiki.starling-framework.org/manual/performance_optimization

 加上一些心得!

starling 相關的的優化是不是 有用 我沒有試過 !

不過裡面寫的 AS 的優化 很多是有用的

像是迴圈的 幾個部分 我都測試過 都有幫助 !

不過主要也是要記錄這篇文章!!!

2014年5月12日 星期一

[as] 原來 (Flash Professional CS6 及更新版本) 不支援放映檔

指定 SWC 檔案與放映檔的發佈設定

SWC 檔案是用來散發組件。SWC 檔案包含編譯後的影片片段、組件的 ActionScript 類別檔案以及其他用於描述組件的檔案。
放映檔是一種同時包含已發佈 SWF 和 Flash Player 的 Flash 檔案。放映檔可以像一般應用程式一樣播放,不需要網頁瀏覽器、Flash Player 外掛程式或 Adobe AIR。
  • 若要發佈 SWC 檔案,請從「發佈設定」對話方塊的左欄選取 SWC,然後按一下「發佈」。
  • 若要發佈 Windows 放映檔,請從左欄選取 Win 放映檔,然後按一下「發佈」。
  • 若要發佈 Macintosh 放映檔,請從左欄選取 Mac 放映檔,然後按一下「發佈」。
若要使用與原始 FLA 檔案不同的檔案名稱來儲存 SWC 檔案或放映檔,請輸入輸出檔案的名稱。
注意:
(Flash Professional CS6 及更新版本) 不支援放映檔。

來源網址
https://helpx.adobe.com/tw/flash/using/publish-settings-cs5-5.html

2014年5月6日 星期二

[AS] 仿 Tales of Link 的操作控制器!

我是仿這個遊戲的戰鬥開發的





建立了一個簡單的 "操作組件" 的 原型 !

不過還是有許多地方需要優化 ! 像是動畫效果 畫線的準確! 起點要畫圓 等等

因為是原形就隨意帶過 XD

相關重點細節 我也預留好一些後路可以走 !

基本上分成三個部分 !

1. 創造人物
2. 畫線控制
3. 角色進出場效果

戰鬥動畫 就不在這個 "操作組件" 中了 !

至於畫線時的 hit 乘倍 攻擊力顯示 等等等 的部分

都可以透過外掛模組掛載進去! 就能相對應產生效果!

或者應用特殊的畫線規則!(能斜角? 不能斜角?) 

相關的部分我也預留好接口

特殊連線必殺技 (橫排一直線連線,Z字型連線 等等的特殊連線)

等等等的部分!

如果要再細分 就是我上面說的三個部分 !

在拆分 不過暫時就這樣吧 XD



2014年5月5日 星期一

[AS][推廣文] 含 UI 的 Unit Test


偷偷的推廣一下 單元測試 ( Unit Test)

先看一個範例

簡單的 Panel 的 Unit Test 範例

其中 我有故意讓一項出錯 !

來證實 unit test 是有用的~~

單元測試 對我來說 就是用 程式來說話 !

利用 "測試程式" 來告訴下一位 維護者 使用者 測試者 繼承者 !

這個程式

有什麼限制 ?

正常狀況會是怎樣 ?

異常狀況會是怎樣 ?

邊界情況會是怎樣 ?

簡單的講 看完了 "測試程式" 就知道這個 該怎樣使用!

或是有甚麼不能用的 ! 錯誤時會拋出哪種錯誤 ! 有哪些特別的地方!

或是更簡單一點的!

某人 修改這個 程式 之後 ! 是不是會造成一些問題 ?

那只要跑一次測試程式 ! 就可以看到 是不是和預期一樣 !

如果發生了以前沒發的問題 !

可以先寫測試程式 保證問題的重現 !

然後 在修正程式 跑測試程式 看會不會 出現問題 !

不管是舊的測試也好 新的測試也好 ! 都可以一次驗證!

如今我將 UI 方面的測試也整合進 JenKins 中了~~(下圖就是跑最上面的範例的喔!)


證明了就算 setTimeout 等等 對 UI 的模擬測試 !

也是可以在 JenKins 中跑的 !

下面是我對上面的範例的一些說明!

 簡單的講這個面板分成兩個部分!

一個是 面板的控制 (Mediator)

一個是 面板 UI 的動作 (MyPanel)

 為了 UI 可以抽換 控制效果不會改變 ! (按下按鈕後 是否鎖定不能連按....等等的部分)

所以我將 UI 的部分 完整隔離在 Mediator 的外部!

也為了可以分開測試 !

一開始初始化面板的部分如下






 所以測試的函式也分成兩個!

一個測試 控制 邏輯

一個測試面板的動作控制

下面就是 控制邏輯 的測試類別~

啟動和清除

在測試程式中 啟動時 可以灌入專門 的 虛擬面板,

用來測試 監聽 邏輯控制有沒有按照我希望的運行

測試結束後 把面板 虛擬面板 一些相關的測試函數 通通清除



這邊可以看到部分的 操作控制! 因為 testPanel 是我自己做出來測試 控制邏輯的

所以我很清楚 也開出API 可以取的裡面的物件 等等等的東西

好用來做監聽 測試 !

下面是對 虛擬面板 連續發送滑鼠事件 來測試 是否可以連續點擊


另外一個 ReDo 的部分 就是測試是否 可以隔一段時間後 再作 點擊動作!

但是在期間內 卻 無法作  "點擊動作" 的測試 !

那這是測試 500 毫秒邊界的測試 !

這個 500 毫秒也就是特殊商業邏輯 特殊控制 等等等的部分!

那只要看了這個 邊界測試 就知道  500 毫秒內 這個控制邏輯 是不接受 任何點擊動作的

一定要等 500 毫秒後 才接受控制! (雖然這個可以在 UI 層面作掉, 但是我還是整合進去測試)


  下面來看 UI 面板的測試!


因為是 被控制的面板 ! 所以不需要依賴 控制邏輯

也不必知道 或是 了解是否有控制單元的存在

所以不用 制作出  虛擬控制單元 來進行測試 !

這一點 和 剛剛的 控制邏輯的是不一樣的

因為控制邏輯 依賴有一個 被控制的面板 才能運行~

下面是用來測試是否可以鎖住面板的測試

因為 MyPanel 是這樣寫的 所以會有問題 (我故意留下 讓測試會出錯的部分!)


因為就算是 按鈕 enabled 被關閉了 但是監聽還在的話 對這個按鈕直接丟事件!

還是會被聽到的, 但是實際上 Button 這個 元件 再 enabled 是 false 的情況下

手動去按是不會丟出"點擊"等相關事件的 ( 這個也是測試 和實務上的不同 ! )

但是! 我在 邏輯控制的時候 的虛擬面板 確是可以運行請看下面的 虛擬面板 類別










 控制邏輯 的測試程式 使用的 虛擬面板 的部分

確是有完整的 移除監聽 所以在邏輯測試時 虛擬面板 不會出錯 !

下面是 面板的 文字容納量的測試!



這個讓我們知道 這個 UI 在文字是 12345678912 得時候,

文字框的寬度 就不夠了 會產生切字的問題 !

 textCaseUILimitLess 是測試多少個字 是可以顯示不會被切字的最上限

這兩個對我來說 就是 文字框 顯示的 邊界測試 !

這樣就算將 UI 的一些 可視 手動操作的 等等的部分都和 unit test 串起來了 !

最後 是將兩個測試 串起來 !

並且透過 sharedEvents 將相關的東西傳遞出去 讓 air 程式出報表

就可以整合進 JenKins 了