Eingang
Eine Liste nichtnegativer Ganzzahlen.
Ausgabe
Die größte nichtnegative Ganzzahl h
, sodass mindestens eine h
der Zahlen in der Liste größer oder gleich ist h
.
Testfälle
[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
Regeln
Sie können entweder ein vollständiges Programm oder eine Funktion schreiben, und auch anonyme Funktionen sind zulässig. Dies ist Code-Golf, so dass die wenigsten Bytes gewinnen. Standardlücken sind nicht zulässig.
Hintergrund
Der h-Index ist ein Begriff, der im akademischen Bereich verwendet wird, um die Wirkung und Produktivität eines Forschers zu erfassen. Laut Wikipedia hat ein Forscher den Index h , wenn er h wissenschaftliche Artikel veröffentlicht hat, von denen jeder mindestens h mal in anderen Artikeln zitiert wurde. Bei dieser Herausforderung geht es also darum, den h-Index aus einer Liste von Zitationszählungen zu berechnen.
Aktualisieren
Wow, rundum tolle Antworten! Ich habe die kürzeste angenommen, aber wenn jemand anderes eine noch kürzere findet, aktualisiere ich meine Auswahl entsprechend.
Gewinner nach Sprache
Hier ist eine Preisträgertabelle nach Sprachen, die ich ebenfalls auf dem Laufenden halten möchte. Ich habe alle Beiträge mit nicht negativer Punktzahl aufgenommen. Bitte korrigieren Sie mich, wenn ich hier einen Fehler gemacht habe.
- APL : 7 Bytes von @MorisZucca
- Bash + Coreutils : 29 Bytes von @DigitalTrauma
- C # : 103 Bytes von @ LegionMammal978
- C ++ : 219 Bytes von @ user9587
- CJam : 15 Bytes von @nutki
- GolfScript : 13 Bytes von @IlmariKaronen
- Haskell : 40 Bytes von @proudhaskeller
- J : 12 Bytes von @ ɐɔıɐɔuʇǝɥʇs
- Java : 107 Bytes von @Ypnypn
- JavaScript : 48 Bytes von @ edc65
- Mathematica : 38 Bytes von @ kukac67
- Perl : 32 Bytes von @nutki
- Pyth : 10 Bytes von @isaacg
- Python : 49 Bytes von @feersum
- R : 29 Bytes von @MickyT
- Ruby : 41 Bytes von @daniero
- Scala : 62 Bytes von @ChadRetz
- SQL : 83 Bytes von @MickyT
- TI-BASIC : 22 Bytes von @Timtech
CJam, 15 Bytes
Direkte Übersetzung meiner Perl-Lösung.
quelle
l~$W%{W):W>},,
- 14 Bytes{$W%ee::<1b}
(ee
wurde am 17.04.2015 hinzugefügt) und{$W%_,,.>1b}
(.
wurde am 21.02.2015 hinzugefügt).J (
13-12)Ziemlich ähnlich zu Randomra's Lösung. Demonstration:
quelle
#\<:
anstelle von, umi.@#<
ein Zeichen zu speichern.Mathematica,
44424038 BytesAnonyme Funktion:
Führen Sie es aus, indem Sie die Eingabe wie folgt bis zum Ende anheften:
quelle
#>i++
. Ich habe noch einige Fälle getestet. (Und danke für all die Vorschläge!)SQL,
819483Bei einer Tabelle (I) von Werten (V) gibt die folgende Abfrage h zurück. Getestet in PostgreSQL und funktioniert auch in SQL Server. Bearbeiten Geben Sie 0 anstelle von NULL zurück. Besser gemacht mit einem COUNT, danke @nutki
SQLFiddle- Beispiel
Im Wesentlichen werden die Zeilen in absteigender Reihenfolge der Werte nummeriert. Dann wird die maximale Zeilennummer zurückgegeben, wobei die Zeilennummer größer als der Wert ist.
quelle
COUNT(R)
anstelle vonCOALESCE(MAX(R),0)
eine kürzere Lösung für das NULL-Problem verwenden.R
393529Wenn ein Vektor von ganzen Zahlen in i gegeben ist und die Logik einer umgekehrten Sortierung verwendet wird, wird die
Längedes Vektors zurückgegeben, wobei die Elementnummer kleiner als s ist. Danke an @plannapus für den netten Tipp.quelle
s=sort(i);sum(s>=length(s):1)
CJam, 23 Bytes
Dies nimmt die Liste als Array auf STDIN, wie
Teste es hier.
Damit können Sie alle Testfälle ausführen:
Erläuterung
Die Logik ist ein bisschen rückwärts, hat aber ein paar Bytes gespart. Grundsätzlich wird der Block zum Sortieren von Rückgaben
0
für gültige Kandidaten und1
ansonsten übergeben. Die gültigen Kandidaten stehen also im sortierten Array an erster Stelle. Und da die Sortierung stabil ist und wir mit einer Liste von N bis 1 beginnen, gibt dies das größte gültige h zurück.quelle
Perl 5: 32 (30 + 2 für
-pa
)Übernimmt eine durch Leerzeichen getrennte Eingabe in STDIN:
quelle
sort{$b-$a}
spart 2 weiterePython (63)
Grundsätzlich ein direkter Port meiner J-Lösung. Offensichtlich viel länger, wie man sich vorstellen kann.
quelle
enumerate
.Haskell, 40
Dadurch wird nach der ersten Zahl gesucht, die nicht zum Schema passt, und der Vorgänger wird zurückgegeben.
quelle
until
: Online ausprobieren!Ruby
4441Rekursive, mehr oder weniger gleiche Strategie wie die Python-Lösung von xnor:
Ruby 52
Nicht rekursiv:
"Stabby" Lambda / anonyme Funktionen erfordern Ruby 1.9 oder neuer. Rufen Sie mit zB
f[[22,33,1,2,4]]
quelle
Bash + Coreutils, 29
Eingabe von stdin als durch Zeilenumbrüche getrennte Liste.
sort
die ganzen Zahlen in absteigender Reihenfolgenl
Stellt jeder Zeile eine 1-basierte Zeilennummer voran, wobei die Zeilennummer und der Rest der Zeile durch ein Größer-als-Zeichen getrennt werden>
bc
. Ganzzahlen, die kleiner als ihre Zeilennummer sind, ergeben 0. Sonst 1.grep
zählt die Anzahl von0
s, dh die Anzahl von ganzen Zahlen größer oder gleichh
Beispiel
quelle
JavaScript (ES6) 48
Rekursive Lösung.
Test in der FireFox / FireBug-Konsole
Ausgabe
quelle
f=(l,h=0)=>l.map(v=>x+=v>h,x=0)&&x>h?f(l,h+1):h
. Allerdings wäre Ihre Lösung 47 Bytes auch , wenn Sie nur die Änderungh=-1
zuh=0
.Java 8, 116 Bytes.
Volle Klasse:
Funktion:
quelle
APL, 12 Zeichen
(+/⊢≥⍒)⊂∘⍒⌷⊢
quelle
C ++
815219 von (wc -c main.cpp)Okay, hier ist der schlechteste Code, den ich je geschrieben habe! :)
quelle
Gelee, 6 Bytes
Erläuterung:
quelle
CJam, 22 Bytes
Nimmt die Liste als Eingabe:
Ausgabe:
Probieren Sie es hier aus
quelle
GolfScript, 13 Bytes
Testen Sie diesen Code online. 1
Übernimmt die Eingabe als Array auf dem Stapel. Verwendet denselben Algorithmus wie die Python-Lösung von feersum , wobei die Zahlen im Array durchlaufen werden und ein Zähler von 0 erhöht wird, bis er dem aktuellen Element des Arrays entspricht oder dieses überschreitet.
1) Der Online-GolfScript-Server scheint wieder zufällige Timeouts zu haben. Wenn das Programm eine Zeitüberschreitung aufweist, führen Sie es erneut aus.
quelle
TI-BASIC, 22 Bytes
ASCII-Darstellung:
Hex-Dump:
Ruft eine Liste als Eingabe ab. Überprüft ab Ans = 0, ob mindestens Ans + 1 der Nummern mindestens Ans + 1 sind. In diesem Fall wird Ans inkrementiert und die Schleife erneut ausgeführt. Wenn nicht, wird Ans ausgegeben.
quelle
JAGL Alpha 1.2 - 14
Zählt nicht, weil die C-Reverse-Array-Funktionalität nach der Frage hinzugefügt wurde, aber ich antworte trotzdem zum Spaß.
Nimmt an, dass das Array das erste Element auf dem Stapel ist und die Antwort oben auf dem Stapel platziert.
Zum Drucken fügen Sie einfach
P
am Ende ein Byte hinzu.Erläuterung:
quelle
J,
1511 Zeichen(Derzeit kürzeste J-Lösung.)
Vergleicht
<:
sortierte Listenelemente\:~
mit 1..n + 1#\
und zählt echte Vergleiche+/
.Testen der Ähnlichkeit mit anderen J-Lösungen in 100 zufälligen Testfällen:
quelle
Reng v.3.2, 43 Bytes
Probieren Sie es hier aus! Dieser Code kann in drei Teile unterteilt werden: anfänglich, rechnerisch und endgültig.
Initiale
Speichert
1
zux
, die Länge des Eingangsstapelk
zuy
und erhält alle Eingang (aïí
) , die dann (sortiert wird'
).1ø
geht zur nächsten Zeile, dh zum nächsten Teil.Computational
Reng hat keine eingebaute Ungleichung. Daher muss ein Algorithmus implementiert werden. Der kürzeste Algorithmus, den ich gefunden habe,
a < b
ist%:1,%1e
; das sieht so aus:Ich bin sicher , das hat es geklärt! Lassen Sie mich weiter erklären.
x % 1
, dh Modul mit 1, bildetx
auf ab(-1,1)
. Wir wissen , dass(a/b) % 1
ist ,a/b
wenna < b
. Somit ist dieser Ausdruck gleicha < b
.Dies funktioniert jedoch aufgrund von Modulproblemen mit Null nicht ganz so gut. Also erhöhen wir zunächst jedes Mitglied des Stapels und des Zählers.
Nachdem wir den Ungleichungs-Booleschen Wert auf dem Stapel erhalten haben,
x+
addieren wir ihn zu x , belassen ihn jedoch für den Moment auf dem Stapel.y1-
dekrementierty
und?^
steigt iffy == 0
und wir gehen in die letzte Phase. Ansonsten setzen wiry-1
iny
und das Neuex
inx
.Finale
Dadurch wird das Residuum
y-1
aus dem Stapel entfernt, das Ergebnis dekrementiert, ausgegeben und das Programm beendet.quelle
05AB1E , 5 Bytes
Probieren Sie es online! oder als Test Suite
Erläuterung
quelle
Mathematica, 57 Bytes
Dies ist eine anonyme Funktion, die eine Liste erstellt und eine Ganzzahl wie folgt zurückgibt
Verwenden Sie dies, um alle Testfälle zu überprüfen:
quelle
C # 103
Anonyme Funktion.
Eingerückt:
quelle
Scala, 62
quelle