トップ «前の日記(2005-10-06) 最新 次の日記(2005-10-09)» 編集

活動日誌


2005-10-07

[JavaScript] イベントの伝播を防ぐ

HTML の要素が階層をなしているとき、下の階層にイベントが起こると 上の階層にも順番にイベントが発生する。

これを防ぐには、IE だと cancelBubble = true で、 DOM だと stopPropagation() を使う。

 var f = function(e){
   e = e ? e : event;
   if(typeof e.cancelBubble !== 'undefined'){
     e.cancelBubble = true;
   }
   else if(e.stopPropagation){
     e.stopPropagation();
   }

   alert('hogehoge');
 }
 document.getElementById('foo').onclick = f;
 document.getElementById('bar').onclick = f;
 <div id=foo>
 aaa
 <div id=bar>
 bbb
 </div>
 </div>

クイズ: Graphical Partition

http://mput.dip.jp/mput/?date=20051007#p01 より。 グラフ理論はあまり知りませんが、ちょっと考えてみました。

問1

紙でごにょごにょやってみたらできました。 以下のとおりに接続できるのでグラフ的です。

 .abcdefg
 a.*****.
 b*..*...
 c*.....*
 d**..***
 e*..*...
 f*..*..*
 g..**.*.

問2

こんな感じでいいのかな……? 接続行列の第i行成分の和が与えられた配列のi番目(1-origin)になることを考えて、 接続行列を上から埋めていきます。

 def make_comb(size, num)
   raise "error" if size < num

   if size == num
     [Array.new(size, 1)]
   elsif num == 0
     [Array.new(size, 0)]
   else
     make_comb(size-1, num-1).map{|e| [1] + e} + make_comb(size-1, num).map{|e| [0] + e}
   end
 end

 class Array
   def graphical?
     return false if self.any?{|e| e < 0 or self.size <= e}
     return true if self.size == 1 and self.first == 0

     make_comb(self.size - 1, self.first).each do |b|
       partial = []
       self[1..-1].zip(b){|x| partial << (x[0] - x[1])}
       return true if partial.graphical?
     end
     return false
   end
 end

 p [5, 2, 3, 2, 3, 2, 5].graphical?

問3

Haskellは知らないです。いかんなぁ。


2005|02|03|04|05|06|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|03|04|05|06|10|
2008|04|10|
2009|10|
2010|05|08|
2012|01|02|03|
2014|01|
トップ «前の日記(2005-10-06) 最新 次の日記(2005-10-09)»