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.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.