Skip to content

Instantly share code, notes, and snippets.

@hiratara
Last active January 2, 2016 19:29
Show Gist options
  • Save hiratara/8350449 to your computer and use it in GitHub Desktop.
Save hiratara/8350449 to your computer and use it in GitHub Desktop.
use strict;
use warnings;
use Exporter qw(import);
our @EXPORTER = qw(solve);
sub lines ($) { 2 ** ($_[0] - 1) }
sub new_halls ($$) {
my ($b1, $b2) = @_;
lines $b1 * lines $b2;
}
sub L {
($_[6] * lines ($_[8] + 1), $_[0] + $_[1], $_[7] * lines ($_[8] + 1), $_[2] + $_[3],
2 ** $_[8], $_[4] + $_[5], $_[6], $_[7],
$_[8] + 1, $_[9]);
}
sub R {
($_[0] + $_[1], $_[6] * lines ($_[8] + 1), $_[2] + $_[3], $_[7] * lines ($_[8] + 1),
$_[4] + $_[5], 2 ** $_[8], $_[6], $_[7],
$_[8] + 1, $_[9]);
}
sub T {
($_[4] * lines ($_[9] + 1), $_[5] * lines ($_[9] + 1), $_[0] + $_[2], $_[1] + $_[3],
$_[4], $_[5], 2 ** $_[9], $_[6] + $_[7],
$_[8], $_[9] + 1);
}
sub B {
($_[0] + $_[2], $_[1] + $_[3], $_[4] * lines ($_[9] + 1), $_[5] * lines ($_[9] + 1),
$_[4], $_[5], $_[6] + $_[7], 2 ** $_[9],
$_[8], $_[9] + 1);
}
sub solve ($) {
my $input = shift;
my ($br, $cut) = split '-', $input, 2;
my @state = (0, 0, 0, 0,
0, 0, 0, 0,
0, 0);
for (split '', $br) {
no strict 'refs';
@state = &$_(@state);
}
if ($cut eq 'tl') {
return $state[0];
} elsif ($cut eq 'tr') {
return $state[1];
} elsif ($cut eq 'bl') {
return $state[2];
} elsif ($cut eq 'br') {
return $state[3];
}
die;
}
1;
use strict;
use warnings;
use Golden;
use Test::More;
while (<DATA>) {
tr/\r\n//d;
my ($n, $input, $output) = split /\t/, $_;
is solve($input), $output, "No. $n";
}
done_testing;
__END__
0 RRTRB-bl 6
1 R-tr 0
2 L-br 0
3 T-tl 0
4 B-tl 0
5 BL-br 0
6 LB-tl 0
7 RL-tl 0
8 BL-tl 0
9 TL-bl 0
10 RT-tr 1
11 TRB-tl 0
12 TRL-bl 0
13 TRB-br 2
14 LLB-bl 2
15 RTL-tr 1
16 LBB-tr 0
17 TLL-tl 2
18 RLRR-tr 0
19 BBTL-tl 4
20 TBBT-tr 0
21 LLBR-tl 0
22 LBRT-tl 2
23 RLBL-bl 4
24 BRRL-br 3
25 TBBTL-tl 8
26 TLBBT-br 0
27 LRBLL-br 7
28 TRRTT-br 6
29 BBBLB-br 0
30 RTTTR-tl 4
31 BBLLL-br 6
32 RRLLTR-tr 16
33 TTRBLB-br 8
34 LRBRBR-bl 14
35 RBBLRL-tl 8
36 RTRLTB-tl 12
37 LBLRTR-tl 14
38 RRLTRL-tl 16
39 TBLTRR-br 12
40 TTTRLTT-bl 30
41 TBBRTBL-tr 15
42 TRTRTLL-tr 28
43 TLLRTRB-tr 24
44 RLLBRLB-tr 15
45 LTLRRBT-tr 32
46 RBBRBLT-br 21
47 LLRLRLR-tr 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment