A Solution Coded in Rexx
Most modern scripting languages support associative arrays, including Perl, Python, and Tcl/Tk. Les used Rexx for his solution. Rexx brings together readability and power--two characteristics few languages combine. It enjoys an ANSI standard and comes in procedural, object-oriented, and Java-compatible forms.
Object-oriented Rexx is a true super-set of classic procedural Rexx. It runs procedural Rexx programs without alteration. Open Object Rexx has garnered significant interest since its open-sourcing last year by IBM and subsequent hand-over to the Rexx Language Association.
Rexx is internationally popular and runs under virtually all operating systems. Open Object Rexx runs on Windows, Linux, and Unix. Classic procedural Rexx is the predominate scripting language on mainframes (z/OS, z/VM, and z/VSE), the IBM iSeries (i5/OS and AS/400), OS/2 (including eCS and osFree), AmigaOS (including AROS and MorphOS), and IBM PC-DOS (versions 2000 and 7). Java-compatible Rexx runs with any Java Virtual Machine (JVM).
A Solution
Here is Les's solution to the problem, coded in Rexx using associative arrays. I'll walk through the code, line by line, in the discussion that follows.
/* Create an associative array reflecting */ /* the values in the first list of names */ flag. = 0 /* Create array, initialize elements to 0 */ do a = 1 to list_a.0 /* Process all the names in LIST_A array */ aa = strip(list_a.a) /* Strip out any preceding/trailing blanks */ flag.aa = 1 /* Mark the name with a */ end /* Try to match names in the second list */ /* against those in the associative array */ m = 0 /* M counts the number of missing names */ do b = 1 to list_b.0 /* Look for matching name from LIST_B */ bb = strip(list_b.b) /* Put LIST_B name into variable BB */ if \ flag.bb then do /* If the name doesnt exist in FLAG array */ m = m+1 /* add 1 to the count of missing names */ missing.m = bb /* add missing name to MISSING array */ end end missing.0 = m /* Save the count of unmatched names */