diff options
| author | Roger Bell_West <roger@firedrake.org> | 2020-10-05 13:50:09 +0100 |
|---|---|---|
| committer | Roger Bell_West <roger@firedrake.org> | 2020-10-05 13:50:09 +0100 |
| commit | f7f12eee1c19eda34d5e3f7f0455921b965ccd5c (patch) | |
| tree | 255a3ec45ba3f30cb0bd139b5f5fc14462cf51cb | |
| parent | cef248ba491398a30061ba49fbc2a824116ae996 (diff) | |
| download | perlweeklychallenge-club-f7f12eee1c19eda34d5e3f7f0455921b965ccd5c.tar.gz perlweeklychallenge-club-f7f12eee1c19eda34d5e3f7f0455921b965ccd5c.tar.bz2 perlweeklychallenge-club-f7f12eee1c19eda34d5e3f7f0455921b965ccd5c.zip | |
Solutions for challenge #81.
| -rwxr-xr-x | challenge-081/roger-bell-west/perl/ch-1.pl | 54 | ||||
| -rwxr-xr-x | challenge-081/roger-bell-west/perl/ch-2.pl | 19 | ||||
| -rwxr-xr-x | challenge-081/roger-bell-west/python/ch-1.py | 48 | ||||
| -rwxr-xr-x | challenge-081/roger-bell-west/python/ch-2.py | 23 | ||||
| -rwxr-xr-x | challenge-081/roger-bell-west/raku/ch-1.p6 | 48 | ||||
| -rwxr-xr-x | challenge-081/roger-bell-west/raku/ch-2.p6 | 20 | ||||
| -rwxr-xr-x | challenge-081/roger-bell-west/ruby/ch-1.rb | 60 | ||||
| -rwxr-xr-x | challenge-081/roger-bell-west/ruby/ch-2.rb | 25 |
8 files changed, 297 insertions, 0 deletions
diff --git a/challenge-081/roger-bell-west/perl/ch-1.pl b/challenge-081/roger-bell-west/perl/ch-1.pl new file mode 100755 index 0000000000..0cfa6ac97e --- /dev/null +++ b/challenge-081/roger-bell-west/perl/ch-1.pl @@ -0,0 +1,54 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 4; + +is_deeply(bs('abcdabcd'),['abcd','abcdabcd'],'bs-only 1'); +is_deeply(bs('aaa'),['a','aaa'],'bs-only 2'); + +is_deeply(cbs('abcdabcd','abcdabcdabcdabcd'),['abcd','abcdabcd'],'example 1'); +is_deeply(cbs('aaa','aa'),['a'],'example 2'); + +sub cbs { + my @bss=map {bs($_)} @_; + my %r; + my $f=0; + foreach my $bs (@bss) { + if ($f) { + my %s=map {$_ => 1} @{$bs}; + foreach my $k (keys %r) { + unless (exists $s{$k}) { + delete $r{$k}; + } + } + } else { + %r=map {$_ => 1} @{$bs}; + $f=1; + } + } + return [sort keys %r]; +} + +sub bs { + my $str=shift; + my $sl=length($str); + my %f; + foreach my $n (1..int(sqrt($sl))) { + my $p=$sl/$n; + if ($p==int($p)) { + $f{$n}=$p; + $f{$p}=$n; + } + } + my @out; + foreach my $l (sort keys %f) { + my $q=substr($str,0,$l); + if ($q x $f{$l} eq $str) { + push @out,$q; + } + } + return \@out; +} + diff --git a/challenge-081/roger-bell-west/perl/ch-2.pl b/challenge-081/roger-bell-west/perl/ch-2.pl new file mode 100755 index 0000000000..0d8d14be2b --- /dev/null +++ b/challenge-081/roger-bell-west/perl/ch-2.pl @@ -0,0 +1,19 @@ +#! /usr/bin/perl + +use strict; +use warnings; + +my %c; +while (<>) { + chomp; + s/(--|'s)/ /g; + s/[."(),]+/ /g; + map {$c{$_}++} split ' ',$_; +} + +my %f; +map {push @{$f{$c{$_}}},$_} sort keys %c; + +foreach my $n (sort keys %f) { + print join(' ',$n,@{%f{$n}}),"\n\n"; +} diff --git a/challenge-081/roger-bell-west/python/ch-1.py b/challenge-081/roger-bell-west/python/ch-1.py new file mode 100755 index 0000000000..42f02ed19b --- /dev/null +++ b/challenge-081/roger-bell-west/python/ch-1.py @@ -0,0 +1,48 @@ +#! /usr/bin/python3 + +import unittest +from math import sqrt + +def cbs(*strs): + bss=map(bs,strs) + r=set() + f=False + for bsa in bss: + if (f): + s=set(bsa) + r=r & s + else: + r=set(bsa) + f=True + return sorted(r) + +def bs(str): + sl=len(str) + f=dict() + for n in range(1,int(sqrt(sl))+1): + p=sl/n + if (p == int(p)): + f[n]=p + f[p]=n + out=list() + for l in sorted(f.keys()): + q=str[0:int(l)] + if (q * int(f[l]) == str): + out.append(q) + return out + +class TestCbs(unittest.TestCase): + + def test_bs1(self): + self.assertEqual(bs('abcdabcd'),['abcd','abcdabcd'],'bs-only 1') + + def test_bs2(self): + self.assertEqual(bs('aaa'),['a','aaa'],'bs-only 2') + + def test_ex1(self): + self.assertEqual(cbs('abcdabcd','abcdabcdabcdabcd'),['abcd','abcdabcd'],'example 1') + + def test_ex2(self): + self.assertEqual(cbs('aaa','aa'),['a',],'example 2') + +unittest.main() diff --git a/challenge-081/roger-bell-west/python/ch-2.py b/challenge-081/roger-bell-west/python/ch-2.py new file mode 100755 index 0000000000..eca8fb3cc3 --- /dev/null +++ b/challenge-081/roger-bell-west/python/ch-2.py @@ -0,0 +1,23 @@ +#! /usr/bin/python3 + +import fileinput +from itertools import chain + +c=dict() + +for line in fileinput.input(): + line=line.rstrip("\r\n") + for rep in ('--',"'s",'.','"','(',')',','): + line=line.replace(rep,' ') + for word in line.split(): + c.setdefault(word,0) + c[word] += 1 + +f=dict() +for w in sorted(c.keys()): + f.setdefault(c[w],list()) + f[c[w]].append(w) + +for n in sorted(f.keys()): + print(' '.join((list(str(n)) + f[n]))) + print('') diff --git a/challenge-081/roger-bell-west/raku/ch-1.p6 b/challenge-081/roger-bell-west/raku/ch-1.p6 new file mode 100755 index 0000000000..ce3ee50556 --- /dev/null +++ b/challenge-081/roger-bell-west/raku/ch-1.p6 @@ -0,0 +1,48 @@ +#! /usr/bin/perl6 + +use Test; + +plan 4; + +is-deeply(bs('abcdabcd'),['abcd','abcdabcd'],'bs-only 1'); +is-deeply(bs('aaa'),['a','aaa'],'bs-only 2'); + +is-deeply(cbs('abcdabcd','abcdabcdabcdabcd'),('abcd','abcdabcd'),'example 1'); +is-deeply(cbs('aaa','aa'),('a',),'example 2'); + +sub cbs(**@strs) { + my @bss=map {bs($_)},@strs; + my $r=SetHash.new; + my $f=0; + for @bss -> @bs { + if ($f) { + my $s=@bs.SetHash; + $r = $r (&) $s; + } else { + $r=@bs; + $f=1; + } + } + return sort $r.keys; +} + +sub bs($str) { + my $sl=$str.chars; + my %f; + for 1..floor(sqrt($sl)) -> $n { + my $p=$sl/$n; + if ($p==floor($p)) { + %f{$n}=$p; + %f{$p}=$n; + } + } + my @out; + for sort keys %f -> $l { + my $q=substr($str,0,$l); + if ($q x %f{$l} eq $str) { + push @out,$q; + } + } + return @out; +} + diff --git a/challenge-081/roger-bell-west/raku/ch-2.p6 b/challenge-081/roger-bell-west/raku/ch-2.p6 new file mode 100755 index 0000000000..ea6eea3933 --- /dev/null +++ b/challenge-081/roger-bell-west/raku/ch-2.p6 @@ -0,0 +1,20 @@ +#! /usr/bin/perl6 + +my %c; +for lines() { + .chomp; + my $s=$_; + $s ~~ s :g /(\-\-|\'s)/ /; + $s ~~ s :g /<[.\"\(\),]>+/ /; + map {%c{$_}++}, grep /./, split ' ',$s; +} + +my %f; +for sort keys %c -> $w { + push %f{%c{$w}},$w; +} + +for sort keys %f -> $n { + say join(' ',$n,%f{$n}); + say ''; +} diff --git a/challenge-081/roger-bell-west/ruby/ch-1.rb b/challenge-081/roger-bell-west/ruby/ch-1.rb new file mode 100755 index 0000000000..bbaa1d140b --- /dev/null +++ b/challenge-081/roger-bell-west/ruby/ch-1.rb @@ -0,0 +1,60 @@ +#! /usr/bin/ruby + +require 'set' + +def cbs(*strs) + bss=strs.map {|x| bs(x)} + r=Set.new + f=false + for bsa in bss + if f + r=r & Set.new(bsa) + else + r=Set.new(bsa) + f=true + end + end + return r.sort +end + +def bs(str) + sl=str.length + f=Hash.new + 1.upto(Math.sqrt(sl).floor) do |n| + p=sl/n + if p == p.floor + f[n]=p + f[p]=n + end + end + out=Array.new + for l in f.sort_by {|n, p| n} + q=str[0,l[0]] + if q * l[1] == str + out.push(q) + end + end + return out +end + +require 'test/unit' + +class TestCbs < Test::Unit::TestCase + + def test_bs1 + assert_equal(['abcd','abcdabcd'],bs('abcdabcd')) + end + + def test_bs2 + assert_equal(['a','aaa'],bs('aaa')) + end + + def test_ex1 + assert_equal(['abcd','abcdabcd'],cbs('abcdabcd','abcdabcdabcdabcd')) + end + + def test_ex2 + assert_equal(['a',],cbs('aaa','aa')) + end + +end diff --git a/challenge-081/roger-bell-west/ruby/ch-2.rb b/challenge-081/roger-bell-west/ruby/ch-2.rb new file mode 100755 index 0000000000..8b5afef7ff --- /dev/null +++ b/challenge-081/roger-bell-west/ruby/ch-2.rb @@ -0,0 +1,25 @@ +#! /usr/bin/ruby + +c=Hash.new +c.default=0 + +while line = gets + line=line.chomp + line=line.gsub(/(--|\'s)/,' ') + line=line.gsub(/[.\"(),]+/,' ') + for word in line.split(' ') + c[word] += 1 + end +end + +f=Hash.new +for l in c.sort_by {|w, c| w} + if !f.include?(l[1]) + f[l[1]]=[l[1]] + end + f[l[1]].push(l[0]) +end + +for l in f.sort_by {|f, wl| f} + print l[1].join(' '),"\n\n" +end |
