Keith Calvert Ivey wrote: > > 50: > perl -lpe'INIT{$c=pop}$n+=keys%{{/([^$c])()/g}}}{$_=$n' as <test Keith flushed me out -- I was relying on keys%{{..}} for my entry -- and so there's no point in waiting any longer: perl -le'$g=pop;$c+=keys%{{m!(([^$g$/]))!g}}for<>;print$c' as <test A couple of points: 1. It works correctly in fringe cases (e.g., when guess list is "") 2. It works on all platforms (supports Unix, Mac, and DOS line endings) Converting for Abigal's trick, I can shave off a couple of extra characters because -l now auto-chomps for me, and so I can convert m!(([^$g$/]))!g into /(([^$g ]))/g): perl -lpe'INIT{$g=pop}$c+=keys%{{/(([^ $g]))/g}}}{$_=$c' as <test So, my best is one stroke more than Keith's, but the extra stroke lets me handle the no-guess case as well: perl -lpe'INIT{$g=pop}$c+=keys%{{/(([^ $g]))/g}}}{$_=$c' "" <test 18 BTW, here's a quick script I use to test the entries I've received: #!/bin/sh # test-cscore -- test a perl cheating-hangman score golf entry for W in '' s a as; do "$@" $W <<EOF angles stones EOF "$@" $W <<EOF angles fluffs stones EOF "$@" $W <<EOF makers primal vulcan EOF egrep '^[a-z]+$' /usr/dict/words | "$@" $W done I use it like so: ./test-cscore perl -lpe'INIT{$g=pop}$c+=keys%{{/(([^ $g]))/g}}}{$_=$c' (without the guess or input redirection from testfile on the command line). The expected output for a correct implementation should be as follows: 11 15 18 258955 9 12 17 238985 10 14 15 239607 8 11 14 219637 It's okay if the large numbers are off -- they are dependent on your system's /usr/dict/words file -- but the small ones should match those listed above. Cheers, Tom ==== Want to unsubscribe from Fun With Perl? Well, if you insist... ==== Send email to <fwp-request@technofile.org> with message _body_ ==== unsubscribe