開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Perl 6 (プログラミング言語)
- Rakudo(コンパイラ、実装)
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 9(Arrays and Lists)の Exercise 9-1、2、3、4、5、6、7、8、9.を取り組んでみる。
Exercise 9-1、2、3、4、5、6、7、8、9.
コード(Emacs)
#!/usr/bin/env perl6
# -*- coding: utf-8 -*-
say '1.';
sub nested-sum(@AoA) {
my $result = 0;
for @AoA -> @a {
for @a {
$result += $_;
}
}
return $result;
}
my @AoA = [[1, 2], [3], [4, 5, 6]];
say nested-sum(@AoA);
say '2.';
sub cumul-sum(@numbers) {
my @result;
for 0..@numbers.elems - 1 {
push @result, @numbers[$_] + $_;
}
return @result;
}
my @nums = [1, 2, 3, 4];
say cumul-sum(@nums);
say '3.';
sub middle(@array) {
@array[1..*-2];
}
# say middle(1, 2, 3, 4); error
say middle (1, 2, 3, 4);
say '4.';
sub crop-it(@array) {
@array = @array[1..*-2];
return;
}
say @nums;
crop-it(@nums);
say @nums;
say '5.';
sub is-sorted(@array) {
my @array1 = sort @array;
for 0..@array1.elems - 1 {
return False unless @array1[$_] == @array[$_];
}
return True;
}
say is-sorted (1, 2, 2);
say is-sorted (1, 2, 1);
say '6.';
sub is-anagram($s1, $s2) {
return False unless $s1.chars == $s2.chars;
my @array1 = $s1.comb.sort;
my @array2 = $s2.comb.sort;
for 0..@array1.elems - 1 {
return False if @array1[$_] ne @array2[$_];
}
return True;
}
say is-anagram("perl 6", "6p elr");
say is-anagram("perl 6", "6pelr");
say is-anagram("perl 6", "6pelra");
say '7.';
sub has-duplicates(@array) {
@array.elems !== @array.unique.elems;
}
my @nums1 = (1, 2, 3, 4, 5);
my @nums2 = (1, 2, 1, 4, 5);
say has-duplicates(@nums1);
say has-duplicates(@nums2);
say '8.';
my $total = 10000;
my $deplicates = 0;
for 1..$total {
$deplicates++ if has-duplicates(map {365.rand.Int}, 1..23);
}
say $deplicates / $total * 100, '%';
say '9.';
for 1..5 {
my @words1;
my @words2;
my $t = now;
for 'words.txt'.IO.lines {
push @words1, $_;
}
say "push: ", now - $t;
$t = now;
for 'words.txt'.IO.lines {
unshift @words2, $_;
}
say "unshift: ", now - $t;
}
入出力結果(Terminal, REPL)
$ ./sample1.pl 1. 21 2. [1 3 5 7] 3. (2 3) 4. [1 2 3 4] [2 3] 5. True False 6. True False False 7. False True 8. 51.15% 9. push: 1.2547846 unshift: 1.61254895 push: 1.23710698 unshift: 1.6442248 push: 1.2594857 unshift: 1.6632775 push: 1.269719 unshift: 1.59224313 push: 1.38028078 unshift: 1.5838102 $
0 コメント:
コメントを投稿