http://www.perlmonks.org?node_id=294422


in reply to Friday Golf: All 2-digit combinations

The string posted doesn't meat the needs. Here's what I've got (84 chars):
sub checker { my ($str) = @_; for ('00' .. '99') { my $n = 0; $n++ while $str =~ /$_/g; die "'$_' appears $n times\n" if $n != 1; } } sub generate { 0 1 2 3 4 5 6 + 7 8 #012345678901234567890123456789012345678901234567890123456789012345678 +90123456789012345 for$x(0..9){for$y(0..9){/$x$y/||(/^$y/and$_="$x$_")||(/$x$/and$_.=$y) +or$_.="$x$y"}}$_ } print "Generating ...\n"; my $test = generate(); print "$test\n"; print "Checking ...\n"; checker($test); print "Ok\n"; ---- Generating ... 9900102030405060708091121314151617181922324252627282933435363738394454 +6474849556575859667686977879889 Checking ... Ok

I know it can be improved ...

Update: 78 chars and counting ...

#0 1 2 3 4 5 6 + 7 8 #012345678901234567890123456789012345678901234567890123456789012345678 +901234567890 for$x(0..9){for$y(0..9){/$x$y/||(/^$y/?$_=$x.$_:(/$x$/?$_.=$y:($_.=$x +.$y)))}}$_

Update: 72 chars and counting ...

#0 1 2 3 4 5 6 + 7 #012345678901234567890123456789012345678901234567890123456789012345678 +9012345 for$x(0..9){for$y(0..9){/$x$y/||($_=/^$y/?$x.$_:/$x$/?$_.$y:$_.$x.$y) +}}$_ for$x(0..9){for$y(0..9){$_=/$x$y/?$_:/^$y/?$x.$_:/$x$/?$_.$y:$_.$x.$y +}}$_

------
We are the carpenters and bricklayers of the Information Age.

The idea is a little like C++ templates, except not quite so brain-meltingly complicated. -- TheDamian, Exegesis 6

Please remember that I'm crufty and crochety. All opinions are purely mine and all code is untested, unless otherwise specified.

Replies are listed 'Best First'.
Re^2: Friday Golf: All 2-digit combinations
by PhilHibbs (Hermit) on Sep 26, 2003 at 14:28 UTC
    Yes, I believe that your solution is correct. BrowserUK beat you by one minute and a bunch of characters, but you included a checker, and spotted my mistake (which I won't pretend was deliberate). Well done.

    I'm not sure I agree with your character count, as the code doesn't print anything. Replacing $_ with print at the end adds three characters. However, you do qualify for a 2-stroke bonus under the revised rules for not using any 2-digit combinations in your code.