I program for living, but i’ve never received proper formal education in serious algorithms.
Here’s a very simple problem: Take an array of length n and fill it with zeros. Every array member represents a binary digit. Now, using this array and not using the usual math for binary conversion, print all binary digits from zero to the maximum binary number with n digits. For example, with n == 3 this should be printed:
0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1
Here’s what i wrote. Is it OK or is it an embarrassment?
use strict;
use warnings;
# That's right, upgrade to Perl 5.10.
# If you can't, comment out this line.
use 5.010;
my $digits = $ARGV[0] // 3;
# /If you don't have Perl 5.10, use this:
# my $digits = defined $ARGV[0] ? $ARGV[0] : 3;
my @matrix = ();
my @number = map { 0 } (1 .. $digits);
my $last = 0;
NUMBER:
while (not $last) {
push @matrix, [ @number ];
my $digit_index = $digits;
DIGIT:
while ($digit_index) {
$digit_index--;
$last = 1;
if ($number[$digit_index]) {
$number[$digit_index] = 0;
}
else {
$last = 0;
$number[$digit_index] = 1;
next NUMBER;
}
}
}
foreach my $number (@matrix) {
print "@{$number}\n";
}
Oh (edit): The real embarrassment – in WordPress the sourcecode presentation cannot display Perl properly. But if i put ‘ruby’ instead of ‘perl’ in the language attribute, it works mostly fine …
0 Responses to “Binary”