# Number conversion

## JavaScript (ES6), 98 bytes

Takes input as `(a)(b)`

. Can be very slow if there's no solution, but it should eventually return \$-1\$ (at least in theory).

```
a=>h=(b,k=0)=>(g=(v,n)=>n--?[...v+''].some(x=>g(+x+v,n)|g(v-x,n)):v==b)(a,k)?k:k<a+[b]?h(b,k+1):-1
```

Try it online!

## 05AB1E, ~~38~~ 37 bytes

```
3Ýo*Êß8LIå*i®ë¹¸[DIå#¼Ùvy©v®y+®y-}})}¾
```

Can definitely be golfed a bit more..

Thanks to *@tsh* for the condition of the first if-statement.

Try it online or verify a few more test cases.

**Explanation:**

```
3Ý # Push the list [0,1,2,3]
o # For each value, take 2 to the power that value: [1,2,4,8]
* # Multiply each by the first (implicit) input
Êß # Check that the second (implicit) input is NOT in this list
8L # Push the list [1,2,3,4,5,6,7,8]
Iå # Check that the second input is in this list
*i # If both are truthy:
® # Push -1
ë # Else:
¹¸ # Push the first input again, and wrap it into a list
[ # Start an infinite loop:
D # Duplicate the list at the top of the stack
Iå # If the second input is in this list:
# # Stop the infinite loop
¼ # Increase the counter variable by 1
v # Loop over each number `y` in the list:
y© # Store the current number `y` in variable `®` (without popping)
v # Inner loop over each digit `y2` of `y`
®y+ # Add digit `y2` to integer `®`
®y- # Subtract digit `y2` from integer `®`
}} # After the nested loop:
) # Wrap all values on the stack into a list for the next iteration
}¾ # After the infinite loop: push the counter variable
# (and output the top of the stack implicitly as result)
```

## Jelly, ~~33~~ 29 bytes

```
0ịD;N$+Ɗ;@€)ẎL<¥Ƈȷ7Ʋ=⁴¬ȦƊ¿ẈṪ’
```

Try it online!

A full program that takes `[[a]]`

as the left argument and `b`

as the right argument.

More efficient version (36 bytes)