W ostatnią sobotę wziąłem z kolegą udział w hackathonie eth1 organizowanym przez Jane Street. Można było pisać w dowolnym języku, więc wybrałem C#. Program musiał działać na maszynie wirtualnej z Ubuntu postawionej w chmurze Amazona, którą dostarczał organizator. Więc musiałem zainstalować tam Mono. Skoro jestem na Ubuntu to odpaliłem
sudo apt-get install mono-complete
i można działać. Pisałem kod lokalnie w Visual Studio a przesyłałem przez gita.
Zadanie polegało na przeczytaniu specyfikacji komunikacji z serwerem, na którym była wirtualna giełda, oraz napisanie ‚bota’, który będzie kupował i sprzedawał akcje aby zyskać jak na najwięcej pieniędzy. Gra była podzielona na 5-minutowe rundy. W każdej turze akcje miały trochę inną wartość, losową, więc program powinien w każdej rundzie zaczynać niejako od zera.
Można było popisać się jakimś wytrawnym algorytmem, który analizując stan giełdy oraz historię transakcji oblicza za jaką cenę najlepiej będzie sprzedać/kupić akcje danej firmy. My natomiast pomysłu nie mieliśmy. Najpierw zrobiliśmy bardzo prosty algorytm, który kupował akcje firmy o stałej wartości za 2$ mniej i sprzedawał za 2$ więcej, zarabiając nam 4$ na akcji, obracając 20 akcjami na 5 sekund. Dzięki temu przeszliśmy na 12 miejsce w rankingu. Ale chcieliśmy coś więcej i napisaliśmy algorytm, który jak się potem okazało był podany jako przykład, gdzie sprawdzaliśmy najlepszą cenę kupna i sprzedaży i składaliśmy ofertę o 1 większą/mniejszą. I tak po paru godzinach uzyskaliśmy 4 miejsce
Przy okazji miałem szansę napisać bardzo brzydki kod. Życie nas uczy, że na szybko i byle jak można zrobić tylko jednorazowe rozwiązanie. Gdybym chciał kiedyś do mojego kodu wrócić, musiałbym poświęcić trochę czasu na refaktoryzację.
A i byłbym zapomniał, chciałem ponarzekać na Ubuntu. Niby nie mam nic przeciwko temu systemowi ale trzymają w oficjalnym repozytorium Mono w wersji 3.x. W trakcie działania naszego programu co chwila wyrzucało wyjątki problemów z wątkami, była też masa SIGSEVów. Próbowałem zainstalować nowszą wersję Mono, ale nie umiejętnie (do tego stopnia, że apt-get nie chciał nic instalować). Następnym razem dokładnie przygotuję środowisko zanim zacznę go używać.