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 compareFunction callback, 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