# CountdownNumbers

This package solves numbers puzzles as seen on the television show *Countdown*.

## Installation

`julia> import Pkg; Pkg.add("CountdownNumbers")`

## Usage

`numbers([input_numbers...], target_number)`

## Examples

If an exact solution is possible, CountdownNumbers.jl will return the exact solution.

```
julia> using CountdownNumbers
julia> numbers([25, 50, 75, 100, 3, 6], 952)
CountdownNumbers.Operation: (((75 * (6 + 100)) * 3) - 50) / 25 = 952
julia> numbers([50, 75, 100, 25, 2, 1], 940)
CountdownNumbers.Operation: 1 + ((75 * (2 + (25 * 50))) / 100) = 940
```

Per the *Countdown* rules, correct solutions do not need to use all of the input numbers:

```
julia> using CountdownNumbers
julia> numbers([100, 75, 5, 6, 8, 7], 561)
CountdownNumbers.Operation: 75 + ((5 * 100) - (6 + 8)) = 561
```

If an exact solution is not possible, CountdownNumbers.jl will print a warning and return the solution closest to the target.

```
julia> using CountdownNumbers
julia> numbers([100, 75, 25, 50, 10, 6], 873)
┌ Warning: Could not find exact solution. Closest solution has L1 error 1
└ @ CountdownNumbers ~/.julia/packages/CountdownNumbers/IoXgC/src/public.jl:35
CountdownNumbers.Operation: (25 * ((10 * (75 + 100)) - 6)) / 50 = 872
julia> numbers([1, 1, 1, 1, 1, 1], 200)
┌ Warning: Could not find exact solution. Closest solution has L1 error 191
└ @ CountdownNumbers ~/.julia/packages/CountdownNumbers/IoXgC/src/public.jl:35
CountdownNumbers.Operation: ((1 + 1) + 1) * (1 + (1 + 1)) = 9
```

On *Countdown*, a puzzle consists of exactly six input numbers and a three-digit target number. However, CountdownNumbers.jl supports any number of input numbers and any positive target number.

```
julia> using CountdownNumbers
julia> numbers([1, 2, 3, 4], 25)
CountdownNumbers.Operation: 1 + ((2 * 3) * 4) = 25
```