And now for something completely different :)
#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11162756
use warnings;
Test();
sub hasSameChars
{
( grep(defined, @_) or return 1 ) < @_ and return 0;
my %same = map { do {
my @count = (0) x 256;
$count[ord $&]++ while /./gs;
"@count"
}, 1 } @_;
return %same == 1 ? 1 : 0;
}
sub Test
{
my $ERRORS = 0;
# TESTING TRUE:
hasSameChars("Hello World!", "Hello World!") == 1 or
+ $ERRORS++;
hasSameChars("Hello World!", "Hdll!ooreWl ") == 1 or
+ $ERRORS++;
hasSameChars("Hello World!", "Hdll!ooreWl ", "Hlde! Wlloor") == 1 or
+ $ERRORS++;
hasSameChars("FALLEN", "LENFAL", "ELFALN") == 1 or
+ $ERRORS++;
hasSameChars(undef, undef, undef) == 1 or
+ $ERRORS++;
hasSameChars('', '', '', '') == 1 or
+ $ERRORS++;
hasSameChars('A', 'A', 'A', 'A') == 1 or
+ $ERRORS++;
hasSameChars("\r\n\t\0\0\1", "\0\1\t\0\n\r", "\n\1\r\t\0\0") == 1 or
+ $ERRORS++;
hasSameChars('ABB', 'BBA', 'BAB', 'BBA') == 1 or
+ $ERRORS++;
hasSameChars(' ', ' ', ' ', ' ') == 1 or
+ $ERRORS++;
hasSameChars("ABC", "CAB", "BAC", "BCA", "ACB", "ABC") == 1 or
+ $ERRORS++;
# TESTING FALSE:
hasSameChars("\r\n\t\0\1\2", "\0\2\t\1\n\r", "\t\t\r\1\2\n") == 0 or
+ $ERRORS++;
hasSameChars("Hello World!", "Hdll!ooreWl ", "Hlde! Wlloo") == 0 or
+ $ERRORS++;
hasSameChars("Hello World!", "Hdll!ooreWl") == 0 or
+ $ERRORS++;
hasSameChars("ABC", "C_B", "BAC", "BCA", "ACB", "ABC") == 0 or
+ $ERRORS++;
hasSameChars("ALLEN", "ELLEN", "HALLEN", "HELLEN") == 0 or
+ $ERRORS++;
hasSameChars("FALLEN", "Lenfal", "ELFALN") == 0 or
+ $ERRORS++;
hasSameChars("FALLEN", "FALLEN ") == 0 or
+ $ERRORS++;
hasSameChars(undef, "FALLEN", "FALLEN") == 0 or
+ $ERRORS++;
hasSameChars("FALLEN", undef, "FALLEN") == 0 or
+ $ERRORS++;
hasSameChars("FALLEN", "FALLEN", undef) == 0 or
+ $ERRORS++;
hasSameChars('', undef, undef) == 0 or
+ $ERRORS++;
hasSameChars('ABB', 'ABA', 'BAA', 'BAA') == 0 or
+ $ERRORS++;
hasSameChars(' ', ' ', ' ', "\t") == 0 or
+ $ERRORS++;
print "ERRORS = $ERRORS\n";
}
Outputs:
ERRORS = 0