2012年4月22日日曜日

開発環境

『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也田中 慎司吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9) の6章(複雑なデータ構造の操作), 6.8(練習問題)1を解いてみる。

1.

やり方の1つ。(「やり方は何通りもある」(TIMTOWTDI(There Is More Than One Way To Do It.)))

コード(TextWrangler)

#!/usr/bin/env perl
use strict;
use warnings;
use Storable;

my %total_bytes;
my $total = 'total';
my $data = 'total_bytes.dat';
if(-e $data){
  $data = retrieve $data;
  %total_bytes = %$data;
}
while(<>){
  next if /^#/;
  my ($source, $destination, $bytes) = split;
  $total_bytes{$source}{$destination} += $bytes;
  $total_bytes{$source}{$total} += $bytes;
}

store \%total_bytes, $data;

for my $source ( sort {
  $total_bytes{$b}{$total} <=> $total_bytes{$a}{$total}
  } keys %total_bytes){
  print "$source: $total_bytes{$source}{$total} bytes\n";
  for my $destination (sort { 
  $total_bytes{$source}{$b} <=> $total_bytes{$source}{$a}
  } keys %{ $total_bytes{$source} }){
    next if $destination eq 'total';
    print "\t=> $destination:",
      " $total_bytes{$source}{$destination} bytes\n";
  }
  print "\n";
}

入出力結果(Terminal)

$ ./sample.pl coconet.dat
lovey.howell.hut: 1139833 bytes
 => laser3.copyroom.hut: 212456 bytes
 => professor.hut: 175065 bytes
 => ginger.girl.hut: 158084 bytes
 => maryann.girl.hut: 155080 bytes
 => thurston.howell.hut: 141790 bytes
 => skipper.crew.hut: 119766 bytes
 => fileserver.copyroom.hut: 98926 bytes
 => gilligan.crew.hut: 78666 bytes

gilligan.crew.hut: 983860 bytes
 => laser3.copyroom.hut: 240327 bytes
 => maryann.girl.hut: 145361 bytes
 => skipper.crew.hut: 118827 bytes
 => lovey.howell.hut: 107152 bytes
 => professor.hut: 101219 bytes
 => thurston.howell.hut: 97398 bytes
 => fileserver.copyroom.hut: 90369 bytes
 => ginger.girl.hut: 83207 bytes

ginger.girl.hut: 968495 bytes
 => laser3.copyroom.hut: 179803 bytes
 => lovey.howell.hut: 170948 bytes
 => maryann.girl.hut: 152634 bytes
 => professor.hut: 110300 bytes
 => thurston.howell.hut: 105940 bytes
 => skipper.crew.hut: 103592 bytes
 => fileserver.copyroom.hut: 79551 bytes
 => gilligan.crew.hut: 65727 bytes

maryann.girl.hut: 846806 bytes
 => laser3.copyroom.hut: 161843 bytes
 => lovey.howell.hut: 145271 bytes
 => ginger.girl.hut: 126902 bytes
 => thurston.howell.hut: 123456 bytes
 => professor.hut: 109526 bytes
 => skipper.crew.hut: 75155 bytes
 => fileserver.copyroom.hut: 63807 bytes
 => gilligan.crew.hut: 40846 bytes

professor.hut: 821931 bytes
 => laser3.copyroom.hut: 172882 bytes
 => lovey.howell.hut: 123396 bytes
 => ginger.girl.hut: 113685 bytes
 => maryann.girl.hut: 94786 bytes
 => thurston.howell.hut: 94363 bytes
 => skipper.crew.hut: 86642 bytes
 => gilligan.crew.hut: 82825 bytes
 => fileserver.copyroom.hut: 53352 bytes

fileserver.copyroom.hut: 770174 bytes
 => lovey.howell.hut: 160986 bytes
 => professor.hut: 146975 bytes
 => ginger.girl.hut: 103478 bytes
 => maryann.girl.hut: 99261 bytes
 => skipper.crew.hut: 88261 bytes
 => thurston.howell.hut: 86084 bytes
 => gilligan.crew.hut: 85129 bytes

thurston.howell.hut: 619077 bytes
 => laser3.copyroom.hut: 129628 bytes
 => maryann.girl.hut: 105137 bytes
 => lovey.howell.hut: 82972 bytes
 => professor.hut: 78576 bytes
 => skipper.crew.hut: 66538 bytes
 => ginger.girl.hut: 58580 bytes
 => gilligan.crew.hut: 56658 bytes
 => fileserver.copyroom.hut: 40988 bytes

skipper.crew.hut: 481951 bytes
 => professor.hut: 108779 bytes
 => laser3.copyroom.hut: 89505 bytes
 => ginger.girl.hut: 77621 bytes
 => maryann.girl.hut: 71880 bytes
 => lovey.howell.hut: 43427 bytes
 => thurston.howell.hut: 41726 bytes
 => gilligan.crew.hut: 29142 bytes
 => fileserver.copyroom.hut: 19871 bytes

$ ./sample.pl coconet.dat
lovey.howell.hut: 2279666 bytes
 => laser3.copyroom.hut: 424912 bytes
 => professor.hut: 350130 bytes
 => ginger.girl.hut: 316168 bytes
 => maryann.girl.hut: 310160 bytes
 => thurston.howell.hut: 283580 bytes
 => skipper.crew.hut: 239532 bytes
 => fileserver.copyroom.hut: 197852 bytes
 => gilligan.crew.hut: 157332 bytes

gilligan.crew.hut: 1967720 bytes
 => laser3.copyroom.hut: 480654 bytes
 => maryann.girl.hut: 290722 bytes
 => skipper.crew.hut: 237654 bytes
 => lovey.howell.hut: 214304 bytes
 => professor.hut: 202438 bytes
 => thurston.howell.hut: 194796 bytes
 => fileserver.copyroom.hut: 180738 bytes
 => ginger.girl.hut: 166414 bytes

ginger.girl.hut: 1936990 bytes
 => laser3.copyroom.hut: 359606 bytes
 => lovey.howell.hut: 341896 bytes
 => maryann.girl.hut: 305268 bytes
 => professor.hut: 220600 bytes
 => thurston.howell.hut: 211880 bytes
 => skipper.crew.hut: 207184 bytes
 => fileserver.copyroom.hut: 159102 bytes
 => gilligan.crew.hut: 131454 bytes

maryann.girl.hut: 1693612 bytes
 => laser3.copyroom.hut: 323686 bytes
 => lovey.howell.hut: 290542 bytes
 => ginger.girl.hut: 253804 bytes
 => thurston.howell.hut: 246912 bytes
 => professor.hut: 219052 bytes
 => skipper.crew.hut: 150310 bytes
 => fileserver.copyroom.hut: 127614 bytes
 => gilligan.crew.hut: 81692 bytes

professor.hut: 1643862 bytes
 => laser3.copyroom.hut: 345764 bytes
 => lovey.howell.hut: 246792 bytes
 => ginger.girl.hut: 227370 bytes
 => maryann.girl.hut: 189572 bytes
 => thurston.howell.hut: 188726 bytes
 => skipper.crew.hut: 173284 bytes
 => gilligan.crew.hut: 165650 bytes
 => fileserver.copyroom.hut: 106704 bytes

fileserver.copyroom.hut: 1540348 bytes
 => lovey.howell.hut: 321972 bytes
 => professor.hut: 293950 bytes
 => ginger.girl.hut: 206956 bytes
 => maryann.girl.hut: 198522 bytes
 => skipper.crew.hut: 176522 bytes
 => thurston.howell.hut: 172168 bytes
 => gilligan.crew.hut: 170258 bytes

thurston.howell.hut: 1238154 bytes
 => laser3.copyroom.hut: 259256 bytes
 => maryann.girl.hut: 210274 bytes
 => lovey.howell.hut: 165944 bytes
 => professor.hut: 157152 bytes
 => skipper.crew.hut: 133076 bytes
 => ginger.girl.hut: 117160 bytes
 => gilligan.crew.hut: 113316 bytes
 => fileserver.copyroom.hut: 81976 bytes

skipper.crew.hut: 963902 bytes
 => professor.hut: 217558 bytes
 => laser3.copyroom.hut: 179010 bytes
 => ginger.girl.hut: 155242 bytes
 => maryann.girl.hut: 143760 bytes
 => lovey.howell.hut: 86854 bytes
 => thurston.howell.hut: 83452 bytes
 => gilligan.crew.hut: 58284 bytes
 => fileserver.copyroom.hut: 39742 bytes

$

0 コメント:

コメントを投稿