snippetrubyMinor
Generate permutations with symbols
Viewed 0 times
withgeneratesymbolspermutations
Problem
Goal: Create a combination of emails based from inputted first name, last name, middle name, and a domain. Add in common separators. Then I'll check which one is correct with the rapportive API. This is the first part of the bigger script.
If you are given the
How would you create the following?
at the moment I am solving it by creating an
```
fi_perms = [fi].product ['_' + li,
'_' + ln,
'-' +li,
'-' ln,
'.' + li,
'.' + ln,
li,
ln,
If you are given the
string variables{fn}
{ln}
{fi}
{li}
{mi}
{mn}How would you create the following?
{fn}
{ln}
{fn}{ln}
{fn}.{ln}
{fi}{ln}
{fi}.{ln}
{fn}{li}
{fn}.{li}
{fi}{li}
{fi}.{li}
{ln}{fn}
{ln}.{fn}
{ln}{fi}
{ln}.{fi}
{li}{fn}
{li}.{fn}
{li}{fi}
{li}.{fi}
{fi}{mi}{ln}
{fi}{mi}.{ln}
{fn}{mi}{ln}
{fn}.{mi}.{ln}
{fn}{mn}{ln}
{fn}.{mn}.{ln}
{fn}-{ln}
{fi}-{ln}
{fn}-{li}
{fi}-{li}
{ln}-{fn}
{ln}-{fi}
{li}-{fn}
{li}-{fi}
{fi}{mi}-{ln}
{fn}-{mi}-{ln}
{fn}-{mn}-{ln}
{fn}_{ln}
{fi}_{ln}
{fn}_{li}
{fi}_{li}
{ln}_{fn}
{ln}_{fi}
{li}_{fn}
{li}_{fi}
{fi}{mi}_{ln}
{fn}_{mi}_{ln}
{fn}_{mn}_{ln}at the moment I am solving it by creating an
array for each permutation ```
fi_perms = [fi].product ['_' + li,
'_' + ln,
'-' +li,
'-' ln,
'.' + li,
'.' + ln,
li,
ln,
Solution
Since your list is not "all permutation", but is painstakingly built by hand, I would not suggest using array's
I would suggest building it in a more readable way. In your way of
And then use substitutions to get all permutations:
permutation API or something like that, but keep the curated mode you are using.I would suggest building it in a more readable way. In your way of
[fi].product[...] it is very hard to follow which permutation exists, and which doesn't. The first list you show is more readable, and if you name your atoms correctly (first_name instead of fn), it makes it trivial to understand what you are trying to do. I would suggest building your permutation table as a string like this:name_permutations = <<PERMS
{last_initial}{first_name}
{last_initial}.{first_name}
{last_initial}{first_initial}
{last_initial}.{first_initial}
{first_initial}{middle_initial}{last_name}
{first_initial}{middle_initial}.{last_name}
{first_name}{middle_initial}{last_name}
{first_name}.{middle_initial}.{last_name}
{first_name}{middle_name}{last_name}
{first_name}.{middle_name}.{last_name}
{first_name}-{last_name}
{first_initial}-{last_name}
{first_name}-{last_initial}
{first_initial}-{last_initial}
{last_name}-{first_name}
{last_name}-{first_initial}
{last_initial}-{first_name}
{last_initial}-{first_initial}
...
PERMSAnd then use substitutions to get all permutations:
name_permutations.gsub('{first_name}', first_name)
.gsub('{last_name}', last_name)
.gsub('{middle_name}', middle_name)
.gsub('{first_initial}', first_initial)
.gsub('{middle_initial}', middle_initial)
.gsub('{last_initial}', last_initial)
.split($/)Code Snippets
name_permutations = <<PERMS
{last_initial}{first_name}
{last_initial}.{first_name}
{last_initial}{first_initial}
{last_initial}.{first_initial}
{first_initial}{middle_initial}{last_name}
{first_initial}{middle_initial}.{last_name}
{first_name}{middle_initial}{last_name}
{first_name}.{middle_initial}.{last_name}
{first_name}{middle_name}{last_name}
{first_name}.{middle_name}.{last_name}
{first_name}-{last_name}
{first_initial}-{last_name}
{first_name}-{last_initial}
{first_initial}-{last_initial}
{last_name}-{first_name}
{last_name}-{first_initial}
{last_initial}-{first_name}
{last_initial}-{first_initial}
...
PERMSname_permutations.gsub('{first_name}', first_name)
.gsub('{last_name}', last_name)
.gsub('{middle_name}', middle_name)
.gsub('{first_initial}', first_initial)
.gsub('{middle_initial}', middle_initial)
.gsub('{last_initial}', last_initial)
.split($/)Context
StackExchange Code Review Q#43373, answer score: 3
Revisions (0)
No revisions yet.