[TED-Ed 原創系列] 《時代女神 x 程式邏輯革命》 [地點:一九八樹林] [第七集:覺醒] 踏進巨塔的底層 彥霖和凌杰要先越過能量布陣 才能觸及第二枚瑰寶:創造之泉 彥霖要藉三道能量流登上塔頂 足下一步,啟動計時器倒數 60 秒 在房間的盡頭,有一個能量池 一座座隱形能量塔一字排開 中間的空格可以蓄積能量 一分鐘後,能量會如急流般瀉下 每次填滿一個空格 力場則在前後防止流溢 在風平浪靜的 60 秒間 彥霖、凌杰要決定降下多少格能量 在三關挑戰中,每關都要調好份量 能量池滿而不溢才算圓滿 能量階梯就會將他們推上下一關 計較份量若有閃失,能量階梯便破解 一腳踩空,就是無情的迫降 牆上的示意圖,枚舉幾個例子 這範例蓄積恰恰兩格能量 範例二則蓄積四格: 第二欄 3 格、第三欄 1 格 範例三也是蓄積四格: 左右兩側框不住,能量會外溢 能量雨降下後會盡量往空子鑽進去 當所有空格填滿才會滿溢 凌杰可逐次顯現一座能量塔再數高度 但不能一窺整個能量池的全豹 彥霖要為凌杰設計一個怎樣的程式 來找出能量池框得下多少格能量? 若要自己動腦筋,就按一下暫停 這道題可以這樣入手: 但凡一個空格,要框得住能量 最左邊,必須總得有一堵牆框住 最右邊,也得有一堵牆框住 但凌杰每一格都左顧右盼會很費時 假如凌杰逐欄來看每一座能量塔呢 比如說,這裡框得住多少格能量? [若要自己動腦筋,就按一下暫停] 回來剛才的例子,去分析這道題 能量格疊成塔,計有 5 欄 最左一欄已到頂,框不下任何能量 第二欄,上面可再加 3 格 左右這兩座四格塔,能量框得住 算法是將能量塔 最高平整的高度——4 減去能量塔本身的高度——1 即 4 減 1 得 3 第三欄同理:左 4、右 4、高 3 格 故可蓄積 4 減 3 格,即 1 格 第四、五欄靠右都沒有更高的塔框住 所以,這兩欄都不能蓄積任何能量 這個概念可用一個演算法實踐: 凌杰每次以一欄塔作參照點 靠左,逐欄找最高一座塔的高度 又挨右,找最高一座塔的高度 兩者以較低者為蓄積後的平整高度 結果若高於此欄本身的高度 就減去原來的塔高 得出這座塔會蓄積到多少格能量 相反,結果若少於或等於原來塔高 能量就不會留住,往左右流走 凌杰可用一個迴圈橫越整個能量池 從最左一欄塔開始,每次一欄向右移 逐欄塔重複相同的幾個步驟: 先向左找最高一欄 再向右找最高一欄 取二者較低者,減去原來欄高 若是正數,則加進蓄積格數的總計 有多少欄,迴圈就重複多少次 這個方法雖然行得通 但能量池大的話就很費時 每個步驟凌杰都要向左、向右查看 若有 N 座塔,就要看 N 次 有更快的方法嗎? 有一個省時妙計:一開始可先取巧 凌杰從最左開始一邊數一邊做小抄 以流水帳方式記下當前最高的欄高 範例中,首欄是 2 然後也是 2,因為第一欄較高 接著是 4、4、4 之後就輪到靠右的最高欄高 做法是從右往左重複一遍: 1、3、4、4、4 最後凌杰記憶中就有一個這樣的表 現在凌杰只消多一重功夫 用先前同一條等式 去計算每欄塔上可框住多少格能量: 小抄中儲存的左值、右值取較低者 減去該能量塔原來的高度 N 座塔本來要看 N 次,現在只消 3 次 即是所謂的線性時間 這個解題方案還可以進一步優化 但已可解燃眉之急了 彥霖、凌杰雙劍合璧 第一關如沐春風,翻手之間就竄升 第二關稍有難度 第三關規模龐大,有數十座能量塔 計時器快歸零,幸好編寫程式夠快 彥霖及時轉好輪盤 能量階梯把他們昇起,直達創造之泉 當一切如風,餘下也只有真相 哪似水流年的記憶再浮現眼前: 「創世機」翻天覆地打造世界大同 彥霖身為機器人總工程師看在眼裡 怵惕惻隱之心不禁戚戚 當「八達圍」築起,把人圍堵城牆內 專恣跋扈之甚 已離經叛道天地不容了 彥霖決心撥亂反正,創造了三枚瑰寶 讓力量、創造、記憶歸真,回歸人民 並暗中散落於三處社區,潛藏民間 彥霖還來不及說出運用之法 政府就發現她的叛逆 派遣機器打造的土龍芻狗大肆搜捕 想把彥霖及其他程式設計師一網打盡 在最後關頭,彥霖再一次善用創世機 創造了一個機器人,囑託他至死守護 這台天地間的橐籥、造化萬物的玄機 並埋藏巨型迷宮內 免於平庸無知之惡 彥霖給了守護機器人一個名字:凌杰 能量階梯一閃消失,送上無情的迫降