2017年5月6日土曜日

開発環境

Think Perl 6: How to Think Like a Computer Scientist (Laurent Rosenfeld(著)、Allen B. Downey(著)、Oreilly & Associates Inc)のPart 1(Starting with the basics)、Chapter 7(Strings)の Exercise 7-1、7-3.を取り組んでみる。

Exercise 7-1、7-3.

コード(Emacs)

#!/usr/bin/env perl6
# -*- coding: utf-8 -*-

say '1.';
sub count($word, $letter) {
    my $count = 0;
    my $i = 0;
    while True {
        $i = $word.index($letter, $i);
        last unless defined $i;
        $i++;
        $count++;
    }
    $count;
}

say 'count';
say 0 == count '', 'a';
say 1 == count 'a', 'a';
say 0 == count 'b', 'a';
say 3 == count 'banana', 'a';
say 0 == count 'bnn', 'a';
say 0 == count '日本語', 'a';
say 2 == count '日本語abcde日本語', '日';

sub count1($word, $letter) {
    my $count = 0;
    for 0..($word.chars - 1) {
        $count++ if $word.substr($_, 1) eq $letter;
    }
    $count;
}
say 'count1';
say 0 == count1 '', 'a';
say 1 == count1 'a', 'a';
say 0 == count1 'b', 'a';
say 3 == count1 'banana', 'a';
say 0 == count1 'bnn', 'a';
say 0 == count1 '日本語', 'a';
say 2 == count1 '日本語abcde日本語', '日';

say '3.';
sub rotate-letter($letter, $n) {
    my $m = $n % 26;
    $m = $m + 26 if $m < 0;
    my $o = $letter.ord + $m;
    if $letter ~~ /<[a..z]>/ {
        return ($o - 26).chr if 'z'.ord < $o;
        return $o.chr;
    }
    if $letter ~~ /<[A..Z]>/ {
        return ($o - 26).chr if 'Z'.ord < $o;
        return $o.chr;
    } else {
        return $letter;
    }
}

sub rotate-word($word, $n) {
    my $word0 = '';
    for $word.comb -> $letter {
        $word0 ~= rotate-letter $letter, $n;
    }
    $word0;
}
say rotate-word('A', 3) eq 'D';
say rotate-word('Z', 1) eq 'A';
say rotate-word('cheer', 7) eq 'jolly';
say rotate-word('melon', -10) eq 'cubed';
say rotate-word('IBM', -1) eq 'HAL';

say rotate-word(rotate-word('Think Perl 6', 13), 13) eq 'Think Perl 6';

入出力結果(Terminal, REPL)

$ ./sample1.pl
1.
count
True
True
True
True
True
True
True
count1
True
True
True
True
True
True
True
3.
True
True
True
True
True
True
$

0 コメント:

コメントを投稿