The Ballot File Format aims to concisely represent ranked ballots and ranked election results.

## Contributing

The format is a working draft. You can suggest improvements and hold discussions here. If you are comfortable with GitHub, you are welcome to submit pull requests to the source file for this web page.

## BFF Examples

```
A > B > C
A > B = C
A = C > B
A = B = C
```

## Basics

We want to represent a ranking of options. An option could be almost anything, for example: `apple`

, or `banana`

. Options are ranked via the `>`

and `=`

symbols. For example, if `apple`

is preferred over `banana`

, that would be `apple > banana`

in BFF. If `apple`

and `banana`

are tied, that would be `apple = banana`

. To rank more options, add more options separated by comparisons. For example, if `apple`

is in 1st place, `banana`

and `cherry`

are tied for 2nd place, and `date`

is in 3rd place, that would be `apple > banana = cherry > date`

. This format can be used to encode both ranked ballots and ranked election results.

## Restrictions

To keep things simple, options can only be compared via a single `>`

or `=`

character. The `<`

character is forbidden everywhere. It is invalid to combine the comparison characters (`>=`

). It is invalid to combine multiple comparison characters (`>>`

, `==`

). All of the following are invalid.

```
A < B
A >= B
A >> B
A == B
```

The character `*`

is forbidden, except in specific situations detailed in Multipliers.

## Whitespace

If there is horizontal whitespace (spaces, tabs) between a comparison and an option, it is ignored. All of the following are valid and equivalent.

```
A>B
A >B
A> B
A > B
```

Spaces within options are valid and significant. All of the following are valid and distinct.

```
Apple Pie > Banana Cream Pie
ApplePie > BananaCreamPie
ApplePie > Banana CreamPie
```

## Ballot-Specific Rules

### One Ballot Per Line

Each ballot should be represented on its own line.

### Multipliers

For ballots only (not election results), a ballot can be replicated by prefixing it with a multiplier. A multiplier consists of an integer and the `*`

character. This permits something repetitive like this…

```
A > B > C
A > B > C
A > B > C
```

…to be represented more concisely as…

```
3 * A > B > C
```

There is no obligation to use multipliers. It is valid to use a mix of multipliers and non-multipliers. All of the following examples are valid and equivalent.

```
A > B > C
A > B > C
A > B > C
C > A > B
```

```
A > B > C
1 * A > B > C
A > B > C
C > A > B
```

```
2 * A > B > C
A > B > C
C > A > B
```

```
C > A > B
3 * A > B > C
```

Horizontal whitespace between the integer and the `*`

is permitted and insignificant. Horizontal whitespace between the `*`

and the rest of the ballot is permitted and insignificant. All of the following examples are valid and equivalent.

```
3*A > B > C
3 *A > B > C
3* A > B > C
3 * A > B > C
```

## Result-Specific Rules

Since there is only one result for an election, multipliers (`*`

characters) are forbidden in results.