Abkürzungen und Funktionen in Vorbereitung auf einen Programmierwettbewerb [geschlossen]

8

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.

  1. 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.

  2. Wo finde ich sin () -Funktionen für Grad-Eingabe, nicht Radiant?

  3. (optional) Gibt es eine algorithmenspezifische Aufgabenansicht oder Bibliotheken?

  4. 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:

  • bring kein Essen mit. Sie haben keine Zeit zu essen, und danach gibt es ein reichhaltiges Buffet
  • Zeit ist der limitierende Faktor!
  • Wenn Sie R nicht für den Lebensunterhalt programmieren, verwenden Sie nicht R
  • Suche nach Wettbewerben, bei denen mehr Zeit zur Verfügung steht (mindestens 3-4 Stunden!)
  • Alles in allem ist das Konzept des Wettbewerbs hervorragend! Sowohl für die Teilnehmer als auch für die Sponsoren.

Vielen Dank an die Hilfe von 'Iterator' für seinen Beitrag !!

    
mrsteve 21.10.2011, 00:13
quelle

3 Antworten

24

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:

  1. Installieren Sie RStudio oder möglicherweise Revolution Analytics R, je nachdem, welche Schnittstelle für Sie besser geeignet erscheint. Beide sind gut. Ersteres hat eine sehr glatte GUI, letzteres hat eine intensivere Schnittstelle mit mehr Möglichkeiten zur Verwaltung von Code. Beide haben einige nette Eigenschaften gegenüber der "Community" R bezüglich der Fähigkeit, Informationen nachzuschlagen und schnell in den Hilfebibliotheken zu navigieren.
  2. Machen Sie sich mit 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() .
  3. Verwenden Sie die sos -Bibliothek und den Master findFn .
  4. Sehen Sie sich die Aufgabenansichten von CRAN an - stellen Sie sicher, dass Sie etwas über die Werkzeuge für High Performance Computing wissen (und wenn es damit zusammenhängt) und die Werkzeuge für die Optimierung - es ist ziemlich üblich, eine Art Solver zu verwenden Es gibt eine Aufgabenansicht für dieses .
  5. Wenn Ihr Code während des Prototyping oder der Konkurrenz langsam läuft, müssen Sie 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.)
  6. Auf Stack Overflow: Durchsuchen JD Longs Fragen - viel von dem, was Sie entdecken werden, dass Sie nicht wissen werden wurden von ihm gefragt, bevor Sie dachten, es zu fragen. Und da ist schon eine Antwort.
  7. Erstellen Sie eine Reihe kleiner Codevorlagen für sich selbst. Master-Funktionen, so dass Sie diese nicht in Eile lernen müssen. Erfahren Sie, wie Sie mit debug() und browser() .
  8. debuggen und diese durchgehen
  9. Wenn Sie Dinge zählen müssen, lernen Sie, wie Sie das 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)
  10. Wenn Sie Dinge grafisch darstellen müssen, erstellen Sie einige grundlegende Beispiel-Plots mit 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 ).
  11. Stellen Sie sicher, dass Sie wissen, wie Sie Listen, Datenrahmen und Matrizen verwenden, einschließlich Subskribierung, Suchen von Einträgen basierend auf (Zeilen-, Spalten-) Indizes. (Stellen Sie sicher, dass Sie plyr zum Transformieren und Bearbeiten einiger dieser Objekte untersuchen.)
  12. Machen Sie sich mit data.table() vertraut - es ist außergewöhnlich effizient für viele Dinge, die Sie mit Datenrahmen und Matrizen machen könnten.
  13. Wenn Sie symbolische Mathematik brauchen, sollten Sie die Pakete dafür kennen oder ein anderes eigenständiges Werkzeug für symbolische Mathematik verwenden. Ryacas ist ein Paket, das nützlich erscheint.
  14. Holen Sie sich das PDF des R in Kürze, damit Sie schnell nach nützlichen Methoden suchen können. Sonst, nimm das Buch selbst. Verschiedene andere Bücher, wie Venables & amp; Ripley, das R-Kochbuch und andere können je nach Ihrer Erfahrung nützlich sein.
  15. Wenn Sie bereits einen guten Editor (z. B. emacs) oder eine IDE (z. B. Eclipse) beherrschen, bleiben Sie dabei und suchen Sie nach Bindungen zu R. Andernfalls können Sie sofort mit Notepad ++ beginnen. Die Blockauswahl ist eine sehr nützliche Eigenschaft in einem Editor. Die Möglichkeit, eine gesamte Verzeichnishierarchie von Codebeispielen durchsuchen zu können, ist eine weitere nützliche Funktion.
  16. Wenn Sie etwas mit Datenbankdaten machen müssen, möchten Sie vielleicht RSQLite und sqldf wissen, obwohl diese für einen Mathematikwettbewerb nicht relevant sind.
  17. Öffnen Sie eine Reihe von R-Instanzen, damit Sie Dinge ausprobieren können. :) [Das ist eigentlich ernst: Wenn mehrere Instanzen ausgeführt werden, können Sie Latenzen vermeiden, die mit dem sequentiellen Ausprobieren, dem Warten auf Ergebnisse und dem Debuggen der Ergebnisse verbunden sind.]
Iterator 21.10.2011, 02:31
quelle
8

Für (1) können Sie etwas wie

tun %Vor%

Hier können Sie schreiben, zB g <- f(x, y, body=x+y) , aber ich bin mir nicht sicher, wie weit Sie das bringt.

    
Hong Ooi 21.10.2011 02:31
quelle
5

Für (2) könnten Sie einfach tun:

%Vor%     
Karl 21.10.2011 01:59
quelle

Tags und Links