# score

A calculus for scoreboard optimization.

## Optimizations

### `set` fusion

```scoreboard players set a _ 1
scoreboard players set a _ 2

scoreboard players add b _ 1
scoreboard players set b _ 2

scoreboard players remove c _ 1
scoreboard players set c _ 2

scoreboard players reset d _
scoreboard players set d _ 2```

```scoreboard players set a _ 2
scoreboard players set b _ 2
scoreboard players set c _ 2
scoreboard players set d _ 2```

### `add`/`remove` fusion

```scoreboard players add a _ 2
scoreboard players remove a _ 3
scoreboard players add a _ 2```
`scoreboard players add a _ 1`

### Strength reduction

```scoreboard players set _ _ 2
scoreboard players operation a _ *= _ _```
`scoreboard players operation a _ += a _`

### Batch operation

```scoreboard players set a_0 A 0
scoreboard players set a_1 A 0
scoreboard players set b_0 B 0
scoreboard players set b_1 B 0
observe a_0 A
observe a_1 A
observe b_0 B
observe b_1 B
scoreboard players set b_0 B 1
scoreboard players set b_1 B 1
scoreboard players set a_0 A 1```

```scoreboard players set a_0 A 0
scoreboard players set a_1 A 0
scoreboard players set b_0 B 0
scoreboard players set b_1 B 0
observe a_0 A
observe a_1 A
observe b_0 B
observe b_1 B
scoreboard players set * B 1
scoreboard players reset a_1 B```

### Algebraic simplification

```scoreboard players set a _ 1
scoreboard players operation a _ += b _
scoreboard players operation a _ -= b _```
`scoreboard players set a _ 1`

### Dataflow analysis

```scoreboard players set a _ 0
execute if score b _ matches 0 run function
execute unless score b _ matches 0 run scoreboard players operation a _ += b _
scoreboard players operation a _ += b _
scoreboard players set b _ 1
execute unless score b _ matches 0 run scoreboard players operation a _ += b _

scoreboard players set _ _ 2
scoreboard players operation a _ /= _ _
scoreboard players set _ _ 2
scoreboard players operation b _ %= _ _```

```scoreboard players set a _ 0
execute if score b _ matches 0 run function
scoreboard players add a _ 1

scoreboard players set _ _ 2
scoreboard players operation a _ /= _ _
scoreboard players operation b _ %= _ _```

View Github