Wejście
Lista nieujemnych liczb całkowitych.
Wynik
Największa nieujemna liczba całkowita, h
taka, że co najmniej h
liczby na liście są większe lub równe h
.
Przypadki testowe
[0,0,0,0] -> 0
[12,312,33,12] -> 4
[1,2,3,4,5,6,7] -> 4
[22,33,1,2,4] -> 3
[1000,2,2,2] -> 2
[23,42,12,92,39,46,23,56,31,12,43,23,54,23,56,73,35,73,42,12,10,15,35,23,12,42] -> 20
Zasady
Możesz napisać pełny program lub funkcję, dozwolone są również funkcje anonimowe. To jest golf golfowy, więc wygrywa najmniej bajtów. Standardowe luki są niedozwolone.
tło
H-indeks to pojęcie używane w środowisku akademickim, który ma na celu uchwycenie wpływu i produktywność badacza. Według Wikipedii badacz ma indeks h , jeśli opublikował h artykułów naukowych, z których każdy był cytowany w innych artykułach co najmniej h razy. Tak więc wyzwanie polega na obliczeniu indeksu h na podstawie liczby cytowań.
Aktualizacja
Wow, świetne odpowiedzi dookoła! Zaakceptowałem najkrótszy, ale jeśli ktoś inny wymyśli jeszcze krótszy, odpowiednio zaktualizuję mój wybór.
Zwycięzcy według języka
Oto tabela zwycięzców według języka, którą również postaram się aktualizować. Dołączyłem wszystkie posty z nieujemnym wynikiem. Popraw mnie, jeśli popełniłem tutaj błąd.
- APL : 7 bajtów autorstwa @MorisZucca
- Bash + coreutils : 29 bajtów autorstwa @DigitalTrauma
- C # : 103 bajty autorstwa @ LegionMammal978
- C ++ : 219 bajtów autorstwa @ user9587
- CJam : 15 bajtów autorstwa @nutki
- GolfScript : 13 bajtów autorstwa @IlmariKaronen
- Haskell : 40 bajtów autorstwa @proudhaskeller
- J : 12 bajtów przez @ ɐɔıʇǝɥʇuʎs
- Java : 107 bajtów przez @Ypnypn
- JavaScript : 48 bajtów przez @ edc65
- Mathematica : 38 bajtów autorstwa @ kukac67
- Perl : 32 bajty przez @nutki
- Pyth : 10 bajtów autorstwa @isaacg
- Python : 49 bajtów przez @feersum
- R : 29 bajtów przez @MickyT
- Ruby : 41 bajtów autorstwa @daniero
- Scala : 62 bajty autorstwa @ChadRetz
- SQL : 83 bajty przez @MickyT
- TI-BASIC : 22 bajty autorstwa @Timtech
CJam, 15 bajtów
Bezpośrednie tłumaczenie mojego rozwiązania Perla.
źródło
l~$W%{W):W>},,
- 14 bajtów{$W%ee::<1b}
(ee
dodano 17.04.2015) i{$W%_,,.>1b}
(.
dodano 21.02.2015).J (
1312)Całkiem podobne do rozwiązania randomry. Demonstracja:
źródło
#\<:
zamiasti.@#<
ratuje postać.Mathematica,
44424038 bajtówFunkcja anonimowa:
Uruchom go, przypinając dane wejściowe do końca w następujący sposób:
źródło
#>i++
. Przetestowałem jeszcze kilka przypadków. (I dzięki za wszystkie sugestie!)SQL,
819483Biorąc pod uwagę tabelę (I) wartości (V), następujące zapytanie zwróci h. Testowany w PostgreSQL i działa również w SQL Server. Edycja Powoduje, że zwraca 0 zamiast NULL. Udoskonalono z COUNT, dzięki @nutki
Przykład SQLFiddle
Zasadniczo numeruje wiersze według malejącego rodzaju wartości. Następnie zwraca maksymalną liczbę wierszy, gdzie liczba wierszy jest większa niż wartość.
źródło
COUNT(R)
ZamiastCOALESCE(MAX(R),0)
krótszej poprawki można użyć problemu NULL.R,
393529Biorąc pod uwagę wektor liczb całkowitych w i i stosując logikę odwrotnego sortowania, zwracamy
długośćwektora, w którym liczba elementów jest mniejsza niż s. Dzięki @plannapus za miłą wskazówkę.źródło
s=sort(i);sum(s>=length(s):1)
CJam, 23 bajty
To bierze listę jako tablicę na STDIN, na przykład
Sprawdź to tutaj.
Możesz użyć tego do uruchomienia wszystkich przypadków testowych:
Wyjaśnienie
Logika jest nieco wstecz, ale pozwoliła zaoszczędzić kilka bajtów. Zasadniczo, blok przekazany w celu sortowania zwrotów
0
dla ważnych kandydatów i1
nie tylko. Tak więc poprawni kandydaci zajmują pierwsze miejsce w posortowanej tablicy. A ponieważ sortowanie jest stabilne i zaczynamy od listy od N do 1, zwróci to największą prawidłową liczbę h.źródło
Perl 5: 32 (30 + 2 za
-pa
)Zajmuje wejście oddzielone spacją w STDIN:
źródło
sort{$b-$a}
oszczędza jeszcze 2Python (63)
Zasadniczo bezpośredni port mojego rozwiązania J. Oczywiście o wiele dłużej, jak można sobie wyobrazić.
źródło
enumerate
.Haskell, 40
wyszukuje pierwszą liczbę, która nie pasuje do schematu i zwraca jej poprzednika.
źródło
until
: Wypróbuj online!Ruby
4441Rekurencyjna, mniej więcej taka sama strategia jak rozwiązanie Python xnor:
Ruby 52
Brak rekurencji:
„Stabby” funkcje lambda / anonimowe, wymagają Ruby 1.9 lub nowszego. Zadzwoń np
f[[22,33,1,2,4]]
źródło
Bash + coreutils, 29
Dane wejściowe pobrane ze stdin jako lista rozdzielona znakiem nowej linii.
sort
liczby całkowite w porządku malejącymnl
poprzedza każdą linię numerem linii opartym na 1, oddzielając numer linii i resztę linii cyfrą większą niż>
bc
. Liczby całkowite mniejsze niż numer linii dają wynik 0. W przeciwnym razie 1.grep
zlicza liczbę0
s, tj. liczbę całkowitą większą lub równąh
Przykład
źródło
JavaScript (ES6) 48
Rozwiązanie rekurencyjne.
Przetestuj w konsoli FireFox / FireBug
Wynik
źródło
f=(l,h=0)=>l.map(v=>x+=v>h,x=0)&&x>h?f(l,h+1):h
. Jednak twoje rozwiązanie miałoby również 47 bajtów, jeśli zmienisz tylkoh=-1
nah=0
.Java 8, 116 bajtów.
Pełna klasa:
Funkcjonować:
źródło
APL, 12 znaków
(+/⊢≥⍒)⊂∘⍒⌷⊢
źródło
C ++
815219 z (wc -c main.cpp)Dobra, oto najgorszy kod, jaki kiedykolwiek napisałem! :)
źródło
Galaretka, 6 bajtów
Wyjaśnienie:
źródło
CJam, 22 bajty
Pobiera listę jako dane wejściowe:
Wynik:
Wypróbuj tutaj
źródło
GolfScript, 13 bajtów
Przetestuj ten kod online. 1
Pobiera dane wejściowe jako tablicę na stosie. Używa tego samego algorytmu, co rozwiązanie Fehonum w języku Python , iterując po liczbach w tablicy i zwiększając licznik od 0, aż zrówna się lub przekroczy bieżący element tablicy.
1) Wydaje się, że online serwer GolfScript ponownie doświadcza przypadkowych przekroczeń czasu. Jeśli program przekroczy limit czasu, spróbuj ponownie go uruchomić.
źródło
TI-BASIC, 22 bajty
Reprezentacja ASCII:
Zrzut szesnastkowy:
Pobiera listę jako dane wejściowe. Począwszy od Ans = 0, sprawdza, czy przynajmniej Ans + 1 z liczb to przynajmniej Ans + 1. Jeśli tak, zwiększa Ans i zapętla ponownie. Jeśli nie, wyświetla odpowiedź Ans.
źródło
JAGL Alpha 1.2 - 14
Nie liczy się, ponieważ po pytaniu dodano funkcję odwrotnej tablicy „C”, ale i tak odpowiadam dla zabawy.
Zakłada, że tablica jest pierwszym elementem na stosie i umieszcza odpowiedź na górze stosu.
Aby wydrukować, po prostu dodaj
P
na końcu, dodając bajt.Wyjaśnienie:
źródło
J,
1511 znaków(Obecne najkrótsze rozwiązanie J.)
Porównuje
<:
posortowane\:~
elementy listy z 1..n + 1#\
i liczy prawdziwe porównania+/
.Testowanie podobieństwa do innych rozwiązań J na 100 losowych przypadkach testowych:
źródło
Reng v.3.2, 43 bajty
Wypróbuj tutaj! Ten kod można podzielić na trzy części: początkową, obliczeniową i końcową.
Inicjał
Zapisuje
1
nax
długość stosu wejściak
doy
i pobiera wszystkie dane wejściowe (aïí
), które są następnie sortowane ('
).1ø
przechodzi do następnej linii, tj. następnej części.Obliczeniowe
Reng nie ma wbudowanej nierówności. Dlatego należy zaimplementować algorytm. Najkrótszym algorytmem, jaki znalazłem,
a < b
jest%:1,%1e
; wygląda to tak:Jestem pewien, że to wyjaśniło! Pozwól mi wyjaśnić dalej.
x % 1
, tj. moduł z 1, odwzorowujex
na(-1,1)
. Wiemy, że(a/b) % 1
właśniea/b
wtedya < b
. Zatem to wyrażenie jest równea < b
.Nie działa to jednak tak dobrze z powodu problemów z modułem zerowym. Tak więc początkowo zwiększamy każdego członka stosu i licznika.
Po uzyskaniu logicznej nierówności na stosie
x+
dodaje ją do x, ale chwilowo pozostawia na stosie.y1-
zmniejsza sięy
i?^
idzie w górę iffy == 0
i przechodzimy do ostatniej fazy. W przeciwnym razie, kładziemyy-1
sięy
i nowax
wx
.Finał
To usuwa resztki
y-1
ze stosu, zmniejsza wynik, wysyła je i kończy program.źródło
05AB1E , 5 bajtów
Wypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
Mathematica, 57 bajtów
Jest to anonimowa funkcja pobierająca listę i zwracająca liczbę całkowitą, na przykład
Użyj tego, aby sprawdzić wszystkie przypadki testowe:
źródło
C #, 103
Funkcja anonimowa.
Zębaty:
źródło
Scala, 62
źródło