aboutsummaryrefslogtreecommitdiff
path: root/challenge-215/james-smith/perl/ch-2.pl
blob: 88eb2787e773d5a285b90b4fe46a1d7cffe03f73 (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
#!/usr/local/bin/perl

use strict;
use warnings;
use feature qw(say);
use Test::More;

my @TESTS = (
 [ [ 1, [1,0,0,0,1] ], 1 ],
 [ [ 2, [1,0,0,0,1] ], 0 ],
 [ [ 3, [1,0,0,0,0,0,0,0,1] ], 1 ],
 [ [ 3, [1,0,0,0,0,0,0,0] ], 1],
);

sub insert_zero {
  my($s,$c) = (0,shift);
  $_ ? ( $c-= $s>2 && int( ($s-1)/2 ), $s=0 ) : $s++ for @_,1;
  $c>0?0:1;
}

sub insert_zero_simultaneous {
  my($s,$c) = (0,shift);
  $_ ? ( $c-= $s>2 && $s-2, $s=0 ) : $s++ for @_,1;
  $c>0?0:1
}

sub insert_zero_shortcut {
   my($s,$c) = (0,shift);
   $_ ? ( $c-= $s>2 &&  int(($s-1)/2), $s=0, $c>0 || return 1 ) : $s++ for @_,1;
   0;
}

sub insert_zero_simultaneous_shortcut {
  my($s,$c) = (0,shift);
  $_ ? ( $c-= $s>2 && $s-2, $s=0, $c>0 || return 1 ) : $s++ for @_,1;
  0;
}

is( insert_zero( $_->[0][0], @{$_->[0][1]} ), $_->[1] ) for @TESTS;
is( insert_zero_simultaneous( $_->[0][0], @{$_->[0][1]} ), $_->[1] ) for @TESTS;
is( insert_zero_shortcut( $_->[0][0], @{$_->[0][1]} ), $_->[1] ) for @TESTS;
is( insert_zero_simultaneous_shortcut( $_->[0][0], @{$_->[0][1]} ), $_->[1] ) for @TESTS;

done_testing();