http://qs321.pair.com?node_id=496566

Yzzyx has asked for the wisdom of the Perl Monks concerning the following question:

I'm looking for a faster way to determine if all the digits in a 10 character string are unique.

Running this once is fast enough, but my program does this thousands of times. Each time the string is different, of course.

One slow way:

#!/usr/bin/perl -w use strict; while ( <> ) { chomp; die unless /^\d{10}$/; &uniq ( $_ ) == 1 ? print "1\n" : print "0\n"; } sub uniq { for ( 0 .. 9 ) { return 0 if $_[0] !~ /$_/; } return 1; }

Another slow way:

#!/usr/bin/perl -w use strict; while ( <> ) { chomp; die unless /^\d{10}$/; &uniq ( $_ ) == 1 ? print "1\n" : print "0\n"; } sub uniq { my $x = $_[0]; my @x = sort split //, $x; $x = join "", @x; $x =~ tr/0-9//s; length $x == 10 ? return 1 : return 0; }

Thanks!