Skip to content

Instantly share code, notes, and snippets.

@hiratara
Last active August 29, 2015 13:55
Show Gist options
  • Save hiratara/8749844 to your computer and use it in GitHub Desktop.
Save hiratara/8749844 to your computer and use it in GitHub Desktop.
package Regi;
use strict;
use warnings;
use Exporter qw(import);
our @EXPORT = qw(solve);
sub search_regi (@) { (sort { $a->length <=> $b->length } @_)[0] }
sub solve ($) {
local $_ = shift;
my @regis = map { RegiItem->new($_) } 2, 7, 3, 5, 2;
while ($_) {
if (s/^\.//) { $_->flush for @regis }
elsif (s/^.// ) { my $m = "append_$&"; (search_regi @regis)->$m }
};
join ',', map { $_->length } @regis;
}
package RegiItem;
use strict;
use warnings;
use List::Util qw(max);
sub new { bless [$_[1], 0, 0] => $_[0] }
sub flush {
my $self = shift;
$self->[1] = max($self->[1] - $self->[0], 0);
}
for my $n (1 .. 9) {
no strict 'refs';
*{"append_$n"} = sub { ($_[0][2] ? $_[0][2] : $_[0][1]) += $n };
}
sub append_x { $_[0][2]++ }
sub length { $_[0][1] + $_[0][2] }
1;
use strict;
use warnings;
use Regi;
use Test::More;
while (<DATA>) {
tr/\r\n//d;
my ($n, $i, $o) = split /\t/, $_, 3;
is solve($i), $o, "# $n";
}
done_testing;
__END__
0 42873x.3. 0,4,2,0,0
1 1 1,0,0,0,0
2 . 0,0,0,0,0
3 x 1,0,0,0,0
4 31. 1,0,0,0,0
5 3x. 1,1,0,0,0
6 99569x 9,9,6,6,9
7 99569x33 9,9,9,9,9
8 99569x33. 7,2,6,4,7
9 99569x33.. 5,0,4,0,5
10 12345x3333. 4,0,3,2,3
11 54321x3333. 3,0,3,0,4
12 51423x3333. 3,4,4,0,4
13 12x34x. 1,0,1,0,2
14 987x654x.32 7,6,4,10,5
15 99999999999x99999999.......9. 20,10,12,5,20
16 997 9,9,7,0,0
17 .3.9 1,9,0,0,0
18 832.6 6,6,0,0,0
19 .5.568 3,5,6,8,0
20 475..48 4,8,0,0,0
21 7.2..469 1,4,6,9,0
22 574x315.3 3,3,1,7,1
23 5.2893.x98 10,9,5,4,1
24 279.6xxx..4 2,1,4,1,1
25 1.1.39..93.x 7,1,0,0,0
26 7677749325927 16,12,17,18,12
27 x6235.87.56.9. 7,2,0,0,0
28 4.1168.6.197.6. 0,0,3,0,0
29 2.8.547.25..19.6 6,2,0,0,0
30 .5.3x82x32.1829.. 5,0,5,0,7
31 x.1816..36.24.429. 1,0,0,0,7
32 79.2.6.81x..26x31.1 1,0,2,1,1
33 574296x6538984..5974 14,13,10,15,14
34 99.6244.4376636..72.6 5,6,0,0,3
35 1659.486x5637168278123 17,16,16,18,17
36 .5.17797.x626x5x9457.3. 14,0,3,5,8
37 ..58624.85623..4.7..23.x 1,1,0,0,0
38 716.463.9.x.8..4.15.738x4 7,3,5,8,1
39 22xx.191.96469472.7232377. 10,11,18,12,9
40 24..4...343......4.41.6...2 2,0,0,0,0
41 32732.474x153.866..4x29.2573 7,5,7,8,5
42 786.1267x9937.17.15448.1x33.4 4,4,8,4,10
43 671714849.149.686852.178.895x3 13,16,13,10,12
44 86x.47.517..29621.61x937..xx935 7,11,8,8,10
45 .2233.78x.94.x59511.5.86x3.x714. 4,6,10,8,8
46 .793...218.687x415x13.1...x58576x 8,11,8,6,9
47 6.6x37.3x51x932.72x4x33.9363.x7761 15,13,15,12,15
48 6..4.x187..681.2x.2.713276.669x.252 6,7,8,6,5
49 .6.xx64..5146x897231.x.21265392x9775 19,17,19,20,17
50 334.85413.263314.x.6293921x3.6357647x 14,14,12,16,10
51 4.1..9..513.266..5999769852.2.38x79.x7 12,10,13,6,10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment