aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@frontrangerunner.com>2020-08-17 05:39:46 -0600
committerMark Anderson <mark@frontrangerunner.com>2020-08-17 05:39:46 -0600
commit5050191e6336097ab728c03a89290b3caab083ad (patch)
treeba17414a535819ae15b1369e86baba5d8e51e93e
parentc97bde3ea44f3fd9a4ece6f2f8739ed9853401d0 (diff)
downloadperlweeklychallenge-club-5050191e6336097ab728c03a89290b3caab083ad.tar.gz
perlweeklychallenge-club-5050191e6336097ab728c03a89290b3caab083ad.tar.bz2
perlweeklychallenge-club-5050191e6336097ab728c03a89290b3caab083ad.zip
ch-1.raku
-rw-r--r--challenge-074/mark-anderson/raku/ch-2.p631
-rw-r--r--challenge-074/mark-anderson/raku/ch-2.raku25
2 files changed, 31 insertions, 25 deletions
diff --git a/challenge-074/mark-anderson/raku/ch-2.p6 b/challenge-074/mark-anderson/raku/ch-2.p6
new file mode 100644
index 0000000000..c572e643c3
--- /dev/null
+++ b/challenge-074/mark-anderson/raku/ch-2.p6
@@ -0,0 +1,31 @@
+sub MAIN($string) {
+ my @fnr-chars = gather {
+ for 1..$string.chars -> $i {
+ take fnr($string.substr(0, $i));
+ }
+ }
+
+ say @fnr-chars.join;
+}
+
+sub fnr($string) {
+ state %seen;
+ state $singles;
+
+ my $letter = $string.substr($string.chars-1, 1);
+
+ %seen{$letter}++;
+
+ given %seen{$letter} {
+ when 1 {
+ $singles ~= $letter;
+ return $letter;
+ }
+ when 2 {
+ my $idx = $singles.index($letter);
+ $singles = $singles.substr(0, $idx) ~ $singles.substr($idx+1);
+ }
+ }
+
+ return $singles.substr($singles.chars-1, 1) // "#";
+}
diff --git a/challenge-074/mark-anderson/raku/ch-2.raku b/challenge-074/mark-anderson/raku/ch-2.raku
deleted file mode 100644
index 2447d5f9a5..0000000000
--- a/challenge-074/mark-anderson/raku/ch-2.raku
+++ /dev/null
@@ -1,25 +0,0 @@
-unit sub MAIN($string);
-
-my %seen;
-my $singles;
-
-my @first-non-repeatings = gather {
- for 1..$string.chars -> $i {
- my $letter = $string.substr($i-1, 1);
-
- %seen{$letter}++;
-
- if %seen{$letter} == 1 {
- $singles ~= $letter;
- take $letter;
- }
-
- else {
- my $idx = $singles.index($letter);
- $singles = $singles.substr(0, $idx) ~ $singles.substr($idx+1);
- take $singles.substr($singles.chars-1, 1) // "#";
- }
- }
-}
-
-say @first-non-repeatings.join;