さっきのやつのPerl版

Boostで正規表現でやったのを一応Perlでも書いておく.

#!/usr/bin/env perl
$test="abcdd";
if( $test =~ m/a(.*)/ ){print($1);};
print("\n");
if( $test =~ m/a(.*)d/ ){print($1)};
print("\n");
if( $test =~ m/a(.*?)/ ){print($1)};
print("\n");
if( $test =~ m/a(.*?)d/ ){print($1)};
print("\n");

ついでにRubyでも.

#!/usr/bin/env ruby
test="abcdd"
puts $1 if test=~/a(.*)/
puts $1 if test=~/a(.*)d/
puts $1 if test=~/a(.*?)/
puts $1 if test=~/a(.*?)d/

Boostで正規表現

今日,I先生の正規表現についてのレクチャーを聞いた.で,PerlやRubyでやるのでは芸がないので,C++で正規表現を扱うプログラムを書いてみた.といってもC++で自前で作るのはアホなので,boost::regexを使ってみた.

#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main(){
std::string test="abcdd";
boost::regex r1("a(.*)");
boost::regex r2("a(.*)d");
boost::regex r3("a(.*?)");
boost::regex r4("a(.*?)d");
std::cout << "src: " << test << std::endl;
boost::smatch m;
if(boost::regex_search(test, m, r1)) std::cout << m.str(1) << std::endl;
if(boost::regex_search(test, m, r2)) std::cout << m.str(1) << std::endl;
if(boost::regex_search(test, m, r3)) std::cout << m.str(1) << std::endl;
if(boost::regex_search(test, m, r4)) std::cout << m.str(1) << std::endl;
return 0;
}

Processingやってみた

Processingという言語がある.Javaで作られた実行環境上で動く超簡単な言語らしい.手軽に図を書いたり,音鳴らしたり,WebCamの画像処理したりできるぽい.

こことかこことかが参考になるかも.

Processingを知ったきっかけは,本屋で

を見つけて.膨大なデータ可視化とかが簡単にできるの?と思って色々調べてみた(本は買ってない…).

で,Webで調べながら適当にコード書いてみた.基本的には文法はJavaと同じ.void setup();やvoid draw();の関数を記述すると,一発実行して終了ではなく,処理がループされるようになる.Javaでいうところの,Runnableをimplementして,run()の中でwhileループ回してる状態.そのrun()の冒頭でsetup()が実行され,つづけてwhile文の中で,上記draw()が呼び続けられるイメージ.

イベントハンドラ的なものもあって,マウスイベントやキーイベントなどは,それ用の関数(例えばvoid mousePressed())を定義するだけでOK.

簡単な例を作ったので貼っておく.

int[] x,y,u,v; // 配列の宣言.Javaと同じ
int width, height; // 変数の宣言
int num=100; // 変数の宣言と初期化
int mouseselect;
// 初期化陽関数
// 実行時,一度だけ呼ばれるっぽい
void setup()
{
mouseselect=0;
width=640;
height=480;
size(width,height);
// 配列の初期化.Javaと同じ
x=new int[num];
y=new int[num];
u=new int[num];
v=new int[num];
for(int i=0;i<num;i++){ // forループ.()内でループ用の変数を宣言できる
x[i]=0;
y[i]=0;
u[i]=5;
v[i]=5;
}
}
// 自前の関数
void drawInit(){
background(0);
text("クリックするとマウスの位置へボールが移動",300,200);
}
// 自前の関数.戻り値,引数とも自由にできそう
void drawPoints(int i){
if(x[i]<0 || x[i]>=width)u[i]*=-1;
if(y[i]<0 || y[i]>=height)v[i]*=-1;
x[i]+=u[i];
y[i]+=v[i];
ellipse(x[i],y[i],30,30);
}
// 画面描画用の関数
// 常に繰り返し呼ばれる?
void draw()
{
drawInit();
for(int i=0;i<num;i++) drawPoints(i);
}
// マウスイベント(mousePressed)の関数
// マウスPress後に呼ばれる
void mousePressed()
{
mouseselect+=1;
if(mouseselect>=num) mouseselect=0;
x[mouseselect]=mouseX;
y[mouseselect]=mouseY;
}