#!/usr/bin/perl -w use strict; use Data::Dumper; use Carp; # If possible we prefer not to use any CPAN module # or regex. It's for my understanding my $seed = $ARGV[0] || "000"; # Seed can be longer than 3 digits but always 0,1,2,3 for (my $i = 0; $i < length($seed); $i++) { # First loop is to generate 1 position differ for (my $bs=0; $bs<=3; $bs++) { my $bval = $bs; if ( substr($seed,$i,1) == $bs) { #$bval = 0; next; } my $ns = $seed; substr($ns,$i,1,$bval); print "$ns"; # Second loop for tags in 2 positions differ for (my $j=($i+1); $j < length($seed); $j++) { for (my $cs = 0; $cs<=3;$cs++) { my $cval = $cs; if (substr($ns,$j,1) == $cs) { #$cval = $cs; next; } my $ns2 = $ns; substr($ns2,$j,1,$cval); print "\t$ns2"; } } print "\n"; } } #### #!/usr/bin/perl use strict; use warnings; # "use warnings" tends to be preferred over "-w" # Seed can be longer than 3 digits but always 0,1,2,3 my $seed = $ARGV[0] || "000"; if ($seed =~ /[^0-3]/) { # "If $seed contains anything other than 0,1,2,3" die "Invalid seed. Seed may only contain digits from 0 through 3.\n"; } # First loop is to generate 1 position differ for my $i (0..length($seed) - 1) { for my $first_diff (0..3) { next if (substr($seed, $i, 1) == $first_diff); my $outer_variant = $seed; substr($outer_variant, $i, 1) = $first_diff; print "$outer_variant"; # Second loop for tags in 2 positions differ for my $j ($i+1..length($seed) - 1) { for my $second_diff (0..3) { next if (substr($outer_variant, $j, 1) == $second_diff); my $inner_variant = $outer_variant; substr($inner_variant, $j, 1) = $second_diff; print "\t$inner_variant"; } } print "\n"; } } #### #!/usr/bin/perl use strict; use warnings; # Seed can be longer than 3 digits but always 0,1,2,3 my $seed = $ARGV[0] || "000"; if ($seed =~ /[^0-3]/) { die "Invalid seed. Seed may only contain digits from 0 through 3.\n"; } my $max_differences = 2; frobnicate($seed); sub frobnicate { my ($prefix, $suffix, $difference_count) = @_; unless (defined $suffix) { $suffix = $prefix; $prefix = ''; } $difference_count++; while (length $suffix) { my $initial = substr($suffix, 0, 1); substr($suffix, 0, 1) = ''; for my $substitute (0..3) { next if $substitute == $initial; print "\t" unless $difference_count == 1; print $prefix, $substitute, $suffix; if ($difference_count < $max_differences && length $suffix) { frobnicate($prefix . $substitute, $suffix, $difference_count); } print "\n" if $difference_count == 1; } $prefix .= $initial; } }