Treppenknecht v0.1
Code:
#!/usr/bin/env perl
use warnings;
use strict;
our $STEPMAXIMUM = 2;
my $stufenCount;
if (@ARGV) {$stufenCount = $ARGV[0]}
else {chomp($stufenCount = <>)}
sub treppenKnecht {
my ($cur, $sol, $pos, $max) = @_;
if ($pos == $max) {push(@$sol, join('', @$cur)); return 1}
if ($pos > $max) {return 0}
for my $step (1..$STEPMAXIMUM) {
if (treppenKnecht([@$cur, $step], $sol, $pos+$step, $max)) {return 0}
}
}
my @solutions;
treppenKnecht([], \@solutions, 0, $stufenCount);
foreach (@solutions) {print "$_\n"}
Nimmt die Stufenanzahl entweder als erstes Argument oder von STDIN. Außerdem kann man einfach das "Schrittweitenmaximum" ändern beziehungsweise auch einfach irgendeine willkürliche Liste mit Schrittmöglichkeiten eintragen.
Die Anzahl der Möglichkeiten hätte ich extra mit angeben können, aber ich habe lieber eine Möglichkeit pro Zeile und pipe das dann in wc. Wäre ja auch kein Problem das eben mit ins Skript zu nehmen, but i prefer not to.
Code:
./treppenknecht.pl 23|wc -l
46368