/
irregular-shape.p6
61 lines (52 loc) · 1.72 KB
/
irregular-shape.p6
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env perl6
use v6;
use Terminal::Table;
my $g = create-generator([
< A B C D E F >,
< G H I J K L >,
< M N O P Q R >,
< S T U V W X >,
]);
$g.generate;
my &hide = -> $x, $y {
my ($r, $c) = ($g.row-count() * 2, $g.col-count($x) * 2);
my ($rx, $ry) = ($x * 2, $y * 2);
my $top = $rx == 0 || $g.is-hidden($rx - 1, $ry + 1);
my $top-left = ($rx == 0 || $ry == 0) || $g.is-hidden($rx - 1, $ry - 1);
my $top-right = ($rx == 0 || $ry + 2 == $c) || $g.is-hidden($rx - 1, $ry + 3);
my $bottom = ($rx + 2 == $r) || $g.is-hidden($rx + 3, $ry + 1);
my $bottom-left = ($rx + 2 == $r || $ry == 0) || $g.is-hidden($rx + 3, $ry - 1);
my $bottom-right = ($rx + 2 == $r || $ry + 2 == $c) || $g.is-hidden($rx + 3, $ry + 3);
my $left = $ry == 0 || $g.is-hidden($rx + 1, $ry - 1);
my $right = ($ry + 2 == $c) || $g.is-hidden($rx + 1, $ry + 3);
if $top && $top-left && $left {
$g.hide($rx, $ry, :replace-with-space);
}
if $top {
$g.hide($rx, $ry + 1, :replace-with-space);
}
if $top && $top-right && $right {
$g.hide($rx, $ry + 2, :replace-with-space);
}
if $left {
$g.hide($rx + 1, $ry, :replace-with-space);
}
if $right {
$g.hide($rx + 1, $ry + 2, :replace-with-space);
}
if $left && $bottom-left && $bottom {
$g.hide($rx + 2, $ry, :replace-with-space);
}
if $bottom {
$g.hide($rx + 2, $ry + 1, :replace-with-space);
}
if $right && $bottom-right && $bottom {
$g.hide($rx + 2, $ry + 2, :replace-with-space);
}
$g.hide($rx + 1, $ry + 1, :replace-with-space);
};
for 1 .. 15 {
my ($x, $y) = ((rand * 100).floor % 4, (rand * 100).floor % 6);
&hide($x, $y);
}
$g.print;