9 return (($in & 1) << 9)
25 my ($id, @rows) = split /\n/;
28 @rows = map { y/#./10/; oct "0b$_" } @rows;
33 | (($rows[1] & 1) << 8)
34 | (($rows[2] & 1) << 7)
35 | (($rows[3] & 1) << 6)
36 | (($rows[4] & 1) << 5)
37 | (($rows[5] & 1) << 4)
38 | (($rows[6] & 1) << 3)
39 | (($rows[7] & 1) << 2)
40 | (($rows[8] & 1) << 1)
41 | (($rows[9] & 1) << 0),
43 (($rows[0] & 512) >> 0)
44 | (($rows[1] & 512) >> 1)
45 | (($rows[2] & 512) >> 2)
46 | (($rows[3] & 512) >> 3)
47 | (($rows[4] & 512) >> 4)
48 | (($rows[5] & 512) >> 5)
49 | (($rows[6] & 512) >> 6)
50 | (($rows[7] & 512) >> 7)
51 | (($rows[8] & 512) >> 8)
52 | (($rows[9] & 512) >> 9),
54 print "Tile <$id> sides ", join(',', @{ $sides{$id} }), "\n";
55 for my $side (@{ $sides{$id} }) {
56 push @{ $side2tiles{$side} }, $id;
57 push @{ $side2tiles{invbits($side)} }, $id;
62 for my $side (keys %side2tiles) {
63 print "side $side: ", join(',', @{ $side2tiles{$side} }), "\n";
64 # print "inv ", invbits($side), "\n";
65 if (scalar @{ $side2tiles{$side} } == 1
66 && scalar @{ $side2tiles{invbits($side)} } == 1) {
67 print "side $side of tile $side2tiles{$side}->[0] is single\n";
68 $single_ids{$side2tiles{$side}->[0]}++;
73 my @corners = grep { $single_ids{$_} == 4 } keys %single_ids;
74 print join('*', @corners), '=', eval join('*', @corners), "\n"