aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-180/steven-wilson/perl/ch-01.pl33
1 files changed, 33 insertions, 0 deletions
diff --git a/challenge-180/steven-wilson/perl/ch-01.pl b/challenge-180/steven-wilson/perl/ch-01.pl
new file mode 100644
index 0000000000..60bf86968e
--- /dev/null
+++ b/challenge-180/steven-wilson/perl/ch-01.pl
@@ -0,0 +1,33 @@
+#!/usr/bin/env perl
+# Week 180 Task 1
+# Write a script to find out the first unique character in the given string
+# and print its index (0-based).
+
+use strict;
+use warnings;
+use Test::More;
+
+ok(first_unique_character("Perl Weekly Challenge") == 0, "First");
+ok(first_unique_character("Long Live Perl") == 1, "Second");
+ok(first_unique_character("LOLOLx") == 5, "Last");
+ok(!defined(first_unique_character("LOLO")), "None");
+done_testing();
+
+sub first_unique_character {
+ my $s = shift;
+ my $len = length $s;
+ my $index = 0;
+ while ( $index < $len) {
+ my $c = substr $s, $index, 1;
+ my $number = () = $s =~ /$c/gi;
+ if ( $number == 1){
+ last;
+ }
+ $index++;
+ if ($index == $len) {
+ undef $index;
+ last;
+ }
+ }
+ return $index;
+} \ No newline at end of file