JavaScript

配列の最大値を得る

昨日・今日と珍しくJavaScriptを書いていたところ、配列の最大値を例えばPythonのように、 numArray = [ 3, 1, 4 ] max(numArray) こんな風に書けないかと考えました。検索すると、 Math.max.apply(null, numArray); Math.max - JavaScript | MDN このapply…

スパムコメントを一掃する

スパムコメントを一括して消すツールを作った。 今まで、タブとスペースを繰り返し打つことで消していたが、それもいい加減面倒になってきたので、自動でやれるようにした。数百とか手動で消すレベルではない。はてなにスパムコメントは受付けない機能がある…

六面体の頂点をたどる(7)

固有値が求まらなかったので、数値的に求める。 ニュートン法でやってみた。 Array.prototype.value = function(x) { var v = this[this.length-1]; for(var i = this.length - 2; i >= 0; i--) v = v * x + this[i]; return v; }Array.prototype.differenti…

六面体の頂点をたどる(6)

六面体で同じように行列を作る。 ここで、行列の各成分を3倍すれば整数化できるので、その行列の固有値を考える。 この固有方程式は、 |A - λE| = 15120λ3+10080λ4-137484λ5-8916λ6+477972λ7 -192860λ8-753221λ9+591113λ10+497726λ11-643343λ12 -78020λ13+33…

六面体の頂点をたどる(4)

前回求めた漸化式に順番に値を代入して確率を具体的に求めた。それを以前と同じようにはじめて全頂点をたどった確率に直してグラフにした。回数が大きくなると、偶数回とその次の奇数回が同じ確率になる。また、2つ前の7/9の確率になるようである。 プログラ…

六面体の頂点をたどる(3)

同値な状態を一意に表すために次のようにしよう。現在の点は0に持ってくるように写像を施す。そのうえで、0を固定した回転・対称変換を施して、状態を表す整数が最も小さくなるものを正規の表現とする。状態を表す整数とは各頂点がすでにたどっていればその…

六面体の頂点をたどる(2)

この問題は、 という漸化式を解けばよい。 ここで、siは状態を表しており、psi,tは時刻tに状態siを取る確率、qsi→sjは状態siからsjに遷移する確率である。 状態とは、すでにたどった点の集合と今の点の位置の組合せである。状態は数多く存在し、その分漸化式…

六面体の頂点をたどる(1)

今年の京大2問目、 正四面体ABCDを考える。点Pは時刻0では頂点Aに位置し、1秒ごとにある頂点から他の3頂点のいずれかに、等しい確率で動くとする。このとき、時刻0から時刻nまでの間に、4頂点A、B、C、Dのすべてに点Pが現れる確率を求めよ。ただしnは1以上の…

何回コインを投げれば連続10回表が出るんだろう(2)

この計算は、浮動小数点数だと誤差がたまってくるが、幸い2進数では有限小数になるので、ある程度の桁までは正確に計算できる。 Arrayで、2048進数で考えるとプログラミングがやさしくなる。 例えば、3 + 11/2048 + 13/2048^2 → [ 3, 11, 13 ]とする。 10万…

JavaScriptのStringは値?

http://blog.livedoor.jp/dankogai/archives/50963275.htmlえー! http://d.hatena.ne.jp/odz/20071206/1196927108ここにあるようにReadOnlyなだけだと思ってた。 var str = "a"; var str2 = str; // アドレスをコピー var str3 = str.bold(); // 実体をコピ…

交通死亡事故(2)

前回、最も死亡者数の少なかった日は何人だったかを推定したが、 実際にはどうだったのだろうか。 ITARDAのサイトにそのデータがある。 例えば、http://www.itarda.or.jp/kouki/060101.html見て分かるように、 日付のファイルにその日の死亡者数が書かれてい…

ジャンケンで決着がつくまでの回数(7)

期待値E(n)をもう一度代数的に検討してみよう。 (P(n, 1) + ... + P(n, n-1))E(n) = 1 + P(n, 1)E(n) + ... + P(n, n-1)E(n-1) の左辺は、 (2n - 2)/3nE(n) 整理して、 ここで、 という母関数を考えると、 となる。 これを解くのは難しそうだが、 とりあえず…

ジャンケンで決着がつくまでの回数(6)

平均と分散を求めたので、 今度は正確な分布を求めよう。 n人でm回かかる確率をp(n,m)とすると、 1回で1人になる場合、2人になる場合、…をたし合わせて、 p(n,m) = P(n,1)p(1,m-1) + ... + P(n,n)p(n,m-1) (m > 1) p(n,1) = P(n,1) ここで、P(k,l)はk人から1…

ジャンケンで決着がつくまでの回数(4)

前回の、 (P(n, 1) + ... + P(n, n-1))E(n) = 1 + P(n, 1)E(n) + ... + P(n, n-1)E(n-1) にしたがってプログラムを書くと、 E(2) = 1.5 E(3) = 2.2500000000000004 E(4) = 3.214285714285715 E(5) = 4.485714285714287 E(6) = 6.219815668202768 E(7) = 8.64…

ジャンケンで決着がつくまでの回数(2)

ジャンケンを2〜10人で1万回を行う。 決着がつくまでにかかった回数の平均と標準偏差は次のようになった。9人を超えるあたりから急激に増えるようだ。 以下、ソース。

整数の四則演算(2)

シフト演算 // 382ms for(var i = 0; i 4 >> 1; }加算と同等。 除算 // 481ms for(var i = 0; i 4 / 2; }整数の範囲を外れてても同等。 // 473ms for(var i = 0; i 12345678900 / 3456789; }結果が64ビット整数の範囲を超えると遅くなる。 // 780ms for(var …

整数の四則演算(1)

基本的なところをおさえておく。 JScript5.6で、 いずれも100万回繰り返す。 ループ // 281ms for(var i = 0; i ; } 加算 // 375ms for(var i = 0; i 1 + 1; } // 384ms for(var i = 0; i 99999999 + 100000000; } // 401ms for(var i = 0; i 100000000 + 10…

多倍長整数の計算(5)

自乗の計算は、異なる積よりも速い。 f(x) = a0 + a1x + a0x2 + ... f(x)2 = a02 + 2a0a1x + ( 2a0a2 + a12)x2 + ... ほとんどの場合で同じ乗算が2回行われる。 自乗にすると、8秒と1/2になった。

多倍長整数の計算(4)

繰り上がりの処理が楽になると、 繰り上がり計算を毎回しなくても済むようになる。 1万以上になると、すなわち加算すると、 ほぼ毎回繰り上がり計算をしていたが、 整数は21億ちょっとまであるはずなので(確かめていない)、 20億以上になってはじめて繰り…

多倍長整数の計算(3)

前回の関数は、改良して、70秒→48秒となった。 前回は、被乗数を下の桁から順に計算したが、 今回は積を下の桁から計算する。 そうすると、場合わけが少しややこしいが、 繰り上がりの処理が少し楽になる。 42秒となった。

多倍長整数の計算(2)

タイトル変えた。 1は前日の記事ということで。2乗していったほうが速いだろうということでその関数を作ってみた。 今度は4桁で区切って計算している。 var NFIGURE = 4; var INT_MAX = Math.round(Math.pow(10, NFIGURE));function multiple(x, y) { var z …

CSV用データベースライブラリ(7)

総和とほとんど同じだが、平均は次のように取る。 var d = data.select("名前", "太郎"); var m = d.average("計").getValue(0, "計")関数を用いることもできる。 var f = function(x) { return x * x; } var d = data.select("名前", "太郎"); var m = d.av…

CSV用データベースライブラリ(6)

総和は次のように取る。 var d = data.select("名前", "太郎"); var sum = d.sum("計").getValue(0, "計");関数を用いることもできる。 var f = function(x) { return x * x; } var d = data.select("名前", "太郎"); var sum = d.sum("計", f).getValue(0, …

CSV用データベースライブラリ(5)

異なる値のみ取り出すときは、次のようにする。 var data = new dataSet(str, true); var d = data.unique("名前"); var buff = ""; for(var i = 0; i buff += d.getValue(i, 0) + "<br />"; } 〜.innerHTML = buff;異なる名前を集める。 項目は名前だけになる。 …

CSV用データベースライブラリ(4)

データは次のように選択する。 var data = new dataSet(str, true); var d = data.select("名前", "太郎"); var buff = ""; for(var i = 0; i buff += d.getValue(i, 0) + "<br />"; } 〜.innerHTML = buff;もちろんこれでもよい。 var d = data.select(0, "太郎")…

CSV用データベースライブラリ(3)

データは次のように得る。 var d = new dataSet(str, true); var buff = ""; for(var i = 0; i buff += d.getValue(i, 0) + "<br />"; } 〜.innerHTML = buff;こうすると、 太郎 花子 太郎 花子 といった具合に表示されるだろう。 getValueメソッドの第1引数はレコ…

CSV用データベースライブラリ(2)

データは次のように持つ。 function dataSet(str, header) { this.header; this.data = [ ]; ... }引数は、strがテキスト全体。 これを行ごとに配列で持って、さらにカンマで区切って配列にする。 headerはヘッダ行があるか。 前回のテキストはヘッダ行あり…

CSV用データベースライブラリ(1)

例えば、Ajaxでカンマ区切りのテキストファイルを読んでデータベースとして使いたいとする。 そのときに簡単に使えるライブラリを作ってみる。 例えば、次のようなテキストファイルを用意する。 名前,試験,国語,算数,理科,社会,計 太郎,1,70,80,90,75,315 花…

フローチャートを描く(7)

がんばったが時間切れ。 http://www.geocities.jp/pxu02524/personal/flowchart6.htm あと位置の調整。 しかし、もう修正はしない。

フローチャートを描く(6)

矢印は、始点・終点・始点での方向を与えると 一意的にパスが決まるようにする。 http://www.geocities.jp/pxu02524/personal/flowchart5.htm 数字をいじると下の処理の要素が横に動き、 それにつれて矢印も動く。