Check

記号

| | コメント(0) | トラックバック(1)

http://d.hatena.ne.jp/shinichiro_h/20061107#1162835826
>Perl 記号ゴルフと Acme::EyeDrops

自動化してみた。
$target_valueに変換したい値を入力。
出力は「@symbols」に存在する値のみ使用する。
(この場合記号だけを返す)
できるだけランダムな値返すよう努力する。
ちなみに、メールアドレスは無理(「.」が記号に変換できないので)


my $target_value = q[JAPH];
my @symbols = split //, q[ !"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~];

my ( %use, @result );
foreach my $target ( split //, q[print'].$target_value.q['] ) {

my ( %check, %xor );
foreach my $symbol ( @symbols ) {

next if $target eq $symbol;
my $item = $target ^ $symbol;
next if $check{$item}++ or $check{$symbol}++;
next if not grep { $item eq $_ } @symbols;
@xor{ $item, $symbol } = ( $symbol, $item );

}

if (not scalar %xor) {
warn qq[$target not match];
next;
}

my ($min) = sort { $use{$a} <=> $use{$b} } keys %xor;
my @mins = grep { $use{$min} == $use{$_} } keys %xor;
my $current = $mins[ rand( scalar @mins ) ];
$use{$current}++;

push @result, [ map { /'|\\/ ? q[\\].$_ : $_ } $current, $xor{$current} ];

}

print q[''=~('(?{'.('].
( join q[], map { $_->[0] } @result ).
q['^'].
( join q[], map { $_->[1] } @result ).q[').'})')];

トラックバック(1)

このブログ記事を参照しているブログ一覧: 記号

このブログ記事に対するトラックバックURL: http://0-9.sakura.ne.jp/mt/mt-tb.cgi/6

大学6年生のhogelogさんによると、「perlやる人の悪い癖」らしい。よかっ... 続きを読む

コメントする