9 return join('', reverse split //, $in);
17 my ($id, @rows) = split /\n/;
23 join('', map { substr($_, -1, 1) } @rows),
25 rev(join('', map { substr($_, 0, 1) } @rows)),
27 print "Tile <$id> sides ", join(' ', @{ $sides{$id} }), "\n";
29 for my $side (@{ $sides{$id} }) {
30 $side2tiles{$side}->{$id} = $i;
31 $side2tiles{rev($side)}->{$id} = $i+4;
37 my $next = '###.#.#...';
40 # my $next = '#...##.#..';
45 for my $y (0 .. $dim-1) {
46 my ($id) = grep { $_ != $next_id } keys %{ $side2tiles{$next} };
47 my $side = $side2tiles{$next}->{$id};
48 $map->[$y][0] = [ $id, $side ];
49 die "$id seen again\n"
52 my $next_side = $side > 3
55 $next = $sides{$id}->[$next_side];
56 $next = rev($next) if $side > 3;
58 print "id=$id, side=$side, next_side=$next_side, top_side=$top_side, next=|$next|\n";
61 for my $x (1 .. $dim-1) {
62 ($id) = grep { $_ != $next_id } keys %{ $side2tiles{$next} };
63 $side = $side2tiles{$next}->{$id};
64 die "$id seen again\n"
67 my $top_side = ((($side & 3) + (($side >> 2) ? 1 : -1)) & 3) | (($side & 4) ^ 4);
68 $map->[$y][$x] = [ $id, $top_side ];
69 $next_side = (($side + 2) & 3);
70 $next = $sides{$id}->[$next_side];
71 $next = rev($next) if $side < 4;
73 print "id=$id, side=$side, next_side=$next_side, top_side=$top_side, next=|$next|\n";
78 ($next_id, $next_side) = @{ $map->[$y][0] };
79 $next = $sides{$next_id}->[($next_side + 2) & 3];
80 $next = rev($next) if $next_side < 4;
81 print "bottom side of $next_id = |$next|\n";
85 for my $y (0 .. 8*$dim-1) {
86 my $y1 = 1 + ($y % 8);
87 for my $x (0 .. 8*$dim-1) {
88 my $x1 = 1 + ($x % 8);
89 my ($id, $or) = @{ $map->[int($y/8)][int($x/8)] };
90 my ($x2, $y2) = ($x1, $y1);
92 ($x2, $y2) = (9-$y1, $x1);
94 ($x2, $y2) = (9-$x1, 9-$y1);
96 ($x2, $y2) = ($y1, 9-$x1);
98 ($x2, $y2) = (9-$x1, $y1);
100 ($x2, $y2) = (9-$y1, 9-$x1);
102 ($x2, $y2) = ($x1, 9-$y1);
104 ($x2, $y2) = ($y1, $x1);
106 $shortmap .= substr($tiles{$id}->[$y2], $x2, 1);
111 print join("\n", $shortmap), "\n";
113 my $monster = join('[\.#\n]' x ($dim * 8 - 20 + 1), map { $a=$_; $a=~ s/\./[\.#]/g; $a }
114 '..................#.',
115 '#....##....##....###',
116 '.#..#..#..#..#..#...'
119 $monster = ".(?=$monster)";
120 print "monster=$monster\n";
125 if (my $count =()= $shortmap =~ /($monster)/g) {
126 print "$count matches\n";
127 my $hashes =()= $shortmap =~ /#/g;
128 print "$hashes-$count*15=", $hashes-$count*15, "\n";
132 for my $y (0 .. 8*$dim-1) {
133 for my $x (0 .. 8*$dim-1) {
135 $newmap .= substr($shortmap,
136 $y + (8*$dim+1)*(8*$dim-$x-1), 1);
140 print "\nRotate:\n$newmap\n";
144 for my $y (0 .. 8*$dim-1) {
145 for my $x (0 .. 8*$dim-1) {
146 $newmap .= substr($shortmap,
147 $x + (8*$dim+1)*(8*$dim-$y-1), 1);
152 print "\nFlip:\n$newmap\n";