user
Given the `n + 1` vertices `x[0], y[0] .. x[N], y[N]` of a simple polygon described in a clockwise direction, then the polygon's area can be calculated by:

```
abs( (sum(x[0]*y[1] + ... x[n-1]*y[n]) + x[N]*y[0]) -
     (sum(x[1]*y[0] + ... x[n]*y[n-1]) + x[0]*y[N])
   ) / 2
```

(Where `abs` returns the absolute value)

Task

Write a function/method/routine to use the the Shoelace formula to calculate the area of the polygon described by the ordered points:

```
     (3,4), (5,11), (12,8), (9,5), and (5,6) 

```

Show the answer here, on this page.
assistant
(formerly Perl 6)

### Index and mod offset

**Works with**: Rakudo version 2017.07

```
sub area-by-shoelace(@p) {
    (^@p).map({@p[$_;0] * @p[($_+1)%@p;1] - @p[$_;1] * @p[($_+1)%@p;0]}).sum.abs / 2
}

say area-by-shoelace( [ (3,4), (5,11), (12,8), (9,5), (5,6) ] );

```

Output:

```
30
```

### Slice and rotation

**Works with**: Rakudo version 2017.07

```
sub area-by-shoelace ( @p ) {
    my @x := @p».[0];
    my @y := @p».[1];

    my $s := ( @x Z* @y.rotate( 1) ).sum
           - ( @x Z* @y.rotate(-1) ).sum;

    return $s.abs / 2;
}

say area-by-shoelace( [ (3,4), (5,11), (12,8), (9,5), (5,6) ] );

```

Output:

```
30
```