aboutsummaryrefslogtreecommitdiff
path: root/challenge-161
diff options
context:
space:
mode:
authorIldar Shaimordanov <ildar.shaimordanov@gmail.com>2022-04-25 21:28:47 +0300
committerIldar Shaimordanov <ildar.shaimordanov@gmail.com>2022-04-25 21:28:47 +0300
commitf8a5059338e0da84f40b191d44ead097728710ce (patch)
treec477e09b7e7fcb769fb10a67b9253922d3b18acb /challenge-161
parentaf5fd62b1bded1873f6d0c1d54119cfc4dddcb17 (diff)
downloadperlweeklychallenge-club-f8a5059338e0da84f40b191d44ead097728710ce.tar.gz
perlweeklychallenge-club-f8a5059338e0da84f40b191d44ead097728710ce.tar.bz2
perlweeklychallenge-club-f8a5059338e0da84f40b191d44ead097728710ce.zip
Add the solution for challenge-161/ch-1 by Ildar Shaimordanov
Diffstat (limited to 'challenge-161')
-rw-r--r--challenge-161/ildar-shaimordanov/README1
-rw-r--r--challenge-161/ildar-shaimordanov/perl/ch-1.pl50
2 files changed, 51 insertions, 0 deletions
diff --git a/challenge-161/ildar-shaimordanov/README b/challenge-161/ildar-shaimordanov/README
new file mode 100644
index 0000000000..1509c3983f
--- /dev/null
+++ b/challenge-161/ildar-shaimordanov/README
@@ -0,0 +1 @@
+Solution by Ildar Shaimordanov
diff --git a/challenge-161/ildar-shaimordanov/perl/ch-1.pl b/challenge-161/ildar-shaimordanov/perl/ch-1.pl
new file mode 100644
index 0000000000..477d6164cf
--- /dev/null
+++ b/challenge-161/ildar-shaimordanov/perl/ch-1.pl
@@ -0,0 +1,50 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+
+# https://theweeklychallenge.org/blog/perl-weekly-challenge-161/
+#
+# Task 1: Abecedarian Words
+# Submitted by: Ryan J Thompson
+#
+# An abecedarian word is a word whose letters are arranged in alphabetical
+# order. For example, “knotty” is an abecedarian word, but “knots”
+# is not. Output or return a list of all abecedarian words in the
+# dictionary, sorted in decreasing order of length.
+
+# =========================================================================
+
+# The version using regex
+
+# The same approach as one-liner
+# perl -nle 'BEGIN { $A = join "", "a".."z" } $a = $A; ( $w = $_ ) =~ s/(.)\1*/$a =~ s#.*$1## ? "" : $&/eg; $w or print'
+
+my $A = join "", "a".."z";
+
+while ( <> ) {
+ my $a = $A;
+
+ chomp( my $word = $_ );
+
+ $word =~ s/(.)\1*/ $a =~ s|.*$1|| ? "" : $& /eg;
+
+ $word or print;
+}
+
+# =========================================================================
+
+# The version using split/sort/join
+
+# The same approach as one-liner
+# perl -nle '( join "", sort split // ) eq $_ && print'
+
+#while ( <> ) {
+# chomp( my $word = $_ );
+# my $sorted = join '', sort split //, $word;
+# $sorted eq $word && print;
+#}
+
+# =========================================================================
+
+# EOF