# Elastic collisions between blocks

## APL (Dyalog Classic), ~~18~~ 16 bytes

```
¯1+⌈○÷¯3○.5*⍨⎕÷⎕
```

Try it online!

rendered as the equivalent `{¯1+⌈○÷¯3○.5*⍨⍵÷⍺}`

in the tio link, to facilitate testing; `⎕`

means evaluated input; `⍺`

and `⍵`

are the arguments to an anonymous function

$$\left\lceil\frac\pi{\textrm{arctg}\sqrt\frac ba}\right\rceil-1$$

(that's the formula from the video. i recommend watching it. it's well explained and the animations are great for building intuition.)

## Jelly, ~~10~~ 9 bytes

My first Jelly submission :')

```
÷½ÆṬØP÷Ċ’
```

*-1 byte* thanks to Mr.Xcoder

Uses the formula as in the video. Receives the input flipped; OP gave permission. It probably has room for further golfing, so be sure to give me feedback!

```
÷½ divide b by a and take square root
ÆṬ take the ArcTan of that; then
÷ divide
ØP pi
by the number we had.
Ċ Round up
’ and subtract one
```

Try it online

## JavaScript (ES7), ~~ 41 ~~ 39 bytes

Takes input as `(a)(b)`

.

```
a=>b=>3.14159265/Math.atan((b/a)**.5)|0
```

Try it online!

### How?

Instead of using a *ceil* function and subtracting \$1\$, we deliberately use a slightly underestimated approximation of \$\pi\$ and *floor* the result with a bitwise OR.

For \$a,b\le 10000\$, it was empirically proven to give the same results as this safer 44-byte version:

```
with(Math)f=a=>b=>ceil(PI/atan((b/a)**.5))-1
```

Try it online!