#!/usr/local/bin/perl

#========================変数入力=====================================

#↓解析するテキストファイル。
#　"mekuraniji.txt"は自由に変更できます。
$text_name		= "kana-sample.txt";

#↓「異手」「同手同段」以外で押しやすい指運（特殊良指運）。
#　「|」で区切って入力してください。
$goodkey	= "ef|ra|ta|ar|at|av|ab|sv|sb|dv|sr|st|fq|fw|fe|fz|gq|gw|ge|gz|zf|zg|ca|va|vs|ba|bs|bd|uk|ul|u;|ij|i;|oj|pj|hi|ho|hp|ji|jo|jp|kp|;n|;m|ni|no|np|mo|mp";

#↓出力ファイル名。(先頭に>をつけると文末に書き込みます。)
$output		= "result.txt";
#========================読み込み=====================================
open (FH,"<$text_name");
@textc=<FH>;
close(FH);

foreach (@textc) {
	$text .= $_;
}


#========================キーボード変換===============================
$_ = $text;

$hairetumai="虞美人草配列";
s|あ|ke|g;	s|い|l|g;	s|う|j|g;	s|え|df|g;	s|お|di|g;
s|か|s|g;	s|き|n|g;	s|く|h|g;	s|け|dk|g;	s|こ|dl|g;
s|さ|ka|g;	s|し|i|g;	s|す|kd|g;	s|せ|kg|g;	s|そ|kv|g;
s|た|e|g;	s|ち|u|g;	s|つ|o|g;	s|て|w|g;	s|と|f|g;
s|な|g|g;	s|に|v|g;	s|ぬ|dv|g;	s|ね|km|g;	s|の|a|g;
s|は|dj|g;	s|ひ|dm|g;	s|ふ|d;|g;	s|へ|b|g;	s|ほ|t|g;
s|ま|r|g;	s|み|dh|g;	s|む|du|g;	s|め|ds|g;	s|も|ks|g;
s|や|z|g;	s|ゆ|x|g;	s|よ|c|g;
s|ら|kf|g;	s|り|kj|g;	s|る|m|g;	s|れ|kw|g;	s|ろ|kl|g;
s|わ|kr|g;	s|を|do|g;	s|ん|;|g;
s|が|sG|g;	s|ぎ|nG|g;	s|ぐ|hG|g;	s|げ|kG|g;	s|ご|lG|g;
s|ざ|aG|g;	s|じ|iG|g;	s|ず|dG|g;	s|ぜ|gG|g;	s|ぞ|vG|g;
s|だ|eG|g;	s|ぢ|uG|g;	s|づ|oG|g;	s|で|wG|g;	s|ど|fG|g;
s|ば|jG|g;	s|び|mG|g;	s|ぶ|;G|g;	s|べ|bG|g;	s|ぼ|tG|g;
s|ぱ|dj|g;	s|ぴ|dm|g;	s|ぷ|d;|g;	s|ぺ|b|g;	s|ぽ|t|g;
s|ぁ||g;	s|ぃ||g;	s|ぅ||g;	s|ぇ||g;	s|ぉ||g;
s|ゃ|z|g;	s|ゅ|x|g;	s|ょ|c|g;
s|っ|o|g;	
s|「| q|g;	s|」|/ |g;
s|、|, |g;	s|。|. |g;	s|\Qー＼E|:|g;
s|？|p |g;	s|・| y|g;


print $_;	#うまく変換できているか目視で確認。
s|[^a-zA-Z,\./`;:]| |g;	#変換できなかった部分の除去。打鍵の切れ目とする。
s/(　| ){1,}/S/g;
$text=$_;

s|[^G]||g;	#親指打鍵のカウント
$shift=length($_);
$_=$text;
s|G||g;
$text = $_;

#ここから計算
s|S||g;
$dtext =$_;

#========================打鍵数計測===================================
$daken = length($dtext);
$p_daken= length($dtext)-(length($text)-length($dtext))-1;

#========================交互計測===================================
$ttext = $text;
$ttext =~ s|[qwertyasdfgzxcvb]|0|g;
$ttext =~ s|[yuiop\`hjkl;:nm,\./]|1|g;

#左手→右手
$lrtext = $ttext;
$lrtext =~ s/01/a/g;
$lrtext =~ s/[^a]//g;
$lratext = length($lrtext);

#右手→左手
$rltext = $ttext;
$rltext =~ s/10/a/g;
$rltext =~ s/[^a]//g;
$rlatext = length($rltext);

#左手→左手
$lltext = $ttext;
$lltext =~ s/10/a/g;
$lltext =~ s/S0/a/g;
$lltext =~ s/[^0]//g;
$llatext = length($lltext);

#右手→右手
$rrtext = $ttext;
$rrtext =~ s/01/a/g;
$rrtext =~ s/S1/a/g;
$rrtext =~ s/[^1]//g;
$rratext = length($rrtext);

$kougo = $lratext+$rlatext;			#交互打鍵数 = (右手→左手)+(左手→右手)
$p_kougo = int $kougo/$p_daken*1000;	#交互率 = (交互打鍵/全打鍵)。※小数点以下切捨ての為1000倍した。
$p_kougo = $p_kougo/10;				#桁合わせ

#========================アルペジオ計測=============================
#アルペジオ = （同列打鍵）-（同列同指打鍵）
#まずは「同列同指打鍵」数
$_ = $text;
s/aa|bb|cc|dd|ee|ff|gg|hh|ii|jj|kk|ll|mm|nn|oo|pp|qq|rr|ss|tt|uu|vv|ww|xx|yy|zz|,,|\.\.|;;|\/\/|``|::|rt|tr|fg|gf|vb|bv|yu|uy|hj|jh|nm|mn|p`|`p|;:|:;/7/g;
s/[^7]//g;				#一旦「7」と置いてから関係無いものを取り除く
$btext = length($_);	#同列同指打鍵数（同列だけどアルペジオでない）

#次に「同列打鍵」数
$_ = $text;
s|[qwert]|0|g;	s|[asdfg]|1|g;	s|[zxcvb]|2|g;
s|[yuiop`]|3|g;	s|[hjkl;:]|4|g;	s|[nm,\./]|5|g;

s/(00)|(11)|(22)|(33)|(44)|(55)/7/g;	#同列打鍵を「7」と置いておく
s/[^7]//g;								#「7」以外を取り除いたものが同列数
$barp = length($_);						#同列打鍵数（アルペジオ＋同指）


#アルペジオ = （同列打鍵）-（同列同指打鍵）
$arpeggio = $barp - $btext; #アルペジオ数

$arpeggio = length($_);					#アルペジオ数
$p_arpeggio = int $arpeggio/$p_daken*1000;
$p_arpeggio = $p_arpeggio/10;			#アルペジオ率

#========================特殊良指運計測=============================
$good = $text;
$good =~ s/$goodkey/7/g;
$good =~ s/[^7]//g;

$good = length($good);	#特殊良指運数
$p_good = int $good/$p_daken*1000;
$p_good = $p_good/10;	#特殊良指運率

#=================連接測定====================================
#|で区切られた区間が一つの鍵からの連接。
#先頭はその鍵自身、次の四つは同指異鍵に予約、あと五つまで設定できます。スペースで区切ります。
$_ ='q a z   wer f t sdgv xcb|w s x   erf t adg v qzcb|e d c   wf ar tsgv q zxb|r f t gv b we a q sdz xc|t f rg v b wea q sd z xc|a z q   edf wrsgv t xc b|s x w   df agv er tcb qz|d c e   sfv ag qwrt zx b|f v gr b t we asd z q xc|g f v b rt wea sd z q xc|z a q   dfv g xcb we rt|x s w   cv fzb adg e qrt|c d e   xv zb asf werg qt|v f b g rt asd zxc w e q|b f v g rt asd z xc we q|y j u h nm io; p kl ,./ `:|u j h y nm oi p; kl ,./ @:|i k ,   oj; hnm up: y` ,./|o l .   ij hnm; up y`: ,./|p ; ` : / ij uoh nmk yl ,.|` ; p : / ioj uh nm kl y,.|h j n m uy io; kl ,./ p `:|j m n h yu io kl; p `: ,./|k , i   jlm h;n o yup:` ./|l . o   jk; nm hi: yup` ,/|; : / p ` ijk ol nm huy ,./|n j m h yu io kl; p `: ,./|m j n h yu kl; io ,./ p `:|, k i   m./ nl; j: hio yup`|\. l o   m,/ njk hui; p y`:|/ ; : p ` m,. nkl j hio yu';
@rensetu=split(/\|/,$_);
@rensetu_r=@rensetu;
foreach(@rensetu){
@x=split(/ /,$_);
$y=@x[0];

$_=$text;
s|($y)($y)|0($y)|g;	s|($y)0|00|g;	s|($y)($y)|0($y)|g;
$t=$_;
$t=~s|[^0]||g;
$t=length($t);
$douyubi+=$t;
$ren{$y}=$x[0]."	$t	";

for($z=1;$z<5;$z+=1){
if($x[$z] eq ''){$t=''}else{
s|($y)[($x[$z])]|$z|g;
$t=$_;
$t=~s|[^$z]||g;
$t=length($t);
}
$ren{$y}.=$x[$z]."	$t	";
$douyubi_ikagi+=$t;
}
for($z=5;$z<@x;$z+=1){
s|($y)[($x[$z])]|$z|g;
$t=$_;
$t=~s|[^$z]||g;
$t=length($t);
$ren2{$y}.=$x[$z]."	$t	";
}
chop($ren2{$y});
s|($y)[^0-9]|X|g;
s|[^0-9X]||g;
$t=length($_);
s|[^X]||g;
$_=length($_);
$ren{$y}.="	$_	$t		$ren2{$y}";
$ren_all.=$ren{$y}."\n";
}
#連接元計測
foreach(@rensetu_r){
@x=split(/ /,$_);
$y=@x[0];

$_=$text;
s|($y)($y)|($y)0|g;	s|0($y)|00|g;
$t=$_;
$t=~s|[^0]||g;
$t=length($t);
$ren_r{$y}=$x[0]."	$t	";

for($z=1;$z<5;$z+=1){
if($x[$z] eq ''){$t=''}else{
s|[($x[$z])]($y)|$z|g;
$t=$_;
$t=~s|[^$z]||g;
$t=length($t);
}
$ren_r{$y}.=$x[$z]."	$t	";
}
for($z=5;$z<@x;$z+=1){
s|[($x[$z])]($y)|$z|g;
$t=$_;
$t=~s|[^$z]||g;
$t=length($t);
$ren_r2{$y}.=$x[$z]."	$t	";
}
chop($ren2{$y});
s|[^0-9]($y)|X|g;
s|[^0-9X]||g;
$t=length($_);
s|[^X]||g;
$_=length($_);
$ren_r{$y}.="	$_	$t		$ren_r2{$y}";
$ren_r_all.=$ren_r{$y}."\n";
}

#========================同指打鍵計測=============================

$douyubi+=$douyubi_ikagi;
$p_douyubi = int $douyubi/$p_daken*1000;
$p_douyubi = $p_douyubi/10;	#同指打鍵率
$p_douyubi_ikagi = int $douyubi_ikagi/$p_daken*1000;
$p_douyubi_ikagi = $p_douyubi_ikagi/10;
#========================同手跳躍計測=============================
#同手跳躍
$_ = $text;
s|[qwert][zxcvb]|7|g;
s|[yuiop`][nm,\./]|7|g;
s/[^7]//g;
$jump_qz = length($_);

$_ = $text;
s|[zxcvb][qwert]|7|g;
s|[nm,\./][yuiop`]|7|g;
s/[^7]//g;
$jump_zq = length($_);

$jump = $jump_zq+$jump_qz;	#同手跳躍数
$p_jump = int $jump/$p_daken*1000;
$p_jump = $p_jump/10;	#同手跳躍計測率

#良跳躍
$_=$text;
s/in|on|im|om|wv|ev/7/g;
s/[^7]//g;
$g_jump=length($_);
$_=$text;
s/ni|mi|no|mo|vw|ve/7/g;
s/[^7]//g;
$g_jump+=length($_);
$p_g_jump = int $g_jump/$p_daken*1000;
$p_g_jump = $p_g_jump/10;	

#同指跳躍
$_ = $text;
s/qz|wx|ec|rv|tv|rb|tb|yn|un|ym|um|i,|o\.|p\/|`\//7/g;
s/[^7]//g;
$doujump_qz = length($_);

$_ = $text;
s/zq|xw|ce|vr|vt|br|bt|ny|nu|my|mu|,i|\.o|\/p|\/`/7/g;
s/[^7]//g;
$doujump_zq = length($_);

$doujump = $doujump_zq+$doujump_qz;	#同指跳躍数
$p_doujump = int $doujump/$p_daken*1000;
$p_doujump = $p_doujump/10;	#同指跳躍率


#========================左手縦連計測=============================
$_ = $text;
s/wz|ex|rc/7/g;
s/[^7]//g;
$juuren_qz = length($_);

$_ = $text;
s/zw|xe|cr/7/g;
s/[^7]//g;
$juuren_zq = length($_);

$juuren = $juuren_zq+$juuren_qz;	#左手縦連数
$p_juuren = int $juuren/$p_daken*1000;
$p_juuren = $p_juuren/10;	#左手縦連率


#========================微悪指運計測=============================
$etc =$p_daken - $kougo - $arpeggio - $good - $jump;#上のどれにも含まれないのが微悪指運数
$p_etc = int $etc/$p_daken*1000;
$p_etc = $p_etc/10;	#微悪指運率


#========================良・中・悪指運まとめ=============================
$ryou = $kougo + $arpeggio + $good;
$p_ryou = $p_kougo + $p_arpeggio + $p_good;

#========================各指の使用頻度計測=============================
sub c{
	#各指の打鍵数
	$c{$_[0]} = $text;
	$c{$_[0]}=~s/[^($_[0])]//g;
	$c{$_[0]}=length($c{$_[0]});
	#各指の打鍵率
#	$d{$_[0]}=int $c{$_[0]}/$p_daken*1000;
#	$d{$_[0]}=$d{$_[0]}/10;
#	$d{$_[0]}.="%";
}
&c('a'); &c('b'); &c('c'); &c('d'); &c('e'); &c('f'); &c('g');
&c('h'); &c('i'); &c('j'); &c('k'); &c('l'); &c('m'); &c('n');
&c('o'); &c('p'); &c('q'); &c('r'); &c('s'); &c('t'); &c('u');
&c('v'); &c('w'); &c('x'); &c('y'); &c('z');
&c(','); &c('.'); &c(';'); &c('`'); &c(':'); &c('/');

#横合計
$et=$c{'q'}+$c{'w'}+$c{'e'}+$c{'r'}+$c{'t'}+$c{'y'}+$c{'u'}+$c{'i'}+$c{'o'}+$c{'p'}+$c{'`'};
$ee=$c{'a'}+$c{'s'}+$c{'d'}+$c{'f'}+$c{'g'}+$c{'h'}+$c{'j'}+$c{'k'}+$c{'l'}+$c{';'}+$c{':'};
$eb=$c{'z'}+$c{'x'}+$c{'c'}+$c{'v'}+$c{'b'}+$c{'n'}+$c{'m'}+$c{','}+$c{'.'}+$c{'/'};
$ea=$et+$ee+$eb;

$pt=int($et/$ea*1000)/10;
$pe=int($ee/$ea*1000)/10;
$pb=int($eb/$ea*1000)/10;
$pa=$pt+$pe+$pb;
#縦合計
$tq=$c{'q'}+$c{'a'}+$c{'z'}; $tw=$c{'w'}+$c{'s'}+$c{'x'}; $te=$c{'e'}+$c{'d'}+$c{'c'};
$tr=$c{'r'}+$c{'f'}+$c{'v'}; $tt=$c{'t'}+$c{'g'}+$c{'b'}; $ty=$c{'y'}+$c{'h'}+$c{'n'};
$tu=$c{'u'}+$c{'j'}+$c{'m'}; $ti=$c{'i'}+$c{'k'}+$c{','}; $to=$c{'o'}+$c{'l'}+$c{'.'};
$tp=$c{'p'}+$c{';'}+$c{'/'}; $tnob=$c{'`'}+$c{':'};
$trt=$tr+$tt;$tyu=$ty+$tu;$tp2=$tp+$tnob;
$pq=int($tq/$ea*1000)/10;
$pw=int($tw/$ea*1000)/10;
$pee=int($te/$ea*1000)/10;
$prt=int(($trt)/$ea*1000)/10;
$pyu=int(($tyu)/$ea*1000)/10;
$pi=int($ti/$ea*1000)/10;
$po=int($to/$ea*1000)/10;
$pp=int(($tp2)/$ea*1000)/10;
$xm=$c{'a'}+$c{'s'}+$c{'d'}+$c{'f'}+$c{'j'}+$c{'k'}+$c{'l'}+$c{';'};
$xn=$c{'w'}+$c{'e'}+$c{'i'}+$c{'o'};
$xo=$c{'v'}+$c{'n'}+$c{'m'};
$xp=$c{'g'}+$c{'h'};
$xq=$c{'r'}+$c{'t'}+$c{'u'};
$xr=$c{'z'}+$c{'x'}+$c{'c'}+$c{','}+$c{'.'}+$c{'/'};
$xs=$c{'b'}+$c{'q'}+$c{'p'}+$c{'y'}+$c{'`'}+$c{':'};

$pxm=int($xm/$ea*1000)/10;
$pxn=int(($xm+$xn)/$ea*1000)/10;
$pxo=int(($xm+$xn+$xo)/$ea*1000)/10;
$pxp=int(($xm+$xn+$xo+$xp)/$ea*1000)/10;
$pxq=int(($xm+$xn+$xo+$xp+$xq)/$ea*1000)/10;
$pxr=int(($xm+$xn+$xo+$xp+$xq+$xr)/$ea*1000)/10;
$pxs=int(($xm+$xn+$xo+$xp+$xq+$xr+$xs)/$ea*1000)/10;
$daken_s=$daken+$shift;
#========================書き出し=====================================
open (FH,">$output");

print FH <<_HTML_;

$hairetumai
打鍵数		：$daken＋$shift(親指)＝$daken_s
交互打鍵数		：$kougo		${p_kougo}%
	左→右	：$lratext
	右→左	：$rlatext
	左→左	：$llatext
	右→右	：$rratext

同手跳躍数		：$jump	$p_jump%
	良跳躍数	：$g_jump	$p_g_jump%
	同指跳躍数	：$doujump	$p_doujump%
	左手縦連数	：$juuren	$p_juuren%

同指打鍵数		：$douyubi	$p_douyubi%
	同指異鍵	：$douyubi_ikagi	$p_douyubi_ikagi%

打鍵分布	:
	上段	$et	$pt%
	中段	$ee	$pe%
	下段	$eb	$pb%
	左小	$tq	$pq%
	左薬	$tw	$pw%
	左中	$te	$pee%
	左指	$trt	$prt%
	右指	$tyu	$pyu%
	右中	$ti	$pi%
	右薬	$to	$po%	
	右小	$tp2	$pp%

	鍵		打鍵数	頻度
	ＡＳＤＦＪＫＬ；	$xm	$pxm%
	ＷＥＩＯ	$xn	$pxn%
	ＶＮＭ	$xo	$pxo%
	ＧＨ	$xp	$pxp%
	ＲＴＵ	$xq	$pxq%
	ＺＸＣ，．／	$xr	$pxr%
	ＢＱＹＰ＠：￥	$xs	$pxs%

小	薬	中	人	伸　		伸	人	中	薬	小	伸	合計
$c{'q'}	$c{'w'}	$c{'e'}	$c{'r'}	$c{'t'}	上段	$c{'y'}	$c{'u'}	$c{'i'}	$c{'o'}	$c{'p'}	$c{'`'}	$et	$pt%
$c{'a'}	$c{'s'}	$c{'d'}	$c{'f'}	$c{'g'}	中段	$c{'h'}	$c{'j'}	$c{'k'}	$c{'l'}	$c{';'}	$c{':'}	$ee	$pe%
$c{'z'}	$c{'x'}	$c{'c'}	$c{'v'}	$c{'b'}	下段	$c{'n'}	$c{'m'}	$c{','}	$c{'.'}	$c{'/'}	0	$eb	$pb%
$tq	$tw	$te	$tr	$tt	合計	$ty	$tu	$ti	$to	$tp	$tnob	$ea	$pa%
$pq%	$pw%	$pee%	$prt%				$pyu%	$pi%	$po%	$pp%		

連接(異動先)
同鍵					同指						同手以外	合計				同手 
$ren_all

連接(異動元)
同鍵					同指						同手以外	合計				同手 
$ren_r_all
_HTML_

close FH;

