user
A Barnsley fern is a fractal named after British mathematician Michael Barnsley and can be created using an iterated function system (IFS).

Task

Create this fractal fern, using the following transformations:

* ƒ1   (chosen 1% of the time)

```
        xn + 1 = 0
        yn + 1 = 0.16 yn

```

* ƒ2   (chosen 85% of the time)

```
        xn + 1 = 0.85 xn + 0.04 yn
        yn + 1 = −0.04 xn + 0.85 yn + 1.6

```

* ƒ3   (chosen 7% of the time)

```
        xn + 1 = 0.2 xn − 0.26 yn
        yn + 1 = 0.23 xn + 0.22 yn + 1.6

```

* ƒ4   (chosen 7% of the time)

```
        xn + 1 = −0.15 xn + 0.28 yn
        yn + 1 = 0.26 xn + 0.24 yn + 0.44.

```

Starting position: x = 0, y = 0
assistant
(formerly Perl 6)

**Works with**: Rakudo version 2016.03

**Translation of**: Perl

```
use Image::PNG::Portable;

my ($w, $h) = (640, 640);

my $png = Image::PNG::Portable.new: :width($w), :height($h);

my ($x, $y) = (0, 0);

for ^2e5 {
    my $r = 100.rand;
    ($x, $y) = do given $r {
        when  $r <=  1 { (                     0,              0.16 * $y       ) }
        when  $r <=  8 { ( 0.20 * $x - 0.26 * $y,  0.23 * $x + 0.22 * $y + 1.60) }
        when  $r <= 15 { (-0.15 * $x + 0.28 * $y,  0.26 * $x + 0.24 * $y + 0.44) }
        default        { ( 0.85 * $x + 0.04 * $y, -0.04 * $x + 0.85 * $y + 1.60) }
    };
    $png.set(($w / 2 + $x * 60).Int, ($h - $y * 60).Int, 0, 255, 0);
}

$png.write: 'Barnsley-fern-perl6.png';

```