2013年1月24日木曜日

開発環境

『続・初めての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 utf8;
use 5.016;
binmode STDOUT, ':utf8';
binmode STDIN, ':utf8';

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 => \@gilligan,
  Skipper => \@skipper,
  Professor => \@professor,
  );
check_items_for_all(\%all);
sub check_items_for_all{
  my $all = shift;
  for (keys %$all) {
   check_required_items($_, $all->{$_});
  }
}
sub check_required_items{
  my($who, $items) = @_;
  
  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;
  }
}

入出力結果(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.
Skipper is missing water_bottle.
Adding water_bottle to blue_shirt hat jacket preserver sunscreen for Skipper.
Professor is missing preserver.
Professor is missing jacket.
Adding preserver jacket to sunscreen water_bottle slide_rule batteries radio for Professor.
$

ちなみにJavaScriptの場合。

コード(BBEdit)

$('#pre0').html('');
var gilligan = ["red_shirt", "hat", "lucky_socks", "water_bottle"];
var skipper = ["blue_shirt", "hat", "jacket", "preserver", "sunscreen"];
var professor = ["sunscreen", "water_bottle", "slide_rule", "batteries", "radio"];
var all = { Gilligan: gilligan,
            Skipper: skipper,
            Professor: professor};

check_items_for_all(all);
function check_items_for_all(all){
  for(var p in all){
    check_required_items(p, all[p]);
  }
}
function check_required_items(who, items){
    var required = ["preserver", "sunscreen", "water_bottle", "jacket"];
    var missing = [];
    var i, j;
    for(i = 0, max_i = required.length; i < max_i; i += 1){
        innerloop: {
        for ( j = 0, max_j = items.length; j < max_j; j += 1) {
            if ( required[i] === items[j] ){
                break innerloop;
            }   
        }
        $('#pre0').append( who + " is missing " + required[i] + ".\n");
        missing.push(required[i]);
        }
    }
    if ( missing ){
        $('#pre0').append("Adding " + missing.join(" ") + 
          " to " + items.join(" ") + " for " + who + "\n");
        items += missing;
    }
}



pythonの場合。

sample.py

コード(BBEdit)

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

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}

def check_required_items(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))
        items += missing
    
def check_items_for_all(all):
    for k, v in all.items():
        check_required_items(k, v)

check_items_for_all(all)

入出力結果(Terminal)

$ ./sample.py
Professor is missing preserver.
Professor is missing jacket.
Adding preserver jacket to sunscreen water_bottle slide_rule batteries radio for Professor
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
Skipper is missing water_bottle.
Adding water_bottle to blue_shirt hat jacket preserver sunscreen for Skipper
$

0 コメント:

コメントを投稿