Otrzymujesz niepustą listę dodatnich liczb całkowitych, np
[6 2 9 7 2 6 5 3 3 4]
Powinieneś uszeregować te liczby według ich wartości, ale jak to zwykle bywa w tabeli liderów, jeśli jest remis, wszystkie remisowane liczby mają tę samą rangę, a odpowiednia liczba rang jest pomijana. Oczekiwany wynik dla powyższej listy byłby zatem
[3 9 1 2 9 3 5 7 7 6]
Na przykład najwyższa wartość na wejściu wyniosła 9
, więc staje się to 1
(pierwsza ranga). Trzecią najwyższą wartością jest 6
, więc oba 6
stają się 3
, a ranga 4
jest całkowicie pomijana.
Zasady
Możesz użyć dowolnego wygodnego, jednoznacznego, płaskiego formatu listy wejściowej i wyjściowej. Pierwsza / najmniejsza ranga na wyjściu powinna zawsze wynosić 1 .
Możesz napisać program lub funkcję i użyć dowolnej z naszych standardowych metod otrzymywania danych wejściowych i dostarczania danych wyjściowych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
[8] -> [1]
[1 15] -> [2 1]
[18 14 11] -> [1 2 3]
[11 16 14 8] -> [3 1 2 4]
[15 15 15 15 15] -> [1 1 1 1 1]
[10 2 5 4 15 5] -> [2 6 3 5 1 3]
[5 5 10 10 5 11 18] -> [5 5 3 3 5 2 1]
[2 4 9 4 17 9 17 16] -> [8 6 4 6 1 4 1 3]
[11 17 19 17 10 10 15 3 18] -> [6 3 1 3 7 7 5 9 2]
[2 11 4 8 3 3 12 20 4 18] -> [10 4 6 5 8 8 3 1 6 2]
[12 6 10 2 19 19 6 19 8 6 18] -> [5 8 6 11 1 1 8 1 7 8 4]
[5 6 14 19 13 5 19 9 19 9 9 19] -> [11 10 5 1 6 11 1 7 1 7 7 1]
[9 2 12 3 7 11 15 11 6 8 11 17 11] -> [8 13 3 12 10 4 2 4 11 9 4 1 4]
[3 5 15 7 18 5 3 9 11 2 18 1 10 19] -> [11 9 4 8 2 9 11 7 5 13 2 14 6 1]
[6 11 4 19 14 7 13 16 10 12 7 9 7 10 10] -> [14 6 15 1 3 11 4 2 7 5 11 10 11 7 7]
[11 20 11 1 20 16 11 11 4 8 9 7 11 14 10 14] -> [6 1 6 16 1 3 6 6 15 13 12 14 6 4 11 4]
[4 7 15 2 3 2 3 1 14 2 10 4 7 6 11 2 18] -> [9 6 2 13 11 13 11 17 3 13 5 9 6 8 4 13 1]
[5 1 17 7 1 9 3 6 9 7 6 3 2 18 14 4 18 16] -> [12 17 3 8 17 6 14 10 6 8 10 14 16 1 5 13 1 4]
[5 6 8 10 18 13 20 10 7 1 8 19 20 10 10 18 7 2 1] -> [16 15 11 7 4 6 1 7 13 18 11 3 1 7 7 4 13 17 18]
[12 17 8 2 9 7 15 6 19 5 13 16 14 20 10 11 18 4 3 1] -> [9 4 13 19 12 14 6 15 2 16 8 5 7 1 11 10 3 17 18 20]
źródło
indexOf
funkcji. Uważam, że w przypadku nieposortowanych danych wejściowych istnieje wiele alternatyw w wielu językach.Odpowiedzi:
Obejście w programie Excel dla głupich reguł dotyczących wprowadzania myszy w programie Code Stack Stack Exchange: (WESRRMICGSE) 28 bajtów
rank(RC[1],r1c1:r1024:c1024)
Wprowadź listę jako csv (
10,23,34,2,
) do kompilatora po wejściu do źródła. bez cudzysłowów, bez nawiasów, przecinek końcowy.WESRRMICGSE jest dokładnie jak programowanie w programie Excel, tyle że można pominąć początkowy znak „=”, aby zapisać bajt. Różnica w funkcjonowaniu wynika z faktu, że WESRRMICGSE albo przeciągnie formułę w dół, aby automatycznie skopiować kod i zapewni różne wyniki z pojedynczym wejściem całkowitym. podał listę jako dane wejściowe, ta lista przechodzi do kolumny B (kolumna danych wejściowych), a formuła automatycznie podaje lek w celu dopasowania do liczby danych wejściowych. (np. dane wejściowe 34, 21, 45 „przeciągnęłyby” formułę w dół o 2 komórki, w sumie 3 komórki z formułą).
Edycja: Nigdy nie spodziewałem się, że ta odpowiedź będzie popularna. Łał!
źródło
MATL , 4 bajty
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Python 2, 41 bajtów
Dla każdej wartości znajdź jej indeks na liście posortowanej według malejącej kolejności. Aby największa wartość dawała 1 zamiast 0, używamy dodatkowego elementu „nieskończoności” samej listy, ponieważ Python 2 traktuje listy jako większe niż liczby.
Bardziej bezpośrednie rozwiązanie ma 42 bajty i działa również w Pythonie 3.
Dla każdego elementu liczy się liczba mniejszych elementów, dodając 1, aby przejść do 1-indeksowanego.
źródło
Galaretka , 5 bajtów
Wypróbuj online!
Jak to działa
źródło
R, 24
2520bajtówKorzysta ze standardowej funkcji rangowej z metodą powiązań „min” nad negowanym wektorem.
cat
dodano, aby wyprowadzić go do STDOUT. Zapisano jedną dzięki @GuiseppePrzykład
źródło
cat
, aby był to pełny program.rank(-a,,'min')
dobrze, gdzie a jest wprowadzoną listą w postaci wektorowej?function(a)rank(-a,,'min')
."mi"
raczej do niż"min"
.cat
? Gdyby to przesłanie zostałofunction(a)rank(-a,,'mi')
uznane za wystarczające, a wyniki programu są identyczne jakrank(-scan(),,'mi')
PowerShell v2 +,
4341 bajtówOpracowany niezależnie, ale widzę, że jest to ten sam algorytm, co rozwiązanie Python @ xnor , więc / shrug.
Pobiera dane wejściowe jako indywidualne argumenty wiersza polecenia (tj. Listę oddzieloną spacjami). Dane wyjściowe (formatowanie domyślne) to nowa linia między elementami.
Dla każdego elementu na liście wejściowej
sort
jest to lista wejściowa w-d
kolejności malejącej, pobiera.indexOf()
bieżący element i dodaje1
. Zwróć uwagę na rzutowaną tablicę jawną@(...)
, aby uwzględnić jednocyfrowe dane wejściowe. Wynikowe liczby są pozostawione w potoku, a dane wyjściowe są niejawne.Zaoszczędź 2 bajty dzięki @Matt!
Przykład
źródło
sort -d
dla ciebie nie działał? To jest dla mnie jednoznaczne.-Descending
i-Debug
jest niejednoznaczny. Ale w prostej powłoce na Win8.1 oraz powłoce i ISE na Win10 działa dobrze. To nie byłby pierwszy raz , kiedy moja konkretna instalacja Win8.1 jest głupia ...: - / Dzięki za golfa!$args|%{@($args|sort -d).indexof($_)+1}
jest krótszy, ale nie miałem dobrego spojrzenia, czy to działa$args
funkcja służy jako dane wejściowe dla bloku skryptu w pętli{...}
, tak jak w przypadku użyciafilter
lubfunction
.Oktawa, 15 bajtów
Port mojej odpowiedzi MATL na Octave. Działa również w Matlab R2016b.
Kod definiuje anonimową funkcję. Aby go wywołać, przypisz go do zmiennej. Wypróbuj w Ideone .
źródło
JavaScript (ES6),
3836 bajtówEdycja: Zapisano 2 bajty dzięki @ETHproductions.
źródło
.map
FTW ;-)a=>a.map(e=>a.map(d=>r+=e<d,r=1)&&r)
Galaretka , 5 bajtów
TryItOnline!
W jaki sposób?
źródło
1+(+/@:<)"0 1~
>€µS‘
lub bardziej podobny<@€µS‘
(@
odwraca argumenty do<
operatora). J~
jest ukryty w łańcuchu po lewej stronieµ
, który jest monadycznym (a nie diadadowym) rozdziałem i<
wektoryzuje, jeśli argument (y) jest (są) listą (ami).Perl 6 ,
4226 bajtówZnajdź pierwszy indeks
:k
na odwróconej[R,]
posortowanej liściePolicz większe wartości i dodaj jedną
źródło
JavaScript,
8749 bajtówf=a=>a.slice().map(function(v){return a.sort(function(a,b){return b-a}).indexOf(v)+1 })
a=>[...a].map(v=>a.sort((a,b)=>b-a).indexOf(v)+1)
Dzięki Conor O'Brien i ETHproductions!
źródło
v=>a.sort((a,b)=>b-a).indexOf(v)+1
..slice()
, ponieważ.map
działa na kopii tablicy.f=
.[18,13,18]
zwroty[1,1,2]
zamiast[1, 3, 1]
a.sort()
przechowuje posortowaną tablicęa
. Ale możesz zmienića.slice()
na,[...a]
aby zapisać kilka bajtów.Mathematica,
44 bajty42 bajty40 bajtów
jest 3-bajtową postacią prywatnego użytkuU+F4A1
( strona z dokumentami Wolfram )Edycja: Dzięki JHM za oszczędności bajtów.
źródło
{10,2,5,4,15,5}
(wyjście powinno być{2,6,3,5,1,3}
nie{2,5,3,4,1,3}
. Należy pamiętać, że4
musi zostać pominięte, ponieważ istnieją dwa5
s na wejściu).x
i#
(efektywnie pozbycie się w nawiasach)xPosition[SortBy[x,-#&],#][[1,1]]&/@x
.Pyke, 6 bajtów
Wypróbuj tutaj!
źródło
J ,
148 bajtówW jaki sposób?
Poprzednie rozwiązanie
źródło
1+1#.</~
. Sumowanie wierszowe wykonuje się przy użyciu konwersji bazy 1. Inną alternatywą jest1+\:~i.]
także 8 bajtów.Haskell, 28 bajtów
Tylko niektóre wyjaśnienia listy.
źródło
Cud , 28 bajtów
Stosowanie:
Odwzoruj tablicę wejściową za pomocą funkcji, która dodaje 1 do pierwszego indeksu elementu w malejącej wersji danych wejściowych.
źródło
Dyalog APL , 7 bajtów
⊢
argumenty'⍳⍨
indeksy w⍒
indeksy, które posortowałyby argument malejący⊃¨
każdy wybrany z⊂
cały argumentWypróbuj APL online!
źródło
Mathematica, 37 bajtów
Czysta funkcja, która uszereguje dane wejściowe zgodnie z regułami problemu. Dawny:
źródło
Meduza , 15 bajtów
Wypróbuj online!
Wyjaśnienie
Wydaje się, że nie ma jeszcze dobrego sposobu na znalezienie indeksu wartości na liście w meduzach, więc wykorzystuje to podejście polegające na zliczaniu, ile wartości jest większych niż bieżąca, i zwiększaniu wyniku. W dużej mierze odbywa się to poprzez skonstruowanie jednoargumentowej funkcji, która oblicza tę wartość dla danego elementu.
Spowoduje to utworzenie wątkowej wersji operatora porównania, więc jeśli podasz tę liczbę całkowitą i listę, zwróci listę wyników porównania między tą liczbą całkowitą a każdym elementem na liście.
To curry prawy argument poprzedniej funkcji z listą wejściową. Tak więc wynikiem jest jednoargumentowa funkcja, która przyjmuje liczbę całkowitą i daje listę wyników porównania z danymi wejściowymi programu.
Tutaj
/+
jest redukcja przez dodanie, co oznacza, że jest to po prostu funkcja „sumuj tę listę”.&
łączy to z poprzednią funkcją, więc mamy teraz jednoargumentową funkcję, która zlicza, ile wartości na wejściu jest większa niż ta liczba całkowita.Na tym również komponujemy funkcję przyrostową.
Na koniec wątkujemy również tę funkcję, aby była automatycznie stosowana do każdej liczby całkowitej przekazywanej do niej listy. Ze względu na układ kodu
i
zdarza się, że jest również traktowany jako dane wejściowe tej funkcji, dzięki czemu oblicza się pożądany wynik.Na koniec drukuje wynik.
źródło
pieprzenie mózgu, 124 bajty
Sformatowany:
Jest to przeznaczone do 8-bitowych implementacji typu brainfuck. Dane wejściowe i wyjściowe są za pomocą wartości bajtów .
Wypróbuj online.
Dla każdego elementu liczy się liczba elementów większa od niego, a następnie drukuje wynik plus jeden. Dokonuje się tego poprzez zwiększenie wszystkich elementów, aż bieżący element wyniesie zero, aktualizując wynik za każdym razem, gdy inny element stanie się zero przed bieżącym elementem.
Taśma jest podzielona na 4-komórkowe węzły,
b c 0 0
gdzie
c
jest elementem ib
jest flagą nawigacyjną, która jest ujemna dla bieżącego elementu, w przeciwnym razie jedna.Wynik i kopia bieżącego elementu są przechowywane po lewej stronie tablicy.
źródło
Java, 215 bajtów
Wyjaśnienie:
Bardzo oczywiste.
Zasadniczo dla każdej liczby całkowitej w tablicy sprawdza, ile jest większych, a następnie drukuje nową tablicę z rankingami.
Przepraszam, to nie jest zbyt zwięzłe, ale to moja pierwsza próba w jednym z nich i nie widziałem wpisu dla java. Jestem pewien, że można bardziej zagrać w golfa.
Można go uruchomić, odwołując się do metody statycznej i przekazując tablicę. Nie sądziłem, że konieczne będzie napisanie głównej funkcji, ale jeśli tak, zrobię to w przyszłości.
źródło
r = new
)for (
?PHP, 101 bajtów
Musi być jakaś krótsza droga.
funkcja przyjmuje dane jako tablicę liczb całkowitych, zastępuje zmienną wejściową szeregami jako ciągi liczbowe.
Stosowanie:
$a=[1,2,4,2,2,3];f($a);print_r($a);
źródło
Rubinowy,
4540 bajtówźródło
[10, 2, 5, 4, 15, 5]
daje mi wyjście,[2, 5, 3, 4, 1, 3]
kiedy powinno być[2, 6, 3, 5, 1, 3]
- myślę, że naprawię, że po prostu usuniesz.uniq
- oszczędzając 5 bajtów!Clojure,
4844 bajtówAktualizacja: za pomocą
for
zamiastmap
Po prostu filtruje każdą wartość mniejszą niż bieżąca, liczy długość listy i zwiększa ją o jeden.
źródło
Tcl , 54 bajty
Wypróbuj online!
źródło
PHP, 84 bajty
Użycie: Przekaż funkcję r tablicę liczb całkowitych, a zwróci odpowiednią tablicę liczb całkowitych uszeregowanych.
Zdanie testów tutaj.
źródło
Perl 5, 23 +2 (-ap)
Wypróbuj online
źródło
K (oK) , 11 bajtów
Rozwiązanie:
Wypróbuj online!
Przykłady:
Wyjaśnienie:
Sprawdź pozycję oryginalnej listy na liście posortowanej, a następnie dodaj jedną.
źródło