in reply to Vampire Numbers Revisited

Inspired by the short work week (for me at least), I decided to golf a solution. This is a combined inspiration from Limbic~Region's, inman's, and Roy Johnson's solutions, as well as some of my own trickery. It takes a parameter (length of vampire #). Ex: 4 would find all the 4 digit vampire numbers (and display their related factors). Excluding leading line spaces and endlines I got it down to 185 chars. Enjoy.
$z=$ARGV[0]/2; for$a(1..10**$z-1){ for($a..10**$z-1){ print$a*$_." $a $_\n"if((join('',sort split'',$a*$_) eq join(' +',sort split'',"$a$_"))&&(length($a*$_)==$z*2)&&($a%10!=0||$_%10!=0)) +; } }

Replies are listed 'Best First'.
Re^2: Vampire Numbers Revisited
by tilly (Archbishop) on Mar 25, 2005 at 04:08 UTC
    First of all you have a bug, you're excluding the possibility that the two factors both end in 0 for no apparent reason. If I elminate that and use standard golfing techniques (plus the mathematical fact that if $a or $_ is 10**$z then you can't possibly satisfy the fang condition) I get down to 126 by usual golf counting rules (less by yours, but the returns all matter!):
    $z=pop()/2;for$a(1..10**$z){sub a{join"",sort pop=~/./g}$,=$a*$_,a($a.$_)!=a$,or$z*2>length$,or print"$, $a $_ "for$a..10**$z}
    Note that $, is used rather than a more normal variable name because it lets me remove one space.

    I'll give better than even odds that someone else can cut out another character still. (Assuming that the right someone else tries...)

    Update: I realize now that you're looking for true vampire numbers and not vampire numbers. Golfing that I get 140 characters with:

    $z=pop()/2;for$a(1..10**$z){sub a{join"",sort pop=~/./g}$,=$a*$_,a($a.$_)!=a$,or$z*2>length$,or($a%10+$_%10)&&print" +$, $a $_ "for$a..10**$z}
    Update 2: I did a meaningless code rearrangement to make the longest line shorter.
      Nice++ In retrospect I should've mentioned the goal of true vampire numbers. I thought I was being thorough regarding the definition, but not mentioning that part of the spec was my bad.

      -jbWare