単語のシャッフル

30分プログラム、その576。単語をシャッフルしてみよう。

人間は、単語の最初と最後さえ合っていれば、あとの順番はめちゃくちゃでもいいらしいです。

こちにんは みさなん おんげき ですか?  わしたは げんき です。 この ぶんょしう は いりぎす の ケブンッリジ だがいく の けゅきんう の けっか にんんげは たごんを にしんき する ときに その さしいょ と さいご の もさじえ あいてっれば じばんゅん は めくちちゃゃ でも ちんゃと よめる という けゅきんう に もづいとて わざと もじの じんばゅん を いかれえて あまりす。 どでうす? ちんゃと よゃちめう でしょ?

Tumblr

これおもしろい!というわけで、単語をシャッフするスクリプトを書いてみた。

使い方

$ perl shuffle.pl hoge
hgoe

$ perl shuffle.pl こんにちは みなさん おげんき ですか
こんちには みさなん おげんき ですか

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# shuffle.pl -
#
# Copyright(C) 2009 by mzp
# Author: MIZUNO Hiroki / mzpppp at gmail dot com
# http://howdyworld.org
#
# Timestamp: 2009/05/05 14:19:54
#
# This program is free software; you can redistribute it and/or
# modify it under MIT Lincence.
#

use strict;
use warnings;
use Data::Dumper;
use List::Util qw(shuffle);
use Encode;
use utf8;

sub word_shuffle($) {
    my ($str) = @_;

    $str =~ s{\b(\S)(\S*)(\S)\b}{
	$1.join('',shuffle(split(//,$2))).$3 }ge;
    $str;
}


my $s = decode 'utf-8',join(' ',@ARGV);
print encode('utf-8', word_shuffle($s)),"\n";