ルモーリン
ホーム 更新 Perl Sample サービス 雑談 鉄ゲタ Linux リンク 連絡先

Perlサンプル24 シークヮーサーの表記ゆれ

2020-09-14

ネットで所謂シークヮーサーの表記がとてもゆれていることを知ったので、
シークヮーサー - Wikipedia
全パターンを表示してみたいと思いました。

表記に使われる全ての文字から文字列をランダム生成して、正規表現に一致するものをシークヮーサーとして(?)記録しようと考えました。 実行すると10分やそこらで完了する雰囲気ではないことが分かり、とりあえず5分間だけ回すことにしました。 乱数の種(シード)を指定していないので実行の度に見つかるシークヮーサーが変わります(笑)。

#!/usr/bin/env perl

use v5.26;
use utf8;
use warnings;
use strict;

use Encode::Locale;

use FindBin;
use lib $FindBin::Bin;
use MyDumper;

use feature "say";
use open IO => ":utf8";

binmode STDOUT, ":encoding(console_out)";
binmode STDERR, ":encoding(console_out)";

$| = 1;

say "起動";
my $start_t = time;
my $now_t = $start_t;
my $stop_t = $start_t + 60 * 5;

my @alphabet = split //, "アァイィクサシャワヮー";
my %result;
my $trial = 0;
while ($now_t < $stop_t) {
	my $test = gen_string();
	$trial++;
	if ($test =~ /^シ((ィ|イ)ー?|ー)ク(ア|ァ|ワ|ヮ)ー?(サ|シャ)ー$/) {
		if (!exists $result{$test}) {
			$result{$test} = 1;
			$now_t = time;
			my $duration = $now_t - $start_t;
			my $minutes = int($duration / 60);
			my $seconds = $duration - 60 * $minutes;
			say sprintf("%02d:%02d", $minutes, $seconds) . ", 試行 $trial 回目, @{[scalar keys %result]} 個目, $test";
		}
	}

	$now_t = time unless $trial % 3000000;
}

say "昇順";
say for sort keys %result;

sub gen_string {
	state $string = "";

	$string = "" if 8 < length $string;
	if ("" eq $string) {
		$string .= $alphabet[int rand @alphabet] for 1 .. 5;
	}
	$string .= $alphabet[int rand @alphabet];

	return $string;
}

時間制限を5分にしてありますけれど、これを1時間に延ばせばそれなりに収集できると思います。 でもまあ、網羅は無理ですよね。

起動
00:09, 試行 756886 回目, 1 個目, シイクァシャー
00:17, 試行 1369149 回目, 2 個目, シィクワサー
00:28, 試行 2219653 回目, 3 個目, シイクワサー
00:30, 試行 2322349 回目, 4 個目, シィクァサー
00:34, 試行 2674917 回目, 5 個目, シークヮサー
00:43, 試行 3392513 回目, 6 個目, シークァサー
00:59, 試行 4580669 回目, 7 個目, シイクヮサー
01:28, 試行 6852177 回目, 8 個目, シィクアサー
01:28, 試行 6887034 回目, 9 個目, シイクヮーサー
02:12, 試行 10278802 回目, 10 個目, シークワーサー
02:15, 試行 10571909 回目, 11 個目, シイクァサー
02:20, 試行 10904165 回目, 12 個目, シークアサー
02:31, 試行 11777022 回目, 13 個目, シイークアサー
02:34, 試行 12005401 回目, 14 個目, シイクアサー
02:40, 試行 12486189 回目, 15 個目, シィクヮサー
02:52, 試行 13395866 回目, 16 個目, シークアシャー
03:10, 試行 14815854 回目, 17 個目, シイークァサー
03:48, 試行 17773361 回目, 18 個目, シークワサー
03:59, 試行 18666754 回目, 19 個目, シイクワーサー
04:11, 試行 19579322 回目, 20 個目, シイクヮシャー
04:12, 試行 19684466 回目, 21 個目, シイクアーサー
04:55, 試行 23030474 回目, 22 個目, シークァシャー
昇順
シィクァサー
シィクアサー
シィクヮサー
シィクワサー
シイクァサー
シイクァシャー
シイクアサー
シイクアーサー
シイクヮサー
シイクヮシャー
シイクヮーサー
シイクワサー
シイクワーサー
シイークァサー
シイークアサー
シークァサー
シークァシャー
シークアサー
シークアシャー
シークヮサー
シークワサー
シークワーサー