Words: 317

Time to Read: ~ 2 minutes

## Pre-Coffee Question

I was asked today if I could figure out how many ways I could arrange the following equation to get the number 18?

// Replacing the "?"s with either "+", "-", "*", or "/" how many ways can you get 18? 2 ? 2 ? 2 ? 2 ? 2

Now I’m sure with enough time and effort that I probably could. But if you ask me this before I’ve had any coffee, the best you’re going to get is a dirty look.

Again, that’s the best that you’re going to get…

## So I got lazy.

I know PowerShell.

I know that I can create the formula in PowerShell.

I know that I can invoke the formula in PowerShell to get the result.

So with an icy glare at the offending message and a sip at my scalding coffee, I create the script.

### The Script

I’m not saying that this script is any good. Like I said, I wrote the script before the caffeine had hidden the tiredness from my brain.

It works, and that was the main thing for me at the time.

```
$operators = '+', '-', '*', '/'
$Permutations = foreach ($op1 in $operators) {
foreach ($op2 in $operators) {
foreach ($op3 in $operators) {
foreach ($op4 in $operators) {
$MatsIzHard = [scriptblock]::Create("2 $op1 2 $op2 2 $op3 2 $op4 2")
[PSCustomObject]@{
Formula = $MatsIzHard.ToString()
Result = $MatsIzHard.InvokeReturnAsIs()
}
}
}
}
}
```

Now that I have the results in the `$Permutations`

variable, I can look for any results where the Result property is 18.

```
$Permutations.Where({ $_.Result -eq 18 })
```

Yes, I can get 18 from that expression 2 ways…

## On to my Actual Job

Overall that took around 3 minutes to complete. Which was the perfect time required for the caffeine to kick in and for me to be ready to start my day.

Now, that PowerShell was not pretty, dynamic, or efficient.

It was probably only fast because the number of iterations was so low.

But I’m happy since even though I can’t do maths before coffee, I can at least write PowerShell.