飛田先生の挑戦状「カンマ(,)区切りの文字列を文字列長の短い順に並びなおすソース」
[問題]
以下のカンマ(,)区切りの文字列を文字列長の短い順に並びなおすプログラムを書け。
SYAMEIMARU,YAKUMO,KOMEIJI,HAKUREI,SCARLET,HONG,HOURAISAN,KAZAMI,AKI
gerocchoの答え -Perlにて-
use strict; use warnings; open(IN,"que2.txt"); my $a = <IN>; close(IN); my $findA = 0; my @list; #---------テキストの配列化---------- until ( index ( $a, ",", $findA ) == -1 ) { my $findB = index ( $a, ",", $findA ); my $word = substr($a, $findA, $findB - $findA); push(@list, $word); $findA = $findB + 1; } my $word = substr($a, $findA); push(@list, $word); #------配列から文字長でソート------ my $A = 0; $a = 1; my @answer; while ( $a > 0 ){ while ($list[0] =~ /(.)/g){ $A++; } $word = $list[0]; my $b = -1; my $C = 0; foreach $a (@list){ $b++; my $B = 0; while ($a =~ /(.)/g){ $B++; } if ( $B < $A ){ $C = $b; $A = $B; $word = $a; } } splice ( @list, $C, 1 ); push (@answer, $word); $a = @list; } #ソート後の配列を,で区切って表示 foreach $a (@answer){ print "$a," }
"que2.txt"に問題の文字列があるという想定で。
とりあえずできるようにツギハギでがんばった結果がこれだよ!
という印象…