2013年9月7日土曜日

開発環境

『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也田中 慎司吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9)の4章(リファレンス入門)の4.9(練習問題)2を解いてみる。

その他参考書籍

2.

コード(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';

sub check_required_items {
    my $who = shift;
    my $items = shift;
    
    my @required = qw(preserver sunscreen water_bottle jacket);
    my @missing = ();
    
    for my $item (@required) {
        unless (grep $item eq $_, @$items) {
            print "$who is missing $item.\n";
            push @missing, $item;
        }
    }
    
    if (@missing) {
        print "Adding @missing to @$items for $who.\n";
        push @$items, @missing;
    }
}

sub check_items_for_all {
    my $all = shift;
    for my $who (sort keys %$all) {
        check_required_items($who, $all-&^gt;{$who});
    }
}

my @gilligan = qw(red_shirt hat lucky_socks water_bottle);
my @skipper = qw(blue_shirt hat jacket preserver sunscreen);
my @professor = qw(sunscreen water_bottle slide_rule batteries radio);
my %all = (
    Gilligan =&^gt; \@gilligan,
    Skipper =&^gt; \@skipper,
    Professor =&^gt; \@professor,
);
check_items_for_all(\%all);

入出力結果(Terminal)

$ ./sample.pl
Gilligan is missing preserver.
Gilligan is missing sunscreen.
Gilligan is missing jacket.
Adding preserver sunscreen jacket to red_shirt hat lucky_socks water_bottle for Gilligan.
Professor is missing preserver.
Professor is missing jacket.
Adding preserver jacket to sunscreen water_bottle slide_rule batteries radio for Professor.
Skipper is missing water_bottle.
Adding water_bottle to blue_shirt hat jacket preserver sunscreen for Skipper.
$

ちなみにpython3.3の場合。

コード(BBEdit)

sample.py

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

def checkRequiredItems(who, items):
    required = ['preserver', 'sunscreen', 'water_bottle', 'jacket']
    missing = []
    
    for item in required:
        if not item in items:
            print("{0} is missing {1}".format(who, item))
            missing.append(item)
    
    if missing:
        print("Adding {0} to {1} for {2}".format(
            " ".join(missing), " ".join(items), who))
        for item in missing:
            items.append(item)

def checkItemsForAll(all):
    for who in sorted(all):
        checkRequiredItems(who, all[who])

gilligan = ['red_shirt', 'hat', 'lucky_socks', 'water_bottle']
skipper = ['blue_shirt', 'hat', 'jacket', 'preserver', 'sunscreen']
professor = ['sunscreen', 'water_bottle', 'slide_rule', 'batteries', 'radio']
all = {
    'Gilligan': gilligan,
    'Skipper': skipper,
    'Professor': professor
}
checkItemsForAll(all);

入出力結果(Terminal)

$ ./sample.py
Gilligan is missing preserver
Gilligan is missing sunscreen
Gilligan is missing jacket
Adding preserver sunscreen jacket to red_shirt hat lucky_socks water_bottle for Gilligan
Professor is missing preserver
Professor is missing jacket
Adding preserver jacket to sunscreen water_bottle slide_rule batteries radio for Professor
Skipper is missing water_bottle
Adding water_bottle to blue_shirt hat jacket preserver sunscreen for Skipper
$

0 コメント:

コメントを投稿