diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2019-10-13 21:28:10 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-13 21:28:10 +0100 |
| commit | a3763c7d107ba1460ff5f49bf42ee5f7395b7abf (patch) | |
| tree | 2db28e66f7b3decfc46f270a3319132d7e24ca2a | |
| parent | 7a7ff0194d2f038d7e9644a019fa5a17ad4925aa (diff) | |
| parent | c65eeecf854439cf46f363ef7df01a275432dfb7 (diff) | |
| download | perlweeklychallenge-club-a3763c7d107ba1460ff5f49bf42ee5f7395b7abf.tar.gz perlweeklychallenge-club-a3763c7d107ba1460ff5f49bf42ee5f7395b7abf.tar.bz2 perlweeklychallenge-club-a3763c7d107ba1460ff5f49bf42ee5f7395b7abf.zip | |
Merge pull request #754 from drclaw1394/master
ruben/drclaw solutions for w29 ch1 and ch2. p5 and p6
| -rw-r--r-- | challenge-029/ruben-westerberg/README | 14 | ||||
| -rwxr-xr-x | challenge-029/ruben-westerberg/perl5/ch-1.pl | 41 | ||||
| -rwxr-xr-x | challenge-029/ruben-westerberg/perl5/ch-2.pl | 13 | ||||
| -rwxr-xr-x | challenge-029/ruben-westerberg/perl6/ch-1.p6 | 30 | ||||
| -rwxr-xr-x | challenge-029/ruben-westerberg/perl6/ch-2.p6 | 5 |
5 files changed, 100 insertions, 3 deletions
diff --git a/challenge-029/ruben-westerberg/README b/challenge-029/ruben-westerberg/README index aa0fd9c8d2..e6f292a7cb 100644 --- a/challenge-029/ruben-westerberg/README +++ b/challenge-029/ruben-westerberg/README @@ -2,9 +2,17 @@ Solution by Ruben Westerberg ch-1.pl and ch-1.p6 === -Run the program with command line arguments representing file names. The extension of the file name is matched against known file types. +Run the program with commanline arguments enclosed in single quotes to prevent the shell from performing its own brace expansion. This will to multiple levels of expension and generate all combinations; + eg + ./ch-1.pl '{Bob,Tim} say hello to {Mary,Rose}' + + this will ouput 4 lines + Bob say hellow to Mary + Bob say hellow to Rose + Tim say hellow to Mary + Tim say hellow to Rose + ch-2.pl and ch-2.p6 === -Run the program to show a simple digital clock - +Run the program to demonstrate calling a C function diff --git a/challenge-029/ruben-westerberg/perl5/ch-1.pl b/challenge-029/ruben-westerberg/perl5/ch-1.pl new file mode 100755 index 0000000000..9e5631577f --- /dev/null +++ b/challenge-029/ruben-westerberg/perl5/ch-1.pl @@ -0,0 +1,41 @@ +#!/usr/bin/env perl +use warnings; +use strict; +use v5.26; + +$_=join " ", @ARGV; + +my @positions; +my @entries; + +#Match multiple brace expansions in a single string +while (/{[^}]*}/g) { + push @positions,[$-[0], $+[0]]; + push @entries, [ split /[{},]/, substr $_, $-[0]+1,$+[0]-$-[0]-1]; +} + +print expand($_,[],\@entries, \@positions); + +sub expand { + my @results; + my ($line,$stack,$entries,$positions)=@_; + if (@$stack == @$entries) { + my $l=$line; + my $offset=0; + for (0..@$stack-1) { + substr $l, $$positions[$_]->[0]+$offset, $$positions[$_]->[1]-$$positions[$_]->[0], $$stack[$_]; + $offset+=($$positions[$_]->[0]-$$positions[$_]->[1]) +length $$stack[$_]; + } + return $l."\n"; + } + else { + my @s; + my $e= $$entries[@$stack]; + for (0..@$e-1) { + @s=(@$stack, $$e[$_]); + push @results, expand($line,\@s,$entries,$positions); + } + return @results; + } +} + diff --git a/challenge-029/ruben-westerberg/perl5/ch-2.pl b/challenge-029/ruben-westerberg/perl5/ch-2.pl new file mode 100755 index 0000000000..3694d1ae5f --- /dev/null +++ b/challenge-029/ruben-westerberg/perl5/ch-2.pl @@ -0,0 +1,13 @@ +#!/usr/bin/env perl +use warnings; +use strict; + +use Inline C => <<'__END__'; + +int wgetuid() { + return getuid(); +} +__END__ + +print "User ID: ".wgetuid()."\n"; + diff --git a/challenge-029/ruben-westerberg/perl6/ch-1.p6 b/challenge-029/ruben-westerberg/perl6/ch-1.p6 new file mode 100755 index 0000000000..a5c161bec4 --- /dev/null +++ b/challenge-029/ruben-westerberg/perl6/ch-1.p6 @@ -0,0 +1,30 @@ +#!/usr/bin/env perl6 + +$_= @*ARGS.join(" "); +my $matches=m:g/\{.*?\}/; +my @entries; +@entries.push: [.Str.split: /<[\{\}\,]>/, :skip-empty] for $matches.list; + +expand($_,[],@entries,$matches.list).map(*.say); + +sub expand($line,@stack,@entries, @positions) { + my @results; + if (@stack == @entries ) { + my $l=$line; + my $offset=0; + for @stack.keys { + $l.substr-rw(@positions[$_].from-$offset, @positions[$_].chars)=@stack[$_]; + $offset+=@positions[$_].chars-@stack[$_].chars; + } + return ($l,); + } + else { + my @s; + my @e=|@entries[@stack.elems]; + for @e { + @s= (|@stack[], |$_); + @results.push( |expand($line, @s,@entries, @positions)); + } + return @results; + } +} diff --git a/challenge-029/ruben-westerberg/perl6/ch-2.p6 b/challenge-029/ruben-westerberg/perl6/ch-2.p6 new file mode 100755 index 0000000000..3362743b22 --- /dev/null +++ b/challenge-029/ruben-westerberg/perl6/ch-2.p6 @@ -0,0 +1,5 @@ +#!/usr/bin/env perl6 + +use NativeCall; +sub getuid() returns uint32 is native { * }; +put "User ID: "~getuid; |
