双子座線型群

Искусственный язык / Программирование / Шахматы / Математика

月別: 11月 2015

JavaScriptでtr

2015-11-06 by 古城みの コメントする

JavaScriptでPerlのtrを使えるようにしました。

  • perl_tr.js-v1.1.1.zip
    • perl_tr.js
    • perl_tr.min.js

文字リスト(第二,第三引数)中でバックスラッシュ(円記号)を使う場合、各バックスラッシュについてエスケープ(\→\)する必要があるので、Perlに対して倍の量が必要になります。

// Perl
$str =~ tr/A\\Z/a\-z/;

// JavaScript
perl_tr( str, 'A\\\\Z', 'a\\-z' );

以下動作例です。

// 'AAABBBefg' を返す
perl_tr( 'AAabcdefg', 'abcd', 'AB' );

// 'BBabcdBBB' を返す
perl_tr( 'AAabcdefg', 'abcd', 'AB', 'c' );

// 'AAABefg' を返す
perl_tr( 'AAabcdefg', 'abcd', 'AB', 'd' );

// 'AAABefg' を返す
perl_tr( 'AAabcdefg', 'abcd', 'AB', 's' );

// 'J S ' を返す
perl_tr( 'JavaScript', 'A-Z', ' ', 'cs' );

リリースノート

  • v1.1.1.zip [2015-11-09] – コードを整理
  • v1.1.0.zip [2015-11-08] – バックスラッシュの扱いを整備
  • v1.0.0.zip [2015-11-06] – 公開
カテゴリー: プログラミング, モジュール タグ: JavaScript, Perl

JavaScriptでstrtr

2015-11-05 by 古城みの コメントする

PHP の strtr を JavaScript で使えるようにしました。ここで出てる例と同じ結果を返すので多分問題ないと思います。

  • php_strtr.js-v1.0.1.zip
    • php_strtr.js
    • php_strtr.min.js
// 'hello all, I said hi'を返す
php_strtr( 'hi all, I said hello', {
    'h'     : '-',
    'hello' : 'hi',
    'hi'    : 'hello'
});

リリースノート

  • v1.0.1 [2015.11.10] – コードを整理
  • v1.0.0 [2015.11.05] – 公開
カテゴリー: プログラミング, モジュール タグ: JavaScript, PHP

JavaScriptでガンマ関数

2015-11-01 by 古城みの コメントする

ここの下の方にあるランチョス近似のコード(Python)を JavaScript にしてみた。

/*
 * Γ(x) = (x - 1)! = Gamma(x)
 */
var Gamma = (function()
{
    var p = [
        676.5203681218851,
        -1259.1392167224028,
        771.32342877765313,
        -176.61502916214059,
        12.507343278686905,
        -0.13857109526572012,
        9.9843695780195716e-6,
        1.5056327351493116e-7
    ];
    var g = 7;

    function Gamma( z )
    {
        if( z < 0.5 ){
            return Math.PI/( Math.sin(Math.PI*z)*Gamma(1-z) );
        }

        z --;
        var x = 0.99999999999980993;

        for( var i=p.length; i--; ){
            x += p[i] / (z + i + 1);
        }

        var t = z + g + 0.5;
        var G = Math.sqrt(Math.PI*2) *Math.exp( (z+0.5)*Math.log(t)-t ) *x;

        if( Math.floor(z) === z ){
            return Math.round( G );
        } else {
            return G;
        }
    }

    return Gamma;
})();

少し書き換えて対数ガンマ関数を計算できるようにしたものも置いておきます。

/*
 * ln Γ(x) = GammaLN(x)
 */
var GammaLN = (function()
{
    var p = [
        676.5203681218851,
        -1259.1392167224028,
        771.32342877765313,
        -176.61502916214059,
        12.507343278686905,
        -0.13857109526572012,
        9.9843695780195716e-6,
        1.5056327351493116e-7
    ];
    var g     = 7;
    var LN_PI = Math.log( Math.PI );

    function GammaLN( z )
    {
        if( z < 0.5 ){
            return LN_PI -Math.log(Math.sin( Math.PI*z )) -GammaLN(1-z);
        }

        z --;
        var x = 0.99999999999980993;

        for( var i=p.length; i--; ){
            x += p[i] / (z + i + 1);
        }

        var t = z + g + 0.5;
        return ( LN_PI+Math.LN2 )/2 +Math.log(x) +(z+0.5)*Math.log(t) -t;
    }

    return GammaLN;
})();

ついでに逆数を計算できるようにしたものも。

/*
 * 1/Γ(x) = GammaInv(x)
 */
var GammaInv = (function()
{
    var p = [
        676.5203681218851,
        -1259.1392167224028,
        771.32342877765313,
        -176.61502916214059,
        12.507343278686905,
        -0.13857109526572012,
        9.9843695780195716e-6,
        1.5056327351493116e-7
    ];
    var g = 7;

    function GammaInv( z )
    {
        if( z < 0.5 ){
            return Math.sin(Math.PI*z) /( Math.PI*GammaInv(1-z) );
        }

        z --;
        var x = 0.99999999999980993;

        for( var i=p.length; i--; ){
            x += p[i] / (z + i + 1);
        }

        var t = z + g + 0.5;
        return Math.exp( t-(z+0.5)*Math.log(t) ) /Math.sqrt(Math.PI*2) /x;
    }

    return GammaInv;
})();
カテゴリー: プログラミング, モジュール タグ: JavaScript, 数値計算, 数学

プロフィール

古城みの

リンク

  • 線型結界(サイト)
  • Twitter
  • Pixiv
  • SoundCloud

最近の投稿

  • 詰めシェルトの解答
  • tiv 1
  • シェルトの指し手表記
  • シェルトの対局記録
  • 高さ実数のテトレーション

最近のコメント

  • シェルトの対局記録 に シェルトの指し手表記 – 双子座線型群 より
  • JavaScriptでparse_str(クエリ文字列のパース) に JavaScriptでhttp_build_query より

アーカイブ

  • 2018年2月
  • 2018年1月
  • 2017年2月
  • 2016年10月
  • 2016年1月
  • 2015年12月
  • 2015年11月
  • 2015年9月
  • 2015年8月
  • 2014年9月

カテゴリー

  • プログラミング
  • ボードゲーム
  • モジュール
  • 制作
  • 告知
  • 数学
  • 棋譜

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Copyright © 2022 双子座線型群.

Omega WordPress Theme by ThemeHall