2016年12月10日星期六
柬埔寨 (四)
Day 6
War Museum
Day 7
Phnom Bok
War Museum
War museum值得一看,第一手的資料,真實的武器,地雷,戰爭受害者。兩個不同的導遊,講解也不盡相同,但同樣生動。又是一個出人意表的景點。
晚上的餐廳,柬西菜均好吃,最好還是它的意念,幫助有需要的人訓練求職,也幫助公平貿易的發展。值得一去再去!
Day 7
Phnom Bok
真的意想不到,見盡柬埔寨的人情味。單車遊Phnom Bok,網上看都不用入場卷,便沿著大路走過去。先是給吳哥窟的檢票員攔了下來,說沒有票不能駛進吳哥窟馬路範圍。我們唯有繞農村路,卻有幸近距離接觸郊野,也有小朋友和我們打招呼,也代表著這兒沒太多遊客了。
好不容易騎了30公里,抵達Phnom Bok,卻在上山前的小吃亭被檢票員攔了下來。原本心情不太好打算走,卻被老闆娘的熱情留了下來,買了兩瓶水,坐在士多的有蓋頂下。慢慢地,那檢票員問了我們兩句,坐得久了,老闆娘的小孩也和我們聊天。後來,也許是坐得久了,那檢票員叫我們,並做手勢讓我們悄悄上去,他就隻眼開隻眼閉。這一刻忽然有一種無言的喜悅,也很慶幸這檢票員很好。
看過山頂的景色,回到士多,打算向那檢票員再一次道謝,卻不見人,又想和小孩繼續聊天,也不見人。但因著那份人情味,買了兩個椰青,慢慢享用。和老闆娘談了兩句,她又熱情地讓我們睡在竹床和吊床,儘管英文有限,但溝通卻不成大問題。後來,老闆娘要出去一會,即使我們沒有付錢,也沒有要我們做甚麼,只是講信用。這也是我很欣賞的地方。
不知過了多少時候,那小孩子回來了,我們繼續談天,說到未來想做的工作,他說想做銀行,那一刻也不禁有一點點慨嘆,但事實他。們是貧窮,也怪不得了。老闆娘教我們如何把椰青都吃乾淨,也用了椰青皮做羹,這個是農村有的實用知識,城市人反而要虛心學習。臨別前,我們連番道謝,特別是老闆娘給我們一個舒適的地方多達2個半小時。但出奇的是,小孩的回應是叫我們多謝那檢票叔叔。一個14歲的小孩,已經站在別人角度去想,也懂得感恩,實在是太成熟了。
回去大門口多謝檢票員,他還教我們如何走回去。在回程途中,又不斷遇到和我們打招呼的小孩,甚至大人也願意讓我們拍他們,擺上笑臉,做起手勢。又有小孩坐在運草車上,又有一家人在用傳統方法打磨麵粉,一切都是落地的單車才體驗得到。
或者,農村的人,單純得很,人情味卻濃得很。整個旅程便好像一個奇遇記一般,充滿著挑戰,也充滿著驚喜。
2016年12月8日星期四
柬埔寨 (三)
Day 4
Kampong Khleang
早上第一次睡到自然醒,在陽光下吃過早餐,享受在陽光下看聖經。午餐找到這一家稍為偏僻的cafe,悠閒的生活,也在想這生活是否只有富人有權擁有? 或者其實在一般階層下的人,這個生活模式也是很常見的。
Day 5
Kampong Khleang - Koh Ker - Beng Mealea
或者被出海漁船的摩打聲吵醒,又或是半夜的一陣動物打鬧聲,或是早上他們開始辛勤工作的聲音叫醒,總之在6時之前便已精神奕奕的起床。導遊帶我們在村落中走,看垃圾被燒,看小孩準備划船上學,看幼童在玩彈珠,雖他們已看慣遊客,卻仍將最真實生活的一面呈現出來。
Kampong Khleang
早上第一次睡到自然醒,在陽光下吃過早餐,享受在陽光下看聖經。午餐找到這一家稍為偏僻的cafe,悠閒的生活,也在想這生活是否只有富人有權擁有? 或者其實在一般階層下的人,這個生活模式也是很常見的。
這一個晚上,真的很特別。連導遊都沒有試過在小漁村過一夜,也沒有試過在小漁村吃晚餐。我們赤著腳,在屋內走來走去,吃著簡單的三餸一湯,睡在吊床上,和導遊談家常。平時吃甚麼,香港的相,他的經歷之類。偶然聽著凌晨出海的摩打聲,不停被蚊咬,卻有一種鄉村的感覺。下午去村上走走,也很高興見到純真的小朋友,踢著足球,沒有被訓練成賣東西的小孩。雖然不富有,卻有吃有住有衣服,算是自給自足了。
感恩,不是因天氣美得讓人拍出叫人羨慕的照片,也不是因報了一個特別便宜的團,而是好像我們去漁村的決定,擴闊了一點點導遊的眼界,也讓他的生活多了一點點的色彩。
Day 5
Kampong Khleang - Koh Ker - Beng Mealea
或者被出海漁船的摩打聲吵醒,又或是半夜的一陣動物打鬧聲,或是早上他們開始辛勤工作的聲音叫醒,總之在6時之前便已精神奕奕的起床。導遊帶我們在村落中走,看垃圾被燒,看小孩準備划船上學,看幼童在玩彈珠,雖他們已看慣遊客,卻仍將最真實生活的一面呈現出來。
吃過早餐,便由60歲的女主人划船帶我們過對岸,繼續展開行程。首站的Koh Ker,固然由偏僻而少人,但早上的天色也為這兒增添了一份孤高感。導遊更特別帶我們去不同的特色廟宇,當中Prasat Neang Khnaw和Prasat Pram更是令人覺得驚艷。
更特色的行程,是他帶我們到他哥哥的屋。一平方公里的田野,種有香蕉,菠蘿,芒果,也有辣椒,香草。或者背後的故事不是很為人津津樂道,被政府燒了,被沒收田地,甚至「流亡」泰國,但現在總算再次安居樂業。他也有一些兄弟在泰國住,也有在不同城市,有富有貧,但這移民的概念,或者又一次被重新思考。
下午Beng Mealea,特色是爬上爬落,導遊很喜歡,也特意帶我們到不少私房影相熱點,當中走出既定的木棧道的為數不少。回去過程中吃過竹筒粢飯,也標誌著幾天行程的結束。
2016年12月6日星期二
柬埔寨 (二)
Day 3
Phnom Kulen - Banteay Srei - Banteay Samre
有機會和司機談得深入一些,說到柬埔寨的問題。他讀電子,卻出來做司機,因為一般文員收入一個月只有100美金,做銀行的有300,但做司機淡季已有300,旺季更有500,導遊更厲害,一天便有30美金,一個月可達1000。但歸根究抵是貪污問題︰總理是全國最富有的人,而政治則愛理不理,任憑人去貪污斬樹,也任憑越南人去操縱國會。甚至一切電力都靠鄰國供應,自己種出來的米也有一部分要先運去越南切割。這樣的國家,也許人真的很難有前途。而香港雖然情況較好,一旦淪落到這個地步,便無力再反抗。
另外也有談一點宗教信仰的問題,關於他爸爸是軍人,很虔誠的信把虎牙掛在心口上,便會得神保𧙗,當然也加上遵守一切老師所傳的規條。但他自己本人卻不太相信,但也算是個佛教徒。
他自己一個人喜歡靜,這點倒和我性格挺相似。也看得出,平日開車都不多作聲,算是一點點害羞,在休息時也不一定與其他司機談天,有時只坐在一邊。但他為人極好,今天還特別地帶我們到他的私房景點,那景點一個人都沒有,讓我們盡情拍照,也可以真正「體會」那時候皇帝去朝聖的感覺。
柬埔寨給人安全感,走在街上不怕有壞人。今天晚上走進小巷,有數隻狗在吠,也立即有人出來叫停牠們。這一種感覺,在歐洲,或是其他落後國家都不能感受,連香港都找不到。究竟是主觀感覺,還是有甚麼令我這樣想呢?
2016年12月5日星期一
柬埔寨 (一)
今次離開香港,真的只是旅行,沒有甚麼特別的計劃。但某程度上,因著這小小的深度遊,也更了解這個國家,明白多了這兒的需要。
Day 1
大吳哥 - 日落
Day 2
日出 - 小吳哥
沒有太多文字描述,因為這些都是一般遊客會到的景點。我們的行程,好像由第三天才真正開始。
P.S. 上面大部份的寺廟原本是印度教的,只有少部份後來才建,因而改了教,成為佛教。但這佛教畢竟與中國的佛教有點差別,某程度上都是印度教的延伸。
一般認為印度教是多神論,但實際上印度教所相信的都很參差,不同人有不同的理解。他們都相信有一個終極的神,而神的主要化身有三個,就是大家熟知的Brahma,Vishnu和Shiva。在這些寺廟中多數拜的是Vishnu和Shiva,但偶然也有Brahma的頭像。
而吳哥窟之所以有這麼多不同的寺廟,是因為不同時期的皇帝都要建自己的寺廟來在不同節期拜神。當中大都非常宏偉,耗費的人力物力不少,為的就是證明他們有盡力去事奉,也成就了千年以後的世界遺產。
不過今天看來,對宗教的認識也是很少,甚至沒有可能去完全明白「神」的想法。只能靠僅存的知識來理解了。
Day 1
大吳哥 - 日落
Day 2
日出 - 小吳哥
沒有太多文字描述,因為這些都是一般遊客會到的景點。我們的行程,好像由第三天才真正開始。
P.S. 上面大部份的寺廟原本是印度教的,只有少部份後來才建,因而改了教,成為佛教。但這佛教畢竟與中國的佛教有點差別,某程度上都是印度教的延伸。
一般認為印度教是多神論,但實際上印度教所相信的都很參差,不同人有不同的理解。他們都相信有一個終極的神,而神的主要化身有三個,就是大家熟知的Brahma,Vishnu和Shiva。在這些寺廟中多數拜的是Vishnu和Shiva,但偶然也有Brahma的頭像。
而吳哥窟之所以有這麼多不同的寺廟,是因為不同時期的皇帝都要建自己的寺廟來在不同節期拜神。當中大都非常宏偉,耗費的人力物力不少,為的就是證明他們有盡力去事奉,也成就了千年以後的世界遺產。
不過今天看來,對宗教的認識也是很少,甚至沒有可能去完全明白「神」的想法。只能靠僅存的知識來理解了。
2016年11月10日星期四
Hong Kong Regional 2016
有幸可以參與在今年Regional的出題當中,雖然只是一個小角色,但中間過程也是挺有趣的。像是進入了職場以後,對過往大學生活一個小小的回憶。
https://open.kattis.com/problem-sources/Hong%20Kong%20Regional%20Contest%202016
可惜的是,題目的描述似乎令人誤會,結果一隊也沒有嘗試過那題。不多不少有點失望,但也在想,甚麼時候這表達的能力變得這麼差呢? 或者這是一個時候去考慮在生命中找一些新的嘗試了,跳出現有的框框。
順道推介一個最近在看的電視節目 - <<404不存在的國落>>
http://viu.tv/encore/4-0-4-countries-not-found
很嚮往主持與當地人的對話,以及對新事物的勇敢嘗試,也發現自己對世界的了解太小了!
https://open.kattis.com/problem-sources/Hong%20Kong%20Regional%20Contest%202016
可惜的是,題目的描述似乎令人誤會,結果一隊也沒有嘗試過那題。不多不少有點失望,但也在想,甚麼時候這表達的能力變得這麼差呢? 或者這是一個時候去考慮在生命中找一些新的嘗試了,跳出現有的框框。
順道推介一個最近在看的電視節目 - <<404不存在的國落>>
http://viu.tv/encore/4-0-4-countries-not-found
很嚮往主持與當地人的對話,以及對新事物的勇敢嘗試,也發現自己對世界的了解太小了!
標籤:
programming
2016年4月10日星期日
Google Code Jam 2016 Qualification
今年的GCJ有一點小嘗試,在無時限的Qualification用不多人用過的Q來寫。
為了方便大家,這裏便是documentation。
http://code.kx.com/wiki/Main_Page
題目也不多說了,只集中寫一寫今次的一些學習。詳細要看題目的在這裏
https://code.google.com/codejam/contest/6254486/dashboard
先簡介一下程式,大概便是先把input變成一個string list (a),再通過function f和g去處理input,最後兩行便是把output放入file中。
這題剛開始熱身,便假設n在100次以內必然會出現0-9起碼一次(其實可以證明的)。主要把每一個數字變成string,再串起來,加上distinct,來判斷是否有10個不同的數字(Function f)。
這一題主要用了一個trick,去掉所有連續的+和-,以及最後一個+,便可根據剩下的string的長度來得出答案。特別一提Q中的x where differ x便可以做到去掉連續的效果,很簡潔。
Q的轉二進位很容易,在0b vs x這句中做到,更可以因為vector conditional來一次過製造最終的組合(全都在第一行做了)。第二行只是給出指定的output format。
為了方便大家,這裏便是documentation。
http://code.kx.com/wiki/Main_Page
題目也不多說了,只集中寫一寫今次的一些學習。詳細要看題目的在這裏
https://code.google.com/codejam/contest/6254486/dashboard
Problem A
a:read0`:al.in;
f:{ distinct raze string x*1+til y };
g:{
k:f[x;]each 1+til 100;
ret:x*1+first where 10=count each k;
$[null ret;"INSOMNIA";string ret]};
res:g each 1_"I"$a;
output:{"Case #",string[x],": "} each 1+til -1+count a;
`:al.out 0:output,'res
先簡介一下程式,大概便是先把input變成一個string list (a),再通過function f和g去處理input,最後兩行便是把output放入file中。
這題剛開始熱身,便假設n在100次以內必然會出現0-9起碼一次(其實可以證明的)。主要把每一個數字變成string,再串起來,加上distinct,來判斷是否有10個不同的數字(Function f)。
Problem B
a:read0`:bl.in;
f:{
x:x where differ x;
if["+"=last x;x:-1_x];
string count x };
res:f each 1_a;
output:{"Case #",string[x],": "} each 1+til -1+count a;
`:bl.out 0:output,'res
這一題主要用了一個trick,去掉所有連續的+和-,以及最後一個+,便可根據剩下的string的長度來得出答案。特別一提Q中的x where differ x便可以做到去掉連續的效果,很簡潔。
Problem C
res:{"2",raze string ?[-15#0b vs x;22;11],"2"} each 1+til 500;
`:cl.out 0:(enlist "Case #1:"),(raze each string "2"=res),\:raze " ",'string 3+til 9
最喜歡要算是這題,利用了有連續的1在base n必會整除(n+1)。所以基本上做法是把長k的01 string,去掉頭尾的1,再分成(k-1)/2組,每組必然是11或00。然後根據10進位轉2進位的方法,用頭500個數的二進位來放進那些組中。Q的轉二進位很容易,在0b vs x這句中做到,更可以因為vector conditional來一次過製造最終的組合(全都在第一行做了)。第二行只是給出指定的output format。
Problem D
a:read0`:dl.in;
pow:{show y;$[y;$[y mod 2;:pow[x;y-1]*x;:g*g:pow[x;y div 2]];:1]};
f:{
c:"J"$" " vs x;
n:c[0]; k:c[1]; s:c[2];
if[s<try:1+(n-1)div k;:"IMPOSSIBLE"];
id:(try;k)#til n;
pp:pow[n;]each til k;
" " sv string 1+sum each id*\:pp };
res:f each 1_a;
res
output:{"Case #",string[x],": "} each 1+til -1+count a;
`:dl.out 0:output,'res
這一題算最複雜。或者可以寫得更簡單,但大致上的原理是算出每一個generation所要取的位置,再乘以n的power,以得出最後要得的index。特別喜歡(try;k)#til n這一行,基本上它把0到n-1自動放進try x k的表格中,並自動wrap over。然後便可以用vector operation直接乘以n的power,加起來便是所需的index。
標籤:
gcj,
programming
訂閱:
文章 (Atom)



