# # Thu Apr 22 10:22:30 2004/hakank@bonetmail.com # # Generate variations on "Henning Mankell" matching the regular expression # # [HM][ea](nk|n|nn)(ing|ell|all) # # For more on this, please see the following texts # # http://www.hakank.org/webblogg/archives/000650.html # http://www.hakank.org/webblogg/archives/000651.html # # The output of the program: # http://www.hakank.org/unicon/pattern_generation.icn # # Compare with the list at # http://itre.cis.upenn.edu/~myl/languagelog/archives/000795.html # # Via Blind Höna: http://kornet.nu/blindhona/arkiv/000848.html # # # procedure main() # # Create the site's list in a table (hash table, associative array) # tab := fill_table(); generated := table(); num_gen := 0; in_tab := 0; not_in_tab := 0; # generate all names write("Generated names:"); every x:= HM() do { write(x) # check if the name is not in the site's list if (tab[x] ~=== x) then { # writes(x, " not in tab\n"); not_in_tab +:= 1; } else { # writes(x, " in tab <--\n"); in_tab +:= 1; } generated[x] := x; num_gen +:= 1; } # # Write the statistics # write(); writes(num_gen, " generated names\n"); writes(not_in_tab, " names not in list\n"); writes(in_tab, " names in list\n"); # # Check if the site's list has any names not generated # not_in_gen := 0; writes("\nChecking the other way:\n"); every x:= key(tab) do { if generated[x] ~=== x then { writes(x, " not in generated\n"); not_in_gen +:= 1; } else { # writes(x, " in generated\n"); } } writes(not_in_gen, " names in the site's list was not in the generated list\n"); end # # Main generator. # # First and last name cannot begin with the same character ("H" or "M"). # procedure HM() suspend ("H" || _HM() || " " || "M" || _HM()) | ("M" || _HM() || " " || "H" || _HM()) end # # Aux generator # # Everything after first character in name. # procedure _HM() suspend (!"ea" || !["nk","n", "nn"] || !["ing","ell","all"]); end # # Create table for site's list # procedure fill_table() v := ["Hankall Manning", "Hanning Mankell", "Henking Mennall", "Hankall Menning", "Hanning Menkall", "Henking Mennell", "Hankell Manning", "Hanning Menkell", "Henning Mankall", "Hankell Menning", "Henkall Manning", "Henning Mankell", "Hanking Mannall", "Henkall Menning", "Henning Menkall", "Hanking Mannell", "Henkell Manning", "Henning Menkell", "Hanking Mennall", "Henkell Menning", "Mankall Hanning", "Hanking Mennell", "Henking Mannall", "Mankall Henning", "Hanning Mankall", "Henking Mannell", "Mankell Hanning", "Mankell Henning", "Manning Henkall", "Menking Hannell", "Manking Hannall", "Manning Henkell", "Menking Hennall", "Manking Hannell", "Menkall Hanning", "Menking Hennell", "Manking Hennall", "Menkall Henning", "Menning Hankall", "Manking Hennell", "Menkell Hanning", "Menning Hankell", "Manning Hankall", "Menkell Henning", "Menning Henkall", "Manning Hankell", "Menking Hannall", "Menning Henkell"] t := table(); every x := !v do { t[x] := x; } return t; end