JavaScript

Bookmarklet - ニコニコ大百科

ニコニコ大百科←Bookmarkletです。
function dicnico(){
	var dicNico = 'http://dic.nicovideo.jp/a/';
	var word = prompt('ニコニコ大百科で検索します。');
	if(word != null) window.location = dicNico + word;
}
// Bookmarklet
// javascript:(function(){var s=prompt('ニコニコ大百科で検索します。');if(s!=null)location='http://dic.nicovideo.jp/a/'+s;})();
// javascript:(function(){location='http://dic.nicovideo.jp/a/'+prompt('ニコニコ大百科で検索します。');})();

Firefoxユーザー専用

ここから先は以下のアドオンが入っていることを前提としています。 ニコニコ大百科トップページ - ニコニコ大百科の右上にある「Googleサーチ検索」上で右クリック⇒サーチバーを追加
・検索バーの左にあるアイコンをクリック⇒検索バーの管理…⇒ニコニコ大百科を選択し、上の方にある「Properties」をクリック
・Search URLに先ほどのjavascriptコード()を張り付けて、「Parameter」を「Remove」ですべて消去。

これでCtr + K⇒Enterで本記事トップのブックマークレットと同じコードを起動可能。こうすることで、ブックマークバーを圧迫しなくて済みます。

・・・、これ俺以外に使う人いないだろうな。



と私と同じことを考えた人には、これをお勧めしておきます。
illstandのスタンドページ - StartComman

JavaScript - エラトステネスの篩シミュレータ

エラトステネスの篩 - Wikipediaにあるものを自分で作ってみたいなーと思ったので、実装してみました。

エラトステネスの篩シミュレータ

× 探索時間:[ms]
素数:

エラトステネスの篩シミュレータのソースコード

function p(s){
  document.getElementById('stdout').innerHTML += s + '<br>';
}
function getRandomInt(min, max){
  return Math.floor(Math.random() * (max - min + 1)) + min;
}
function fill(a, n){
  if(a instanceof Array){
    for(var i = 0; i < a.length; i++){
      a[i] = n;
    }
  }
}
function throughASieve(p){
  if(!(p instanceof Array)) return;
  
  var len = p.length;
  var border = Math.sqrt(len);
  for(var i = 1; i <= border; i++){
    if(p[i] == 1){
      var num = i + 1;
      for(var j = num * 2; j <= len; j += num){
        p[j - 1] = 0;
      }
    }
  }
}
run_demo = function(){
  var parentOfTable = document.getElementById('div');
  var stdout = document.getElementById('stdout');
  parentOfTable.innerHTML = '';
  stdout.innerHTML = '';
  
  var rowMax = document.getElementById('rowMax').value;
  var colMax = document.getElementById('colMax').value;
  var cellMax = rowMax * colMax;
  var prime = new Array(parseInt(cellMax));
  
  fill(prime, 1);
  throughASieve(prime);
  
  var cells = (function createTable(rowMax, colMax, opt_parent){
    try{
      if (rowMax < 1 || colMax < 1) throw 'createTable : Bouth rowMax and colMax should not be a negative number.';
    } catch(e){
      alert(e);
    }
    
    var parent = opt_parent || document.getElementsByTagName('body')[0];
    var cells = new Array(rowMax * colMax);
    var table = document.createElement('table');
    var tbody = document.createElement('tbody');
    var index;
    for(var i = 0; i < rowMax; i++){
      var row = document.createElement('tr');
      
      for(var j = 0; j < colMax; j++){
        index = parseInt(i * colMax + j);
        var cell = document.createElement('td');
        var cellText = document.createTextNode((index + 1));
        
        cell.style.border = '1px #666 solid';
        
        cell.appendChild(cellText);
        row.appendChild(cell);

        cells[index] = cell;
      }
      row.style.textAlign = 'center';
      tbody.appendChild(row);
    }
    table.style.borderCollapse = 'collapse';
    table.appendChild(tbody);
    parent.appendChild(table);
    
    return cells;
  })(rowMax, colMax, parentOfTable);

  var Color = {
    value : 0,
    changeColorMin : 60,
    changeColorMax : 80,
    nextColor : function(){
      this.value += getRandomInt(this.changeColorMin, this.changeColorMax);
    },
    toHsl : function(lightness){
      return 'hsl(' + this.value + ', 100%, ' + lightness + ')';
    }
  };
  
  var border = Math.floor(Math.sqrt(cellMax));
  var searchTime = document.getElementById('searchTime').value;
  (function paint(index){
    if(index + 1 > border) {
      return finish();
    }
    p((index+1));
    
    Color.nextColor();
    cells[index].style.backgroundColor = Color.toHsl('50%');
    
    var intervalId = window.setInterval((function(){
      var num = index + 1;
      var i = num * num;
    
      return function(){
        if(i > cellMax) {
          window.clearInterval(intervalId);
          while(prime[++index] != 1);
          return paint(index);
        }
        cells[i - 1].style.backgroundColor = Color.toHsl('75%');
        i += num;
      }
    })(), searchTime);
    
    function finish(){
      var intervalIdFinish = window.setInterval((function(){
        Color.nextColor();
      
        return function(){
          while(index < cellMax && prime[index] != 1) index++;
          if(index >= cellMax) {
            window.clearInterval(intervalIdFinish);
            return;
          }
          p((index + 1));
          cells[index].style.backgroundColor = Color.toHsl('50%');
        
          index++;
        }
      })(), searchTime);
    }
  })(1);
}

備考

シミュレータの実行中に「Run」を押すと、window.clearInterval()が実行されず素数の出力結果に前回実行時の素数が混ざって表示されます。

IE9ではhslがサポートされていないため、正しく動作しません。Firefox4, Google Chrome11, Opera11での動作は確認しました。

C言語-エラトステネスの篩 : Please Comment on My Codeこちらもどうぞ。

参考

JavaScript - テスト投稿

run_demo = function (that){
	function fill (a, n){
		if(a instanceof Array){
			for(var i = 0, l = a.length; i < l; i++){
				a[i] = n;
			}
		}
	}
	function eratos(p){
		var len = p.length;
		
		for(var i = 1; i <= Math.sqrt(len); i++){
			if(p[i] == 1){
				var num = i + 1;
				for(var j = num * 2; j <= len; j += num){
					p[j - 1] = 0;
				}
			}
		}
	}
	var val = that.previousSibling.value;
	var pre = that.nextSibling;
	pre.innerHTML = '';
	var prime = new Array(parseInt(val));
	
	fill(prime, 1);
	eratos(prime);
	
	var str = '';
	for(var i = 0, l = prime.length; i < l; i++){
		if(prime[i] == 1){
			str += (i + 1) + '<br>';
		}
	}
	
	pre.innerHTML += str + '<br>';
};


		

JavaScript - [疑問]windowオブジェクトについて

今日何となく勉強する気にならなくて、windowオブジェクトのプロパティにどんな名前のプロパティがあるのか何となく気になったので、下のコードを書いてみました。

実行結果を見てあれ?となりました。windowオブジェクトのプロパティにselfやtopやparentがあるのはわかるのですが、window.windowが存在していることに疑問を感じました。クライアントサイドjavaScriptではwindowオブジェクトがグローバルオブジェクトのようなものだと、「サイ本」に書いてあったからです。

window.window 赤字のwindowは一体どこに存在しているんだろう。続きを読む

JavaScript - [ メモ ] クロージャを使った関数を、プロトタイプオブジェクトのプロパティに設定したときと、インスタンスのプロパティにメソッドとして設定したときの関数の挙動の違い

プロトタイププロパティの勉強をしていて、クロージャを使った関数を、プロトタイプオブジェクトのプロパティに設定したときと、インスタンスのプロパティにメソッドとして設定したときの関数の挙動の違いを発見したので、そのメモです。続きを読む

JavaScript - toLocaleString() のIEと他のブラウザ間の違い

今「サイ本」を読んでいて配列の toLocaleString() の説明で、

 toString()メソッドのローカライズ版の toLocaleString()メソッドを実行すると、配列の要素の toLocaleString()メソッドを呼び出して、個々の要素を文字列に変換し、個々の文字列をロケール固有の区切り文字で区切ったリストを出力します。なお区切り文字がどの文字になるかは実装依存です。

David Flanagan 著『JavaScript 第 5 版』(オライリー・ジャパン発行)P121

とあり、ロケール文字ってなんだろうと思ったのがことの始まりです。実験のために書いたのが下のコードです。

var a = [1, "hello", 3.4e3, "world", Number.POSITIVE_INFINITY, "!"];
document.write(a.toLocaleString() +"<br />");
document.write(a.join() +"<br />");

このコードを試したブラウザは IE, Firefox, Google Chrome, Opera の4つです。Firefox, Google Chrome, Opera はほとんど同じ結果になりましたが、IE はちょっと違いました。

続きを読む

JavaScript備忘録

JavaScript を勉強していて、普段はあまり使いそうになく、そのうち忘れてしまいそうなものを記していきます。続きを読む
プロフィール

add20

ブクログ
RSSを購読
記事検索
最新コメント
スポンサードリンク
QRコード
QRコード
  • ライブドアブログ