2016年12月5日星期一

柬埔寨 (一)

今次離開香港,真的只是旅行,沒有甚麼特別的計劃。但某程度上,因著這小小的深度遊,也更了解這個國家,明白多了這兒的需要。

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
很嚮往主持與當地人的對話,以及對新事物的勇敢嘗試,也發現自己對世界的了解太小了!

 

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

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。





2016年2月19日星期五

淨土

有時候,地方的轉移的確可以讓一些情緒得到紓緩。幸好香港有這樣一個好地方,晚上的時候人不多,很適合去坐在海邊,吹著海風,在城市的繁囂中得到釋放。



可惜的是,這些都不長久 - 這個地方快要消失了。

世間很多解決事情的方法也一樣,並不長久。有些時情,要治本,惟有靠著那不變的盤石,就是天上的父神。

2016年1月25日星期一

寒冷.日出

香港史上其中最冷的一天,就在這突然的決定,走上太平山看日出了!




雖然這溫度顯示是4度,相信山頂或許只有2-3度!仍未結冰,但已經是二十年一遇了

2016年1月21日星期四

溝通日

看著同事升職,加人工,他們各自的道賀,甚至有人說過去一年就是在等今天。心中不禁有些感嘆,雖然看似高興,然而內心卻總滲透著一些不滿足。看見數年辛苦的成果,是一個頭銜。一年辛勤的工作,是一個數字上的補償。

哈哈,當然雖都會想發財,但即使發了財,又怎及得上與朋友真誠的聊天,談著大家的理想,討論大家喜歡的事情呢?

勾起不少的回憶,小時候玩過的小遊戲,那些圖像,那些概念,那些遊戲設計。喜歡的地方,值得再發展的元素,彷彿未動工已有完美的製成品。看似無關痛癢,但無形中給了我動力去努力實現腦中的東西。

先說說,後補上完成作。

2016年1月8日星期五

2016

有一點遺憾,竟然2015年沒有在這裏發佈文字。

踏入2016年,稍稍回望,還是充滿著恩典。有很多事情,沒有想過會這樣發生,而大部份都是比預期好,以成語來表達,便是「喜出望外」了。而數算著當中的事,有多少件在我控制範圍以內?沒有很多。若這樣看,似乎巧合還未夠形容,真的有一位時間安排極好的造物主才有能力讓這些事發生。

自己的改變,有時不容易察覺,但最近回想卻有一個。以前說過要做的事,70%是最終沒有做的。最近說過要做的事,70%是真的能實行出來的。樂觀的展望,2016年有很多事情想做,希望這小改變能維持吧!





受傷了 誰都會哭泣 哭完了 別否定過去
快樂的 美好的 都還在這裡 等著你