aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2020-10-06 06:27:37 +0100
committerGitHub <noreply@github.com>2020-10-06 06:27:37 +0100
commitacba60668ab6f7b3cce1f81074e0bd281d277be8 (patch)
treeb952cbb7487ea9362ed32989f6f8473d251e26a8
parentcdbbf5843a6257beda18be5ed52cd1ad796f3970 (diff)
parentf7f12eee1c19eda34d5e3f7f0455921b965ccd5c (diff)
downloadperlweeklychallenge-club-acba60668ab6f7b3cce1f81074e0bd281d277be8.tar.gz
perlweeklychallenge-club-acba60668ab6f7b3cce1f81074e0bd281d277be8.tar.bz2
perlweeklychallenge-club-acba60668ab6f7b3cce1f81074e0bd281d277be8.zip
Merge pull request #2458 from Firedrake/rogerbw-challenge-081
Solutions for challenge #81.
-rwxr-xr-xchallenge-081/roger-bell-west/perl/ch-1.pl54
-rwxr-xr-xchallenge-081/roger-bell-west/perl/ch-2.pl19
-rwxr-xr-xchallenge-081/roger-bell-west/python/ch-1.py48
-rwxr-xr-xchallenge-081/roger-bell-west/python/ch-2.py23
-rwxr-xr-xchallenge-081/roger-bell-west/raku/ch-1.p648
-rwxr-xr-xchallenge-081/roger-bell-west/raku/ch-2.p620
-rwxr-xr-xchallenge-081/roger-bell-west/ruby/ch-1.rb60
-rwxr-xr-xchallenge-081/roger-bell-west/ruby/ch-2.rb25
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