aboutsummaryrefslogtreecommitdiff
path: root/challenge-097/jan-perl/perl/ch-2.pl
blob: 537c4d4ed6d4f21b6a8d43676cb0c59c2a9ecf77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/perl

use warnings;


sub nflip2(\@\@) {
  local (*p0arr,*saarr) = @_;
     my $nftot=0;
     for my $l (0.. $#p0arr) {
         $nftot += ($p0arr[$l] != $saarr[$l]);
     }
  return $nftot;
}

sub nflip($\@) {
  local ($p0,*sa) = @_;
  my @p0arr = split("",$p0);
  my $nftot=0;
  for my $t (@sa){
     my @saarr = split("",$t);
     $nftot += nflip2(@p0arr,@saarr);
  }
  return $nftot;
}

sub doit($$) {
  my ($B,$S) = @_;
  print "\n$B,$S\n";
  my @sa=unpack("(a$S)*",$B);
  my @ba=map {nflip( $_,@sa)} @sa;
  my $low=$S * @ba;
  my $lidx=0;
  for my $t (0 .. $#ba) {
    if ($low> $ba[$t]){
        $low= $ba[$t];
        $lidx=$t;
    }
  }
  print "Output: $ba[$lidx]\n";
  print "Reference: $lidx: $sa[$lidx]\n";
  print "Binary Substrings:\n";
  my @p0arr = split("",$sa[$lidx]);
  for my $t (@sa) {
     my @saarr = split("",$t);
     my $nftot = nflip2(@p0arr,@saarr);
     print "\"$t\": $nftot flips";
     print " tot make it \"$sa[$lidx]\"" if ($nftot);
     print "\n";
  }  
}


$B = "101100101"; $S = 3;
doit($B,$S);
$B = "10110111"; $S = 4;
doit($B,$S);