```typescript
export function cutRoll(length: number, board: [number, number][]): Cut {
  if (!Number.isInteger(length) || length < 0) {
    throw new Error("Length must be a non-negative whole number.");
  }

  const pieces = [...board];
  let takings = 0;

  while (length > 0 && pieces.length > 0) {
    const bestPiece = pieces
      .filter(([metres, price]) => metres <= length)
      .sort((a, b) => {
        if (b[0] === a[0]) {
          return b[1] - a[1];
        }
        return b[0] - a[0];
      })
      .pop();

    if (!bestPiece) {
      break;
    }

    length -= bestPiece[0];
    takings += bestPiece[1];
    pieces.splice(pieces.indexOf(bestPiece), 1);
  }

  return { takings, pieces };
}

type Cut = {
  takings: number;
  pieces: [number, number][];
};
```