From d6966208224bb37ca532519a50849c686808582b Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 24 Oct 2012 23:18:13 -0500 Subject: forgot to commit these --- HAMM.pl | 8 ++++++++ PERM.pl | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 HAMM.pl create mode 100644 PERM.pl diff --git a/HAMM.pl b/HAMM.pl new file mode 100644 index 0000000..0debb4a --- /dev/null +++ b/HAMM.pl @@ -0,0 +1,8 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.016; + +chomp(my $line1 = <>); +chomp(my $line2 = <>); +say length(($line1 ^ $line2) =~ s/\x00//gr); diff --git a/PERM.pl b/PERM.pl new file mode 100644 index 0000000..b9d2d10 --- /dev/null +++ b/PERM.pl @@ -0,0 +1,36 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use 5.016; + +sub factorial { + my ($n) = @_; + return 1 if $n < 2; + return $n * factorial($n - 1); +} + +sub permutations { + my ($n) = @_; + my $string = join('', 1..$n); + return map { _permutation($string, $_) } 0..(factorial($n) - 1); +} + +sub _permutation { + my ($string, $index) = @_; + + return '' if $string eq ''; + + my $fact = factorial(length($string) - 1); + + my $current_index = int($index / $fact); + my $rest = $index % $fact; + + my $first_digit = substr($string, $current_index, 1); + substr($string, $current_index, 1, ''); + + return $first_digit . _permutation($string, $rest); +} + +my $n = <>; +say factorial($n); +say join(' ', split '') for permutations($n); -- cgit v1.2.3-54-g00ecf