aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-239/mark-anderson/raku/ch-1.raku11
-rw-r--r--challenge-239/mark-anderson/raku/ch-2.raku39
2 files changed, 50 insertions, 0 deletions
diff --git a/challenge-239/mark-anderson/raku/ch-1.raku b/challenge-239/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..4763f75e9f
--- /dev/null
+++ b/challenge-239/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,11 @@
+#!/usr/bin/env raku
+use Test;
+
+ok same-string(<ab c>, <a bc>);
+nok same-string(<ab c>, <ac b>);
+ok same-string(<ab cd e>, [<abcde>]);
+
+sub same-string(@a, @b)
+{
+ [eq] ([~] @a), ([~] @b)
+}
diff --git a/challenge-239/mark-anderson/raku/ch-2.raku b/challenge-239/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..f6c46defd7
--- /dev/null
+++ b/challenge-239/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,39 @@
+#!/usr/bin/env raku
+use Test;
+use Benchy;
+
+is consistent-strings(<ad bd aaab baa badab>, 'ab'), 2;
+is consistent-strings(<a b c ab ac bc abc>, 'abc'), 7;
+is consistent-strings(<cc acd b ba bac bad ac d>, 'cad'), 4;
+benchmark();
+
+sub consistent-strings(@a, $allowed)
+{
+ @a.grep({ .comb (<=) $allowed.comb }).elems
+}
+
+sub consistent-strings-slow(@a, $allowed)
+{
+ @a.match(/ <|w> <{"<[$allowed]>"}>+ <|w> /, :global).elems
+}
+
+sub benchmark
+{
+ b 10,
+ {
+ consistent-strings-slow(<ad bd aaab baa badab>, 'ab');
+ consistent-strings-slow(<a b c ab ac bc abc>, 'abc');
+ consistent-strings-slow(<cc acd b ba bac bad ac d>, 'cad')
+ },
+
+ {
+ consistent-strings(<ad bd aaab baa badab>, 'ab');
+ consistent-strings(<a b c ab ac bc abc>, 'abc');
+ consistent-strings(<cc acd b ba bac bad ac d>, 'cad')
+ }
+
+ # Bare: 0.000040891s
+ # Old: 11.435895767s
+ # New: 0.019084392s
+ # NEW version is 599.23x faster
+}