2013年9月10日火曜日

開発環境

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

その他参考書籍

1.

コード(BBEdit)

sample.pl

#!/usr/bin/env perl
use strict;
use warnings;
use 5.016;
use utf8;
binmode STDOUT, ':utf8';
binmode STDIN, ':utf8';
binmode STDERR, ':utf8';

use Storable;

my %total_bytes;
my $all = "all";
my $log = 'log.dat';

%total_bytes = %{retrieve $log} if -e $log;

while (<>) {
    next if /^#/;
    my ($source, $destination, $bytes) = split;
    $total_bytes{$source}{$destination} += $bytes;
    $total_bytes{$source}{$all} += $bytes;
}

store \%total_bytes, $log;

for my $src (sort {
                 $total_bytes{$b}{$all} <=> $total_bytes{$a}{$all}
             } keys %total_bytes) {
    my $tb = $total_bytes{$src};
    printf "$src: $tb->{$all} bytes\n";
    for my $dst (sort {$tb->{$b} <=> $tb->{$a}} keys %$tb) {
        next if $dst eq $all;
        printf "    => $dst: $tb->{$dst} bytes\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
$

ちなみにpython3.3の場合。

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
## Copyright (C) 2013 by kamimura
#-*- coding: utf-8 -*-

import sys
import os
import re
import pickle

total_bytes = {}
all = 'all'
log = 'log.dat'

if os.path.isfile(log):
    with open(log, 'rb') as f:
        total_bytes = pickle.load(f)

with open(sys.argv[1]) as f:
    for line in f:
        if re.search(r"^#", line):
            continue
        line = line.rstrip()
        src, dst, bytes = line.split()
        bytes = int(bytes)
        if src in total_bytes:
            tb = total_bytes[src]
            tb[all] += bytes
            if dst in tb:
                tb[dst] += bytes
            else:
                tb[dst] = bytes
        else:
            total_bytes[src] = {}
            tb = total_bytes[src]
            tb[dst] = bytes
            tb[all] = bytes

with open(log, 'wb') as f:
    pickle.dump(total_bytes, f)

srcs = list(total_bytes.keys())
srcs.sort(key=lambda x: -total_bytes[x][all])
for src in srcs:
    tb = total_bytes[src]
    print("{0}: {1} bytes".format(src, tb[all]))
    dsts = list(tb.keys())
    dsts.sort(key=lambda x: -tb[x])
    for dst in dsts:
        if dst == all:
            continue
        print("    => {0}: {1} bytes".format(dst, tb[dst]))

入出力結果(Terminal)

$ ./sample.py 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.py 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 コメント:

コメントを投稿