Uzyskaj najbliższą wartość do liczby


16

W tym kodzie golfowym musisz uzyskać najbliższy numer z innego na liście.

Wyjście może być liczbą najbliższą wejściu.

Przykład:

value: (Input) 5 --- [1,2,3] --- 3

Program może działać z liczbami ujemnymi.

Przykład:

value: (Input) 0 --- [-1,3,5] --- -1


value: (Input) 2 --- [1, 5, 3] --- 1 (Because it gives priority to lower numbers)

ZASADY:

Jak wspomniano wcześniej, musi działać z liczbami ujemnymi.

Jeśli są dwie odpowiedzi (Przykład: 0 - [5, -5]), program nadaje priorytet najniższej liczbie. (-5)

To jest kod golfowy, więc wygrywa najkrótszy kod!


6
przyznaje pierwszeństwo niższym liczbom, o których należy wspomnieć w przepisach.
Dennis

Jeśli numer docelowy jest obecny na liście, to czy wynikiem powinna być ta liczba, czy najbliższy inny numer z listy?
trichoplax

Wiem, że przyjęta odpowiedź jest doczesna.
AlexINF

4
@ Alex82 Jasne, ty wiesz, że będziesz zmieniać przyjętym odpowiedź, jeśli lepszy przychodzi, ale niektórzy ludzie odstraszają wyzwań, które już mają Zaakceptowanych odpowiedź, bo niestety nie każdy autor wyzwaniem jest to, że oddany do późnych odpowiedzi. Nie chodzi więc o to, czy wcześniejsze zaakceptowanie jest złe, ale czy ludzie odniosą złe wrażenie.
Martin Ender

1
Czy liczby wejściowe są liczbami całkowitymi?
randomra

Odpowiedzi:


6

Pyth, 6 bajtów

haDQSE

Zestaw testowy

Wprowadź w następującym formularzu na STDIN:

num
array

Wyjaśnienie:

haDQSE
          Implicit: Q = eval(input()) (num)
     E    Evaluate input (array)
    S     Sort (smaller values to the front)
 aDQ      Sort by absolute difference with Q.
h         Take the first element of the sorted list, the min.
          Print implicitly.

6

Rubinowy, 34 bajty

->n,a{a.sort.min_by{|x|(n-x).abs}}
a.sort       min_by tiebreaks by position in array, so put smaller numbers 1st
.min_by{|x|  select the element which returns the smallest val for predicate...
(n-x).abs}   (absolute) difference between input num and element

1
Myślę, że nie potrzebujesz #sortowania, ponieważ min_by już posortuje je od min do maks. Może być nawet krótszy:->n,a{a.min_by{|x|(n-x).abs}}
TiSer

4

Mathematica, 12 bajtów

Min@*Nearest

Wbudowane FTW! Wyjaśnienie Buettnera: „Mathematica ma do tego wbudowaną funkcję Nearest, ale zwraca listę wszystkich powiązanych liczb. Dlatego musimy ją skomponować, Minaby zerwać remis”.


7
Właśnie to otrzymuję za napisanie wyjaśnienia ...
Martin Ender

1
Czy możesz dodać „Wypróbuj online”?
AlexINF

1
@ Alex82 Wydaje się mało prawdopodobne dla Mathematica (która jest zastrzeżona).
Martin Ender


3

Pyth, 8 bajtów

hS.mabQE

Wyjaśnienie

         - autoassign Q = eval(input())
  .m   E -   min_values([V for b in eval(input())])
    abQ  -    abs(b-Q)
 S       -  sorted(^)
h        - ^[0]

Wypróbuj online!


2

JavaScript ES6, 64 56 54 bajtów

(i,a)=>a.sort((a,b)=>s(i-a)-s(i-b)||a-b,s=Math.abs)[0]

Wypróbuj online

Dzięki @Niel za zapisanie dwóch bajtów

Fragment testowy:

f=(i,a)=>a.sort((a,b)=>s(i-a)-s(i-b)||a-b,s=Math.abs)[0];

[
  [5, [1, 2, 3]],
  [2, [3, 5, 1]],
  [2, [1, 3, 5]],
  [0, [-1, 2, 3]],
  [5, [1, 2, 3]]
].map(v=>O.textContent+=JSON.stringify(v)+": "+f.apply(null,v)+"\n")
<pre id=O></pre>


Zaoszczędź 2 bajty, łącząc różne rodzaje:(i,a)=>a.sort((a,b)=>s(i-a)-s(i-b)||a-b,s=Math.abs)[0]
Neil

Można zapisać bajt przez currying swoją funkcję: i=>a=>...czym f(i)(a)jest, jak to nazwać.
Patrick Roberts,

@PatrickRoberts W tym przypadku powiedziałbym, że nie, ponieważ OP prosi o funkcję (lub simulere), która przyjmuje wartości: inputi listę / tablicę / ... jako liczby całkowite
andlrc

2

Galaretka, 7 6 bajtów

ạżṛỤḢị

Wypróbuj online!

Jak to działa

ạżṛỤḢị Main link. Left input: n (number). Right input: A (list)

ạ      Take the asbolute difference of n and the items of A.
  ṛ    Yield the right argument, A.
 ż     Zip the left result with the right one.
       This pairing causes ties in absolute value to be broken by initial value.
   Ụ   Grade up; sort the indices of the resulting list by their associated values.
    Ḣ  Retrieve the first index, which corresponds to the smallest value.
     ị Retrieve the item of A at that index.

1

MATL , 10 bajtów

Sti-|4#X<)

Wypróbuj online!

S       % implicitly input array, and sort. This ensures smaller numbers have priority
t       % duplicate
i       % input number
-|      % compute array of absolute differences
4#X<    % arg min. If there are several minimizers, the position of the first is returned
)       % index into original array. Implicitly display

1

Python 2, 56 bajtów

a=input()
print sorted(input(),key=lambda x:abs(a-x))[0]

Najpierw pobiera numer docelowy a=input()- należy go zapisać w zmiennej.

Następnie sortuje dane wejściowe z lambda x:abs(a-x)zastosowaną funkcją (pomyśl map(lambda x:abs(a-x), input()))

Następnie przyjmuje minimalną wartość w przypadku jakichkolwiek zduplikowanych wartości


0

TeaScript, 10 bajtów

T#(y-l)a)░

TeaScript nie obsługuje wprowadzania danych z tablicy, więc w trakcie uruchamiania konsoli: TeaScript("T#y-la)░", [[1, 2, 3], 1], {}, TEASCRIPT_PROPS)to runthis.

Wyjaśnienie

T#  // Sort input by...
  (y-l)a // absolute difference with input
)░  // First item in array

0

R, 42 bajty

x=sort(scan());x[which.min(abs(x-scan()))]

0

Haskell, 38 bajtów

e#l=snd$minimum$(zip=<<map(abs.(e-)))l

Przykład użycia: 2 # [1,5,3]-> 1.

Dla każdego elementu na liście wejściowego lutworzyć parę bezwzględnej różnicy elementu do liczby wejściowych ei samego elementu, na przykład e=2, l=[1,5,3]-> [(1,1),(3,5),(1,3)]. Znajdź minimum i odrzuć różnicę.


0

zsh, 75 73 71 70 67 bajtów

for n in ${@:2};{echo "$[$1-n]    $n"}|tr -d -|sort -n|head -1|cut -f2

Oczekuje danych wejściowych jako argumentów wiersza poleceń.

Zauważ, że cztery spacje w echo rzeczywistości mają być tabulatorem, ale Stack Exchange konwertuje tabulatory na spacje we wszystkich postach.

Nie jest kompatybilny z Bash ze względu na for składnię.

for n in ${@:2};      for each argument except the first...
{echo "$[$1-n]\t$n"}  output the difference from the first argument
                        and then the original number
|tr -d -              poor man's abs()
|sort -n              sort by first num (difference), tiebreaking by second num
                        (original value)
|head -1              take the thing that sorted first
|cut -f2              print field 2 (aka discard the difference)

Dzięki dev-null za 2 bajty!


0

Perl 6 , 31 bajtów

{@^b.sort.sort((*-$^a).abs)[0]}

Stosowanie:

my &code = {@^b.sort.sort((*-$^a).abs)[0]}

say code 5, [1,2,3];   # 3
say code 0, [-1,3,5];  # -1
say code 2, [1, 5, 3]; # 1
say code 0, [5,-5];    # -5
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.