文字列の均等分割
この問題は、除算だけでははく算術演算とか、文字列の長さをstrlenの類いで測るとかをしなくても、多分書けるのではないかと思います。
Posted feedbacks - Perl
divid(4, "Perlわかるひとには長いよって思われそうだし、Perlわかんないひとには読めねえよって思われそうだけどいいんだ。ってこれ半角混ぜるとぐじゃぐじゃになるな")
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | use strict;
use warnings;
use utf8;
binmode(STDOUT, ":utf8");
sub divid {
my $line = shift @_;
my $str = shift @_;
my @table;
my @str_array = split //, $str;
push @table, [] for 1..$line;
while (@str_array) {
for (@table) {
push @$_, (shift @str_array);
}
}
for (@table) {
@$_ = grep { defined $_ } @$_;
}
@str_array = split //, $str;
for my $array_ref (@table) {
for (@$array_ref) {
$_ = shift @str_array;
}
}
for (@table) {
print "\"", join('', grep { defined $_ } @$_), "\"", "\n";
}
}
divid(4, "ゆめよりもはかなき世のなかをなげきわびつゝあかしくらすほどに四月十よひにもなりぬれば木のしたくらがりもてゆく");
|
予め行数分の長さの配列を作っておいて、文字数をカウントしながらぐるぐるまわしてみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 | use utf8;
binmode(STDOUT, ":utf8");
sub divid {
my ($num, $text) = @_;
my @chars = split //, $text;
my @length = (0) x $num;
for (@chars) {unshift @length, pop(@length)+1;}
map {print join '', splice(@chars, 0, $_), "\n"} @length;
}
divid(4, "ゆめよりもはかなき世のなかをなげきわびつゝあかしくらすほどに四月十よひにもなりぬれば木のしたくらがりもてゆく");
|





nobsun
#4090()
Rating-1/3=-0.33
1 reply [ reply ]