in reply to secret code generator
He is just creating all combinations of letters, numbers and puncuation. The obvious, but wrong, solution is to use string increment. That is wrong because you don't, for instance, get punctuation characters. Here is a silly solution in Perl.
A less silly solution (ie one that doesn't push all of the work under the covers) takes just a bit more effort.use Math::Fleximal; my $flex = ["a".."z", "A".."Z", 0..9, split //, qq(!"#$%&'()*+,-./:;<=>?@[\\]^_ +`{|}~)]; my $x = Math::Fleximal->new("a", $flex); my $one = Math::Fleximal->new("b", $flex); while (1) { print $x->to_str; print "\n"; $x = $x->add($one); }
(Astute people may notice that I borrowed from Re (tilly) 1 (perl): What Happened...(perils of porting from c).)#! /usr/bin/perl -w use strict; my @chars = ("a".."z", "A".."Z", 0..9 , split //, qq(!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~)); my $x = 0; while (++$x) { nested_for( sub {print join "", @_, "\n";} , map \@chars, 1..$x ); } sub nested_for { ret_iter(@_)->(); } sub ret_iter { my $fn = shift; my $range = shift; my $sub = sub {$fn->($_, @_) for @$range}; return @_ ? ret_iter($sub, @_) : $sub; }
Update: As johngg noted, I did not get \ in the punctuation set. Fixed.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: secret code generator
by johngg (Canon) on Dec 19, 2006 at 10:22 UTC | |
by BrowserUk (Patriarch) on Dec 19, 2006 at 10:25 UTC | |
by johngg (Canon) on Dec 19, 2006 at 11:16 UTC | |
by Hofmator (Curate) on Dec 19, 2006 at 10:28 UTC | |
by johngg (Canon) on Dec 19, 2006 at 11:32 UTC | |
Re^2: secret code generator
by xiaoyafeng (Deacon) on Dec 20, 2006 at 02:41 UTC |
In Section
Seekers of Perl Wisdom