叶子

闲言碎语

贪吃蛇

有条蛇它长度不固定,蛇头朝北顺时针盘旋着,请打印出如下图的蛇形矩阵。答题时间40分钟。

9  9  9  9  9  9  9
8  6  6  6  6  6  9
8  6  3  3  4  7  9
8  5  3  1  4  7
8  5  2  2  4  7
8  5  5  5  4  7
8  8  8  7  7  7

我的答案(ps:没考虑优化,但是明显数学能力不够,囧,原文见:http://bbs.51js.com/viewthread.php?tid=85907&extra=page%3D1) 引用

function draw(n) {
        count = n * (n + 1) / 2;
        m = Math.ceil(Math.sqrt(count));
        var a = [],b = [];
        for (i = 0; i < m; i++) {
            a[i] = [];
            for (j = 0; j < m; j++) {
                a[i][j] = " ";
             }
         };
         for (i = 0; i < n; i++) {
             for (j = 0; j < i + 1; j++) {
                 b.push(i+1);
             }
         };
         //判断第一个
         t = Math.ceil(m / 2);
         x = t-1;
         y = t - 1;
         if (m % 2 == 0) {
             y = t;
         };
         x1 = x;
         y1 = y;
         //开始画
         to = 1; //向下 2左 3上 4右
         for (i = 0; i < count; i++) {
             try {
                 a[x][y] = b[i] ;
             } catch (e) {

             };
             n = Math.ceil(Math.sqrt(i + 1+1));
             if (n % 2 == 0) {
                 n1 = n / 2+1;
                 n2 = n / 2+1;
             } else {
                 n1 = Math.ceil(n / 2) - 1;
                 n2 = Math.ceil(n / 2)
             }

             if (to == 1) {//向下
                 if (Math.abs(x + 1 - x1) < n2) {
                     x = x + 1;
                 } else {//向左
                     y = y - 1;
                     to = 2;
                 }
             } else if (to == 2) {//向左
                 if (Math.abs(y1 - (y - 1)) < n2 && (y-1) >=0) {
                     y = y - 1;
                 } else {//向上
                     x = x - 1;
                     to = 3;
                 }
             } else if (to == 3) {//向上
             if (Math.abs(x1 - (x - 1)) <= n1 && (x-1) >= 0 ) {
                     x = x - 1;
                 } else {//向右
                     y = y + 1;
                     to = 4;
                 }
             } else if (to == 4) {//向右
             if (Math.abs(y + 1 - y1) <= n1) {
                     y = y + 1;
                 } else {//向下
                     x = x + 1;
                     to = 1;
                 }
             }
         }

         var s = "";
         for (i = 0; i < m; i++) {
             s += a[i].join(" ");
             s += "\n";
         };
        return s;
    }
    console.log(draw(9));

又一次离别

电脑上放着The Fray的Never Say Never,略带悲伤和无奈。窗外,大雨,上海已经连续下了快一周雨。心境一如此时,如此无奈,舍不得却无奈的离别。

记得是一年前的差不多这个时候,那个阳光灿烂的周末早晨,室友叫去公园跑步。刚开跑没几十米,他从旁边的草丛中跳出来,跟着我跑,一边跑还一边呼喊。自小,我是喜欢这样的,就停下来等他。他跟上,跑过来,像熟悉很久的朋友,对我表示着亲昵。旁边几个锻炼的大爷大妈围过来:好可爱啊。于是他表现得更亲昵。好吧,如此可爱,我带回去好了,于是,一个人吃饱全家不饿的我,多了一个牵挂。

初来乍到,他就表现得无所畏惧,经常对我袒胸露乳。同时也表现得很乖,从不乱丢乱弃。偶尔,他会调皮捣蛋,直接啃我,所幸,他晓得轻重,所以我虽然偶有他留下的伤痕,倒也无伤大雅。记得第一次他哭得悲惨,是来后2个多月我搬家。我只得陪着坐在闷热的火车厢,不停的抱着他安慰他。好在到了新家,他很快就适应,也很快和皮皮打成一团,我也乐得他有了玩伴。冬天,他占据半条被子。夏天,他占据半个枕头。经常早上醒了一睁眼,我们的头是亲密挨着的。

他喜欢站在阳台,看着外面的车流,看着外面的路灯,看着外面的小鸟,几个小时也不累。甚至,淘宝上一个卖家还打算把自家女儿介绍给他。唯一的,他很胆小。我带他下午,他都不肯,每次都要抱着安慰着,才肯打量那个陌生的世界。而对我,则是窝里横,抓啃咬,无所不能,大概,我太惯他了。

我们的离别,是悄无声息,没有招呼。洗澡前还见到他,睡觉前已然不见。我找了找没看见,以为他自娱自乐去了,就没管。哪知,第二天早上,他还是没出现。晚上,依旧没出现。一周,还是没出现… 也许,他去追求他的幸福了吧。

初见,他团在我手掌上。离别,已经超过半条胳膊长了。

人生若只如初见。

firefox 3.0.1的event实现bug

朋友说,给前几日的那个联动下拉做个灰色不可选,没想到实现的时候发现了firefox3的event实现bug。代码如下:

<select name="test1" id="test1" disabled onchange="alert(this.name);">
<option value="" selected>选拔1</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<input type="button"
value="undisabled&dispatchEvent"
onclick="document.getElementById('test1').disabled=false;document.getElementById('test1').options[1].selected = true;var evt = document.createEvent('HTMLEvents');evt.initEvent('change',true,true);document.getElementById('test1').dispatchEvent(evt);"
/>

注意,这段代码ie下无效,请在非ie内核看。opera chrome safari按一次就可以alert,而firefox需要按2次 我猜firefox偷懒,没有立即对elementes重新加载或者判断 所以虽然确实效果是ubdisabled了,但是ff还认为是disabled,所以没有events,自然dispatchEvent就没了效果。我贴到了dhtml群,王好奇同学给了解决办法,加settimeout。确实,加了这个‘延时’后,也只需要按一次就可以alert了。不过我的因为是n个select联动,所以settimeout这种0秒‘延时’,导致触发不了后面的select 失效ing…