星期六, 5月 05, 2007

美勞課考卷發了!

美勞嵌入式系統期中考時,有類似這樣的題組:

# ls -al
Total 20
drwxr-xr-x 2 tblanku users 4096 May 5 02:20 .
drwxr-xr-x 9 root root 4096 Mar 24 08:26 ..
-rw-r--r-- 1 tblanku users 127 Mar 4 07:32 .bash_logout
-rw-r--r-- 1 tblanku users 193 Mar 4 07:32 .bash_profile
-rw-r--r-- 1 tblanku users 551 Mar 4 07:32 .bashrc
-rw-r--r-- 1 root root 0 May 5 02:20 somefile
-rw-r--r-- 1 root root 213 May 5 02:20 other file

請問 tblanku 可否刪除 somefile 這個檔案?

我當然是寫「是,因為刪除檔案是看目錄權限。」可是,老師在檢討考卷的時候居然說:「因為 somefile 的擁有者是 root,tblanku 只有讀取的權限,所以不能刪除。」所以就被改錯了 XD~

這種 well-known 的 gotcha 也會掉進去!? @@ 而且,他果然出了「不能使用空格」這種題目...

Linux 的檔案系統並沒有硬性規定檔名使用的編碼(或是,哪些字元可用、哪些不可用),而是把這部份的決定留給了使用者。除了「/」這個目錄分隔符號以外,其他字元都可以拿來當檔名。

還有一些被說得很好笑的答案:

Q: 如果要把「install.sh」更名為「setup.sh」,要下什麼指令?

A: mv {install,setup}.sh

結果被批「沒有人會這樣用」...

還有一題...

Q: 雖然圖形介面簡單好用,為什麼在開發嵌入式系統的時候需要使用指令模式?

A: 因為你不會用!還是有很多圖形介面的工具可以輔助嵌入式系統開發的。Open Source, Open Mind!

結果上課的時候被說「有人跟我嗆聲,說是因為我不會用」XD~

嗯... 我想你還是繼續放 NTT DoCoMo宣傳影片好了...

星期三, 5月 02, 2007

題意 XD

前幾天(May 1, 2007)系上舉辦程式設計比賽,出了四道題目。其中一題大概是這樣的(題目卷收回去了,所以只能列出大概...):

今天有一由英文字母與括號組成的字串 S,可以對他們作 HEAD 與 TAIL 兩種操作,行為是這樣:若 S=a(bc),則 HEAD(S)=a、TAIL(S)=bc,若 S=(bc) 則 HEAD(S)=NULL、TAIL(S)=bc,若 S=a,則 HEAD(S)=NULL

範例輸入:
a(b(cd)))
TAIL
HEAD

範例輸出:
b

恩... 不要問我為什麼出這麼簡單的題目,因為我也不知道 = = 總之,看到這個題目,我想到類似以下的表格:

S HEAD TAIL
a(bc) a bc
(bc) NULL bc
a NULL(題目這樣說嘛!) a(猜的)

於是,寫出程式碼以後,驗證失敗... 花了些時間修改以後,最後還是錯誤。

比賽結束後,就去問監考老師,看能不能取得測試資料,順便問他我們到底錯在哪。當時他看了看題目以後,說「喔,應該是題目錯了,如果沒有這行(S=a HEAD(S)=NULL)就對了。」

那... 廢話嘛 = = 哪有「題目錯了,我們也就跟著錯了」這種事,當然要想辦法補救(至少要能讓人家覺得這是場公平的比賽)。可是當時老師跟助教就一付息事寧人的態度,對我們說「不然你是想要我怎樣?向全校公開道歉嗎?」實在很無言。就這樣,我們當天在系辦吵了兩個多小時。

後來,老師、助教、我們自己又調備份資料出來看,才終於弄懂到底錯在哪。原來題目跟測試資料都沒問題,是我們誤解了題意。如果 S=a(bc) 是 general case,括號前面的是 HEAD、裡面的是 TAIL。而 S=(bc) 是只有 TAIL 時的 special case, HEAD 是 NULL、TAIL 是括號中剩下的東西。而 S=a 是只有 HEAD 的 special case,不但 TAIL=NULL、連 HEAD 也一併變成 NULL 了。

嗯,好吧!的確是自己會錯題意,既然這樣就沒話說了。雖然我好像也測過 S=a HEAD=NULL TAIL=NULL 這種組合... 可能是其他部份的程式碼有問題吧!

後來我問我的隊友「我是不是很龜毛?」,他說「是,我當時就想叫你算了」。我告訴他的理由是,「因為這是比賽,我不願意在不明不白的狀況下贏過別人,也不能不明不白讓別人贏過我」。他後來也就理解了,也陪我跟老師囉唆了兩天 XD~

不過題外話... 有另外一題大概是這樣:

小明走在海邊檢石頭,每次只能撿比目前石頭重,而且不能往回走。而且為了避免一下子拿太重手臂負荷不了,所以只能拿比現在重十公斤以內的石頭。例如目前拿的石頭是 5kg,那麼下一次只能換成 6~15kg 的石頭。請問怎樣的拿法,可以達到最多交換次數?

範例輸入:
3 2 21 60 4 6 8 70 44 7 5 10 33 9 11

範例輸出:
6
2 4 6 8 10 11(我沒有實際算,這裡的答案是隨便唬嚨的...)

我一看到這個題目,就跟隊友說「這個可能有兩組最佳解吧?」,於是他就問老師「如果有兩組以上最佳解怎麼辦?」結果老師跟助教很肯定的跟我說「測試資料只有一組最佳解。」

很好,跑出來他的一些測試資料裡會有兩到三組最佳解 = = 嗯... 驗證失敗 XD~

搞成這樣我也不知道該說什麼,不過老師最後還是給我們對,但是時間就不知道該怎麼算了...