Ich nehme morgen an einem großen Programmierwettbewerb teil, bei dem ich R einsetze.
Zeit ist der Hauptfaktor (nur 7 Stunden für 7 Codeprobleme). Die Probleme sind sehr mathematisch.
Ich möchte "f" anstelle von "function" schreiben, wenn ich eine Funktion definiere. Das kann gemacht werden und ich hatte den Code dafür, aber ich habe es verloren und kann es nicht finden.
Wo finde ich sin () -Funktionen für Grad-Eingabe, nicht Radiant?
(optional) Gibt es eine algorithmenspezifische Aufgabenansicht oder Bibliotheken?
Irgendwelche Tipps für einen Programmierwettbewerb?
Ich habe den folgenden Spickzettel für den Wettbewerb vorbereitet: Ссылка
======== BEARBEITEN: ==========
Ich habe endlich Zeit, meine gelernten Lektionen aufzuschreiben.
Der Programmierwettbewerb hat sehr viel Spaß gemacht, aber leider habe ich nicht besonders gut abgeschnitten. Ich war in den Top 50%, aber mein Ziel war es, in den Top 25% zu sein.
Das Hauptproblem war, dass es sehr wenig Zeit zum Programmieren gab, nur 2 Stunden insgesamt. Aber ich musste die Problembeschreibungen lesen und brauchte auch etwas Zeit, um die Ergebnisse in das Webformular usw. einzufügen, so dass es eher wie 90 Minuten Programmieren aussah.
Hoffentlich hat der nächste Wettbewerb im Dezember eine verlängerte Zeit, wie 3-4 Stunden. Die Organisatoren sagten, dass dies vielleicht der Fall sein wird.
Außerdem gab es bei dem Wettbewerb keinen Internetzugang, und mein mobiler Empfang funktionierte nicht wirklich.
Die wichtigste Lektion für mich ist, dass Sie eine Sprache verwenden müssen, die Sie täglich verwenden, um eine echte Chance zu haben. Vor allem, wenn es nur etwa 90 Minuten Zeit zum Programmieren gibt. Da ich Haskell mehr als R in meiner täglichen Arbeit verwende, denke ich, dass R nicht die beste Wahl war. Während des Wettbewerbs habe ich die Definitionen der Haskel- und R-Funktionen gemischt und zu viele kleine Tippfehler gemacht, um schnell genug zu programmieren.
Das Beste am Wettbewerb war, dass es für die etwa 80 Teilnehmer insgesamt rund 20 000 Dollar Preisgeld gab. So erhielten die besten 25% der Teilnehmer 500 bis 1500 Dollar. Außerdem denke ich, dass die besten 15% direkt von einer der Sponsoren-IT-Firmen einen Job bekommen.
Es ist also eine Win-Win-Situation. Es macht Spaß, und Sie können ein Preisgeld bekommen. Außerdem sind die IT-Firmen mehr als glücklich, weil sie Zugang zu den Top-Programmierern haben.
Ich habe die Chance genutzt, mit IT-Entscheidungsträgern zu sprechen. Einer von ihnen war von einer größeren Bank. Ich schlug kühn vor, dass sie erwägen, für ihre Entwicklung zu Scala zu wechseln (Umstellung von Java). Und auch die Verwendung von R und Haskell in Betracht ziehen. Es hat Spaß gemacht und sie haben sogar gesagt, dass sie schon Scala gesehen haben!
Interessant war, dass einer meiner besten Freunde beim Wettbewerb sehr gut punktete. Er ist erst 19 Jahre alt, aber er war gut in den Top 20% und bekam 500 Dollar Preisgeld. Er schlug mich plus 6 meiner Colleges, die alle einen respektablen Computer-Abschluss haben. Mein Freund programmiert eher wie Hacker-Stil, aber er war sehr schnell.
Menschen in den Top 10 verwendet: 1) Java 2) C # und 3) C ++ (Keine andere Programmiersprache in den Top 10!). Die einzige andere Programmiersprache, die recht gut bewertet wurde, war Ruby, glaube ich.
Für den nächsten Wettbewerb wird die Programmiersprache der Wahl wahrscheinlich Haskell sein. Aus einem Grund ist es einfacher, 2 Teamkollegen für Haskell als für R-Programmierung zu finden. Und bis zu 3 Personen können ein Team bilden.
Mein ideales Szenario wäre ein sehr leichtgewichtiger Rahmen, in dem ich mehrere Programmiersprachen gleichzeitig für den Wettbewerb verwenden könnte. Auf diese Weise kann der Hauptcode in haskell geschrieben werden (in dem alle Teammitglieder programmieren können). Und einige spezifische Funktionen können in R programmiert werden oder in Mathematica oder sogar in einer anderen Programmiersprache (wie Python / Sage).
Das klingt ein bisschen übertrieben. Aber ich denke, es wäre sehr nützlich. Wie eine Funktion, die eine Matrix als Parameter hat und eine Matrix zurückgibt. Dann generiert diese Framework-Arbeit automatisch einen REST-fähigen Dienst aus dem R-Code, so dass ich die R-Funktion von einer beliebigen Programmiersprache aus aufrufen könnte. Die Matrix wird einfach als JSON-Daten (oder eine andere Serialisierung) weitergegeben. Okay, aber das ist nicht im Thema ...
Also endlich einige Lektionen als Bullet List gelernt:
Vielen Dank an die Hilfe von 'Iterator' für seinen Beitrag !!
Ich werde eine verwandte, aber andere Frage beantworten. Nichts für ungut, aber Ihre ursprünglichen Vorschläge scheinen für einen Programmierwettbewerb nicht sehr klug zu sein. Ein Großteil der Zeit, die in solchen Kontexten verbracht wird, besteht darin, eine Antwort zu entwickeln und zu debuggen (oder, besser, die Notwendigkeit zu vermeiden, zu debuggen).
Stattdessen werde ich diese Frage beantworten: "Was sind die wichtigsten Ressourcen in R, die für Rapid Prototyping nützlich sind, mit dem Fokus darauf, Ressourcen schnell zu finden, schnell debuggen zu können und Daten schnell untersuchen zu können? ? Wenn ich numerische Optimierungsmethoden und Algebra-Systeme verwenden möchte, was soll ich untersuchen? "
Hier sind meine Antworten:
example()
vertraut, identifizieren Sie, wo Vignetten und Tutorials zu finden sind (von den Seiten der Pakete auf CRAN) und werfen Sie einen kurzen Blick auf demo()
. sos
-Bibliothek und den Master findFn
. Rprof()
ausführen. Nimm das zuerst für eine Drehung. Sie können auch von der Verwendung des Pakets compiler
profitieren, wenn Ihr Code viel Iteration beinhaltet. Kurz gesagt: Sie möchten nicht auf dem Computer warten. Sie können sich auch foreach
und doSMP
oder doMC
ansehen, wenn Sie den Job parzellieren können verschiedene Kerne. Um die Ergebnisse zu aggregieren, machen Sie sich mit plyr
und Methoden wie ldply
sowie Standard *apply
-Funktionen wie lapply
und apply
vertraut; ein weiterer guter zu wissen ist rapply
. (Wenn Sie viel zu verarbeiten haben und es einige Zeit braucht, schauen Sie sich mclapply
oder das .parallel
Argument für die plyr
Funktionen an.) debug()
und browser()
. hash
-Paket verwenden (ähnlich zu Perl- und Python-Hashtabellen) und lernen, digest
für Schlüssel zu verwenden, die zu lang für hash
sind (siehe diese Frage für Referenzen) plot
oder ggplot2
zusammen mit hist
, boxplot
und einigen anderen. Wenn du ggplot2
noch nicht kennst, dann verschiebe es, aber du solltest dich damit vertraut machen. Wenn Sie viele Daten verwenden, sollten Sie wissen, dass Sie hexbin
kennen. Wenn Sie mit Daten interagieren müssen, lernen Sie iplots
und die interessanten Tools dort kennen, wie iplot
, ihist
und parallele Koordinatenplots ( ipcp
). plyr
zum Transformieren und Bearbeiten einiger dieser Objekte untersuchen.) data.table()
vertraut - es ist außergewöhnlich effizient für viele Dinge, die Sie mit Datenrahmen und Matrizen machen könnten. RSQLite
und sqldf
wissen, obwohl diese für einen Mathematikwettbewerb nicht relevant sind. Tags und Links r