Proficient way to check if 3 variables are all unique

algorithm, optimization, perl

Solution

Abstracting complicated details (e.g. those that "look clunky") is the point of subs. Move the logic to a sub if you don't like seeing it. Personally, that looks fine for me for three variables.

Note that if you're moving the code to a sub, you might consider using an O(N) algorithm. Your current approach scales poorly (O(N2)).

sub are_distinct {
   my %seen;
   ++$seen{$_} for @_;
   return keys(%seen) == @_;
}

Optimized to exit as soon as possible:

sub are_distinct {
   my %seen;
   for (@_) {
      return 0 if $seen{$_}++;
   }

   return 1;
}

Problem

I wanted to write a script that checks if 3 variables (A,B,C) are all unique and dont equal each other. I thought of just doing a big if statement like: ``` if (A != B) && (A != C) && (B != C){ // do function } ``` I was just wondering if there is another way? Because the code looks kindof clunky. This is in Perl.

Original source