אני מתכנת לפרנסתי, אבל אף פעם לא קיבלתי השכלה פורמלית באלגוריתמים רציניים.

הנה בעיה פשוטה: נתון מערך באורך n ומלא באפסים. כל איבר במערך הוא ספרה בינרית. צריך להשתמש במערך הזה ולא בשיטה החשבונית המקובלת להמרת בסיסים ולהדפיס את כל המספרים הבינריים מאפס עד המספר הבינרי הארוך ביותר שמספר ספרותיו n. למשל, אם n == 3, זה מה שיודפס:

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

זה מה שכתבתי. זה בסדר או בושה?

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";
}

הערה – והיא הבושה האמתית, אבל אני לא יודע של מי: תצוגת קוד המקור בוורדפרס לא יודעת להציג Perl כמו שצריך. אבל אם אומרים ruby במקום perl אז זה עובד די טוב…