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

Perlサンプル25 シークヮーサーの表記ゆれ~その2~

2020-09-15

文字列をランダム生成した中から適合するシークヮーサー(?)を抽出する方式で、根本的に効率が悪い(笑)
Perlサンプル24 シークヮーサーの表記ゆれ

最初から正規表現にマッチする形式で文字列を生成します。 ただし順列・組み合わせを管理するのは面倒なので、選択をランダムにします。 多量に生成すれば全数集まるのではないかという怠け者の作戦です。

#!/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;

my @awa = qw/ ア ァ ワ ヮ /;

my $trial = 0;
my %result;
# ハッシュのスカラコンテキストがキーの個数になったのはv5.25から
while (%result < 80) {
	my $test = gen_string();
	$trial++;
	if ($test =~ /^シ((ィ|イ)ー?|ー)ク(ア|ァ|ワ|ヮ)ー?(サ|シャ)ー$/) {
		if (!exists $result{$test}) {
			$result{$test} = 1;
			say "試行 $trial 回目, @{[scalar keys %result]} 個目, $test";
		}
	}
}

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

sub gen_string {
	my $string = "シ";
	if (int rand 2) {
		if (int rand 2) {
			$string .= "ィ";
		} else {
			$string .= "イ";
		}
		$string .= "ー" if int rand 2;
	} else {
		$string .= "ー";
	}
	$string .= "ク";
	$string .= $awa[int rand @awa];
	$string .= "ー" if int rand 2;
	if (int rand 2) {
		$string .= "サ";
	} else {
		$string .= "シャ";
	}
	$string .= "ー";
	return $string;
}

意外とあっさり見つかりました。 ループ終了条件の80個は人力で計算しました(間違っていたらどうしよう)。

試行 1 回目, 1 個目, シィークァシャー
試行 2 回目, 2 個目, シィークワーシャー   
試行 3 回目, 3 個目, シイクワーサー       
試行 4 回目, 4 個目, シークワーシャー     
試行 5 回目, 5 個目, シィークアーサー     
試行 8 回目, 6 個目, シークアーサー       
試行 9 回目, 7 個目, シークァシャー       
試行 10 回目, 8 個目, シィークアシャー    
試行 11 回目, 9 個目, シィクヮサー        
試行 12 回目, 10 個目, シークアーシャー   
試行 13 回目, 11 個目, シイクヮサー       
試行 14 回目, 12 個目, シィークワサー     
試行 15 回目, 13 個目, シィークワーサー   
試行 16 回目, 14 個目, シィクヮーサー     
試行 17 回目, 15 個目, シィークァーサー   
試行 19 回目, 16 個目, シークヮーサー     
試行 20 回目, 17 個目, シークアサー       
試行 21 回目, 18 個目, シークァーサー     
試行 22 回目, 19 個目, シイクァサー       
試行 24 回目, 20 個目, シィクヮシャー     
試行 26 回目, 21 個目, シークワシャー     
試行 28 回目, 22 個目, シィークワシャー   
試行 29 回目, 23 個目, シィクァシャー     
試行 31 回目, 24 個目, シークヮシャー     
試行 32 回目, 25 個目, シィクアーシャー   
試行 33 回目, 26 個目, シィークァーシャー 
試行 36 回目, 27 個目, シィクァサー       
試行 37 回目, 28 個目, シークァーシャー   
試行 43 回目, 29 個目, シィークヮシャー   
試行 46 回目, 30 個目, シークワーサー     
試行 49 回目, 31 個目, シイークアサー     
試行 50 回目, 32 個目, シイクワーシャー   
試行 56 回目, 33 個目, シィクワーサー     
試行 58 回目, 34 個目, シィクアシャー     
試行 59 回目, 35 個目, シークァサー       
試行 63 回目, 36 個目, シィークアサー     
試行 64 回目, 37 個目, シイークアーサー   
試行 70 回目, 38 個目, シィークヮーシャー 
試行 72 回目, 39 個目, シイクァーシャー   
試行 74 回目, 40 個目, シイークヮーサー   
試行 76 回目, 41 個目, シイクァシャー     
試行 77 回目, 42 個目, シークヮーシャー   
試行 88 回目, 43 個目, シイクワシャー     
試行 94 回目, 44 個目, シイクヮーサー     
試行 100 回目, 45 個目, シイクヮシャー    
試行 103 回目, 46 個目, シークワサー      
試行 106 回目, 47 個目, シイークァシャー  
試行 108 回目, 48 個目, シイークァーシャー
試行 114 回目, 49 個目, シィークヮサー    
試行 115 回目, 50 個目, シークヮサー      
試行 140 回目, 51 個目, シイークアシャー  
試行 145 回目, 52 個目, シイークァーサー  
試行 148 回目, 53 個目, シイクァーサー    
試行 151 回目, 54 個目, シィクアーサー    
試行 152 回目, 55 個目, シークアシャー    
試行 162 回目, 56 個目, シイークアーシャー
試行 173 回目, 57 個目, シイークヮサー    
試行 175 回目, 58 個目, シイークヮシャー  
試行 181 回目, 59 個目, シイークァサー    
試行 183 回目, 60 個目, シイークワーサー  
試行 188 回目, 61 個目, シィークヮーサー  
試行 200 回目, 62 個目, シイークワーシャー
試行 205 回目, 63 個目, シィクワシャー    
試行 216 回目, 64 個目, シィクアサー      
試行 232 回目, 65 個目, シィークアーシャー
試行 238 回目, 66 個目, シイクアーシャー  
試行 239 回目, 67 個目, シイクアシャー    
試行 245 回目, 68 個目, シイクアーサー    
試行 251 回目, 69 個目, シイクワサー      
試行 254 回目, 70 個目, シィクワサー      
試行 277 回目, 71 個目, シイークヮーシャー
試行 279 回目, 72 個目, シイクヮーシャー  
試行 335 回目, 73 個目, シィクワーシャー  
試行 344 回目, 74 個目, シィクァーシャー  
試行 376 回目, 75 個目, シィクヮーシャー  
試行 443 回目, 76 個目, シィークァサー    
試行 471 回目, 77 個目, シイクアサー      
試行 516 回目, 78 個目, シイークワシャー
試行 568 回目, 79 個目, シィクァーサー
試行 785 回目, 80 個目, シイークワサー
昇順
シィクァサー
シィクァシャー
シィクァーサー
シィクァーシャー
シィクアサー
シィクアシャー
シィクアーサー
シィクアーシャー
シィクヮサー
シィクヮシャー
シィクヮーサー
シィクヮーシャー
シィクワサー
シィクワシャー
シィクワーサー
シィクワーシャー
シィークァサー
シィークァシャー
シィークァーサー
シィークァーシャー
シィークアサー
シィークアシャー
シィークアーサー
シィークアーシャー
シィークヮサー
シィークヮシャー
シィークヮーサー
シィークヮーシャー
シィークワサー
シィークワシャー
シィークワーサー
シィークワーシャー
シイクァサー
シイクァシャー
シイクァーサー
シイクァーシャー
シイクアサー
シイクアシャー
シイクアーサー
シイクアーシャー
シイクヮサー
シイクヮシャー
シイクヮーサー
シイクヮーシャー
シイクワサー
シイクワシャー
シイクワーサー
シイクワーシャー
シイークァサー
シイークァシャー
シイークァーサー
シイークァーシャー
シイークアサー
シイークアシャー
シイークアーサー
シイークアーシャー
シイークヮサー
シイークヮシャー
シイークヮーサー
シイークヮーシャー
シイークワサー
シイークワシャー
シイークワーサー
シイークワーシャー
シークァサー
シークァシャー
シークァーサー
シークァーシャー
シークアサー
シークアシャー
シークアーサー
シークアーシャー
シークヮサー
シークヮシャー
シークヮーサー
シークヮーシャー
シークワサー
シークワシャー
シークワーサー
シークワーシャー