My friend Aviv, a fellow Unity developer, and me were trying to figure out how many different significant ways we can come up with to solve the simple problem of choosing a random value.

You can try this silly challenge yourself, or jump right to our solution.

Let me know if you found other solutions.

[spoiler name=”solutions”]

float ex1 = Mathf.Sign(Random.Range(-0.5f, 0.5f));

float ex2 = Mathf.Sign(Random.Range(-1,1));

int ex3 = (Random.Range(0,2) * 2) – 1;

int ex4 = Random.Range(0,2);

if (ex4 == 0) { ex4 = -1; }

int[] choices = new int[]{-1, 1};

int ex5 = choices[Random.Range(0, ex5.Length)];

int ex6 = (Random.value > 0.5f) ? 1 : -1;

int ex7 = Mathf.Sign (Random.rotation.x);

List<int> values = new List<int>(){1,-1};

int ex8 = Random.Range(-1,2);

while (!values.Contains(ex8)) { ex8 = Random.Range(-1,2); }

[/spoiler]

Of those, I would say ex1 is too similar to ex2 (also it was interesting to notice it would work with integers too).

So I would score us 7 solutions.

I would choose ex6 for real life usage, since I think it’s the most readable.

ex7 is the funniest but it should work (notice we are using the UnityEngine library, not the System library)