Given an array of numbers `nums`

, and a given number `given_num`

:

```
nums = [100, 200, 400, 800, 1600, 3200, 6400, 128000]
given_num = 900
```

Get the number closest to the `given_num`

from the array `nums`

.

In this example, the returned value should be `800`

.

## Top comments (36)

Javascript:Let's go for a JS one liner π

This causes the original array to have its order changed but I don't think that's against the rules π

I dont think use

`sort`

is good idea:Let see:

By including a function to sort by I'm no longer doing an alphabetical sort, which means this problem no longer exists.

developer.mozilla.org/en-US/docs/W...

yes, by including

compareFunctioncallback, we can solve this problem.If it outputs the closest number, it works! :)

Window functions!

hahaha thinking outside the box :D

I looked at it again just now and the

`row_number`

is redundant anyway...Ruby:

Shamelessly taken from Stack Overflow π I was in a much more of a "just give me the answer" mood than "let's figure it out" mood.

This is a job for Reduce!

JavaScript:

Java:

Trying to optimize no of lines with Java 8 Streams and Lambda.

Wolfram Language!

I knew that one day my subscription will come in handy...

A Python implementation:

Here goes Python !

Using JavaScript

`Set`

:Or we can save the intermediate array:

And there is another perspective, instead of iterating numbers, we can iterate distances. Like:

This will normally be slower, but in cases like:

`nums = [10000000, 9999999, 9999998, ..., 1]`

`given_num = 10000001`

It will be much faster than other algorithms.

I have written a benchmark function for this:

You can test your function via

`benchmark(func)`

.The solution above yields:

`closest_num: 5037.456787109375ms`

in Chrome.

Perl solution:

play.golang.org/p/xxzN4y-fPF0

Hey! Let's do it the Scala way:

Thanks for the challenge!

With the help of google, I was able to find the answer to this π

import numpy as np

def find_nearest(array, value):

array = np.array(array)

z=np.abs(array-value)

y= np.where(z == z.min())

m=np.array(y)

x=m[0,0]

y=m[1,0]

near_value=array[x,y]

array =np.array([[100, 200, 400, 800, 1600, 3200, 6400, 128000]])

print(array)

value = 900

print(find_nearest(array, value))

## Answer:

Thanks for this challenge! πΊ

OCaml with list instead of array