Skip to content

Instantly share code, notes, and snippets.

@kevinnz
Last active September 20, 2022 13:46
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevinnz/0b808d825bccaa4fb6ee2d8d698c5c9e to your computer and use it in GitHub Desktop.
Save kevinnz/0b808d825bccaa4fb6ee2d8d698c5c9e to your computer and use it in GitHub Desktop.
#!/usr/bin/perl
use strict;
use warnings;
my %permution = (
"a" => "a4@&A",
"b" => "bB",
"c" => "cC",
"d" => "dD",
"e" => "3Ee",
"f" => "fF",
"g" => "gG9",
"h" => "hH",
"i" => "iI!|1",
"j" => "jJ",
"k" => "kK",
"l" => "lL!71|",
"m" => "mM",
"n" => "nN",
"o" => "oO0",
"p" => "pP",
"q" => "qQ",
"r" => "rR",
"s" => "sS5\$",
"t" => "tT71+",
"u" => "uU",
"v" => "vV",
"w" => "wW",
"x" => "xX",
"y" => "yY",
"z" => "zZ2",
);
# End config
while(my $word = <>) {
chomp $word;
my @string = split //, lc($word);
&permute(0, @string);
}
sub permute {
my $num = shift;
my @str = @_;
my $len = @str;
if($num >= $len) {
foreach my $char (@str) {
print $char;
}
print "\n";
return;
}
my $per = $permution{$str[$num]};
if($per) {
my @letters = split //, $per;
$per = "";
foreach $per (@letters) {
my $s = "";
for(my $i = 0; $i < $len; $i++) {
if($i eq 0) {
if($i eq $num) {
$s = $per;
} else {
$s = $str[0];
}
} else {
if($i eq $num) {
$s .= $per;
} else {
$s .= $str[$i];
}
}
}
my @st = split //, $s;
&permute(($num + 1), @st);
}
} else {
&permute(($num + 1), @str);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment