miscの最近のブログ記事

コード例は上がperl、下がvimコマンド

zero-width positive look-ahead: "abcdabcabcde" の中で 後ろに"cd"が付く"ab"だけを"ZZ"に変更したい。 ("ZZcdabcZZcde")

s/ab(?=cd)/ZZ/g;
:s/ab\(cd\)\@=/ZZ/g

zero-width negative look-ahead: "abcdabcabcde" の中で後ろに"cd"が付かない"ab"だけを"ZZ"に変更したい。("abcdZZcabcde")

s/ab(?!cd)/ZZ/g;
:s/ab\(cd\)\@!/ZZ/g

zero-width positive look-behind: "abc123ab123" の中で "abc"に続く "123" を "999" に変更したい。 ("abc999ab123")

s/(?<=abc)123/999/g;
:s/\(abc\)\@<=123/999/g;

zero-width negative look-behind: "std::"が付いてない"cout" を "std::cout" に変更したい。

s/(?<!std::)cout/std::cout/g;
:s/\(std::\)\@<!cout/std::cout/g;

最後のだけやけに具体的なのはそれがやりたくて調べてたからです。

後、別に不便してるわけじゃないけど、vimの正規表現ってnon-capture grouping ってできないのかなぁ..

元ネタ.. は消えてるけど、 twitter で @yuyarin が「ハッシュタグ検索の結果をダラダラ流しておく何か」を募集してたので作ってみた。というお話。

ブツ: twittersearchstream.html

Twitter検索 のAPIを定期的に呼んで返ってきたのを表示させてるだけです。

URIやハッシュタグに自動的にアンカーをつけることもしないし、post時刻も表示しない。
本当にだらだら流しておくためだけのつーるです。

ネタ元 に触発されて色々one-linerで書いてみた。 お題としては「100万回乱数生成を行いその平均値を計算する」です。

Perl (5.10.1)

perl -MList::Util=sum -E 'say((sum map rand,1..1e6)/1e6)'

List::Util++

Python (2.6.4)

python -c 'import random as r;print sum([r.random() for x in xrange(1000000)])/1e6'

xrange(1e6)だとwarningが出るので、仕方なく若干長めに。

Ruby (1.8.7)

ruby -e 'p 1000000.times.reduce{|r,i|r+rand()}/1e6'

sumはなかったけどreduceが組み込みのおかげでやたらと短い

PHP (5.2.12)

php -r 'function r1($i){return mt_rand()/mt_getrandmax();} echo array_sum(array_map("r1",range(1,1e5)))/1e5;'

見た目も残念な上に 1e6 だと 何故か動かなくて2重に残念な子でした。

Gauche (0.8.13)

gosh -usrfi-1 -E 'print (/. (fold + 0 (map (lambda(x) (/ (sys-random) RAND_MAX)) (iota 1e6))) 1e6)'

久し振りにScheme書いたよ。

前記事 のYahooPipesで提供されてるBadge以外を使う場合のちょっとしたデモです。

TwitpicにデータがあるTwitterIDを入力してRunボタンを押すと↓に最新五件のthumbnailが出てきます。

TwitterID:

    お年玉付き年賀はがきの当選番号が昨日発表されてたみたいですね。

    というわけで、 チェッカを作ってみました。

    # 何か当選番号も年賀状も少ないんで、目で確認した方が早いんじゃないかとか思わなくもないですが

    とかいうものを作ってみました。-> Twintersection

    Twitter上の「あの子とあの子に共通なFollower」とか「あの子のmutual friends」とかが割と簡単に調べられます。
    p. めんどくさいから TwitterAPIを利用する都合で、1ユーザあたり最大100件ずつ(最新100件)しかFollower/Followingを読み込みませんが、まぁ、何とかなるもんです。(ぇ

    何かバグってたらコメントなり twitterで@するなどして教えていただけると助かります。

    今日見たコード。(単語は適当に無難なものに差し替えた)

    def func(filename)
      category="(cat1|cat2)"
      ver2="(\d+)\.(\d+)"
      ver3="(\d+)\.(\d+)\.(\d+)"
      targz="\.tar\.gz"
      case filename
      when /pfxTypeA-#{category}-(.*)-#{ver3}-(.*)#{targz}/
        [ :TypeA, Regexp.last_match[1], Regexp.last_match[6],
          Regexp.last_match[3],
          Regexp.last_match[4],
          Regexp.last_match[5], ]
      when /pfxTypeB-#{category}-(.*)-#{ver3}-(.*)#{targz}/
        [ :TypeB, Regexp.last_match[1], Regexp.last_match[6],
          Regexp.last_match[3],
          Regexp.last_match[4],
          Regexp.last_match[5], ]
      when /pfxTypeC-#{ver2}-(.*)#{targz}/
        # 以下略
      end
    end

    特定のフォーマットにしたがって命名されたファイル名を要素毎に分解するrubyのコードだけど、最初のwhen節を読み終わるまでに視線がが上下に2,3往復、キャプチャの括弧と後方参照の対応を指差し確認すること2回程。いやはや読みづらい。

    今年も LLイベント の季節が近づいて参りました。 今年は LLTV ということでTelevisionがテーマのようです。

    今週頭からチケットは販売されていて まだ売り切れてはいないと思うので、Perl, Ruby, Python その他軽量言語に興味をお持ちの方は是非にお足をお運びいただければと思います。毎回面白いよ!

    ハノイの塔 をたくさんの言語で。

    唐突に書きたくなって、頑張って色々書いてみた。(残念ながらスタック型言語(Brainf*ckとかwhitespaceとかは無い)

    ハノイの塔回答プログラムのポイントはおおよそ2点

    • 関数/サブルーチン等の再帰呼び出し処理
    • 経過を出力する際の文字列フォーマッティング

    それでは、どうぞ

    送られてきたVB.netサンプルコード

    Public Function hoge() As Integer
      On Error GoTo Err_Function
    
      ' 処理
      If 途中で抜ける条件 Then
        GoTo Exit_Function
      End If
      If 何かエラー Then
        GoTo Err_Function
      End If
    
      hoge = S_OK
    
    Exit_Function:
      ' 終了処理
      Exit Function
    
    Err_Function:
      ' エラー処理
      hoge = S_ERR
      Goto Exit_Function
    
    End Function

    ※ S_OK とか S_ERR ってのは「正常/異常を表す定数」です。0 と -1 です。それ以外の値は返りません

    トップページが寂しくなってきたのでとりあえず投下

    さて、どうやりましょ。ビギナなら

    void func(int cond)
    {
      int n;
      if ( cond )
        n = 0;
      else
        n = 1;
    }

    なんてのもありですかね。しかしこの程度なら3項演算子を使って

    void func(int cond)
    {
      int n = cond ? 0 : 1;
    }

    の方がスマートですね。しかし条件が複雑になってくると3項演算子では読みにくくなるので、前者の方がよいかもです。

    rubyってもruby-langではなく、振り仮名の方のrubyです。

    ネタ元→ 404 Blog Not Found: CSS - ルビ再び

    dankogai さんが 素晴らしいCSSを作ってくれたので、早速 パクら 参考にさせて頂きました。大いに感謝。

    っても最近1箇所使っただけなんですけどね。

    ゆの in language を見て、やりたいと思ったけど、既にPerlとC++は解答が挙がってたので、shell script で挑戦。

    function X() {
      MESSAGE="ひだまりスケッチ365"
      while [ "$1" != "" ]; do
        if [ "$1" != "X" -a "$1" != "/" -a "$1" != "_" -a "$1" != "<" ]; then
          MESSAGE="$MESSAGE $1"
        fi
        shift
      done
      echo $MESSAGE
    }
    
    X / _ / X '^H<'^H "来週も見てくださいね!"

    shでは< はリダイレクトになってしまうので、上のコードではクオートした< の周りにコントロールコードのBACKSPACEを仕掛けてます。エディタ等でみると '^H<'^H だけど、catだとちゃんと X / _ / X < "..." に見えますです。はい。

    <のクオート/エスケープを止む無しとすると、もうちょっと見やすく

    X / _ / X \< "来週も見てくださいね!"

    になります。

    プログラムコードの読みやすさ向上のため、highlight.js を導入してみました。

    何かヒューリスティックによる検知が失敗してたり、言語を指定してるのにキーワードハイライトが利いてないとかいうのもありますが、その辺は大人の対応をお願いします(ぇ

    Ruby公式ドキュメントの trap::スコープ、制御構造 より、

    ・ローカル変数は本当にローカル。Perl の my とかとは違う
    # Ruby
    local = "hoge"
    def hoge
      print local, "\n" # 未定義。エラー
    end
    hoge
    
    # Perl
    my $local = "hoge";
    sub hoge {
        print $local, "\n"; #=> hoge
    }
    hoge;
    

    ruby の罠コード(つーか自分が嵌ったコード..)

    i = 100
    while --i
      print "#{i}\n"
    end

    まずは環境の整理。

    インストール先dir
    レジストリの HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\ Cygwin\mounts v2\/\native の値(REG_SZ, ファイル区切りは'\') (以降 CYGWIN.)
    セットアップ情報格納dir
    CYGWIN/etc/setup
    セットアップ情報dirにあるファイル
    timestamp
    setup.ini のタイムスタンプ?
    installed.db
    インストールされているモジュールのリスト
    last-action
    最後に選択したAction ("Download,Install", "Install", "Download" のどれか、かな)
    last-cache
    最後に利用したキャッシュdir (nativeフォーマット. 例えばd:\tmp\cygwin\setup.exe を使ったんならデフォルトは d:\tmp\cygwin となる.)
    last-connection
    接続の種類 ("Direct", ????)
    last-mirror
    最後に利用したmirrorサーバ(2つ以上選択していた場合は1行づつ出力される)。ちなみに、各サーバに対応するキャッシュディレクトリはlast-cache\URLエンコードされたURLとなる。
    モジュール名.lst.gz
    インストールされたファイル一覧? (CYGWINからの相対パス(POSIXスタイル))
    その他、セットアップに関するファイル
    CYGWIN\etc\preremove\モジュール名.sh
    アンインストール前に起動するシェルスクリプト? (cygwin shell内で絶対パス(/etc/preremove/***.sh)で起動?)
    CYGWIN\etc\postinstall\モジュール名.sh
    インストール後に起動するシェルスクリプト? (cygwin shell内で絶対パス(/etc/postinstall/***.sh)で起動?) (動かし終わったらファイル名の末尾に .done を付けるっぽい)

    preremove と postinstall の起動の仕方
    CYGWIN\bin\bash.exe --login -c ファイル名


    fml メモ [misc]

    | コメント(0)

    管理者追加コマンド
    admin addadmin <address>

    既に居るメンバに管理権限追加
    admin addpriv <address>

    Java-1

    java.lang.Comparableな型を作って、
    Arrays#sort(Object[])
    Collections#sort(List)
    逆順はCollections#sortしてからCollections#reverseか,
    Collections#sort(List, Collection.reverseOrder())
    しかし、Arrays#reverseはないので、
    Arrays#sort
    Arrays#asList
    Collections#reverse
    List#toArray
    Arrays#asList
    Collectionの逆順→
    List#toArray ..
    jdk5 では Collections#reverseOrder(Comparator)が使える。

    Java-2

    java.util.Comparator なクラスを作成して、
    Arrays#sort(Object[], Comparator)
    Collections#sort(List, Comparator)
    逆順は、逆順用Comparatorを作ってやるしかない..
    jdk5 では Collections#reverseOrder(Comparator)が使える。

    C++-1

    template<class T> bool ::operator<(T, T) を作成して、
    std::sort(RI, RI)
    std:listlist::sort()
    逆順にする場合は std::not2(std::less()) かなぁ...

    C++-2

    std::binary_function<T, T, bool> なクラスを作成して、
    std::sort(RI, RI, Pred)
    list::sort(Pred)
    # bool operator()(T, T) が実装されてたらそれでいいけど
    逆順は not2(Pred)で

    C

    int (*comp)(const void*, const void*) な関数を用意して
    qsort(void* size_t メンバ数, size_t sizeof(メンバ), comp)
    comp は 2引数に対して <,=,> のそれぞれの場合に-1,0,1を返す。

    Perl

    sort SUBNAME LIST
    sort [BLOCK] LIST
    BLOCKでは比較対象は$a$b固定.
    BLOCKの評価値は cmp, <=> と同じ基準

    Python

    a.sort([cmp/pred]) とか
    a.sort(lambda x,y: xとyについてごにょごにょ) とか
    らしい。
    逆順はa.reverse()(aは配列クラスのオブジェクト)

    Ruby

    a.sort とか
    a.sort {|x,y| xとyについてごにょごにょ} とか
    らしい。
    逆順はa.reverse[!](a はArrayクラスのオブジェクト)

    注:PythonとRubyについてはググってみた程度。

    AUTHOR

    • turugina (虎王 剱奈)
    • E-mail: turugina {at} floralcompany.jp
    • pixiv
    • ニジエ

    2014年5月

            1 2 3
    4 5 6 7 8 9 10
    11 12 13 14 15 16 17
    18 19 20 21 22 23 24
    25 26 27 28 29 30 31

    アーカイブ

    OpenID対応しています OpenIDについて
    Powered by Movable Type 5.2.10

    - 警 告 -

    本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

    上記を理解した上で非表示のブログパーツを表示する
    あわせて読みたいブログパーツ
    ついった
    drawr/pixiv/twitpic