diff options
Diffstat (limited to 'challenge-074')
| -rw-r--r-- | challenge-074/cheok-yin-fung/perl/ch-2.pl | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/challenge-074/cheok-yin-fung/perl/ch-2.pl b/challenge-074/cheok-yin-fung/perl/ch-2.pl new file mode 100644 index 0000000000..bae04b73b3 --- /dev/null +++ b/challenge-074/cheok-yin-fung/perl/ch-2.pl @@ -0,0 +1,48 @@ +#!/usr/bin/perl +# Perl Weekly Challenge #074 Task 2 FNR character +# task statement: +# You are given a string $S. +# Write a script to print the series of +# first non-repeating character +# (left -> right) for the given string. +# Print # if none found. +# Usage: ch-2.pl [string] + +use strict; +use warnings; +#use Test::More tests => 5; + +sub fnr { + my @uniquestack; + my %charcount; + my $ans = ""; + my @characters = split //, $_[0]; + for my $char (@characters) { + if (!exists $charcount{$char} ) { + push @uniquestack , $char; + $charcount{$char} = 1; + $ans .= $char; + } + else { + $charcount{$char}++; + @uniquestack = grep { $charcount{$_} == 1 } @uniquestack; + $ans .= (scalar @uniquestack != 0) ? $uniquestack[-1] : "#"; + } + } + return $ans; + +} + +print fnr("$ARGV[0]"); + +=pod +is_deeply( fnr("ababc") , "abb#c", "example1 provided"); +is_deeply( fnr("xyzzyx") , "xyzyx#", "example2 provided"); +is_deeply( fnr("abcdef") , "abcdef", "trival"); +is_deeply( fnr("aaabbb") , "a##b##", "repeats"); +is_deeply( fnr( + "thequickbrownfoxjumpsoverthelazydog") , + "thequickbrownffxjjmpssvvvvvvlazyddg", + "long sentence" +); +=cut |
