Jak wszyscy wiemy, meta jest przepełnione ze skargami o zabicie kodu golfa między językami (tak, każde słowo jest link indywidualne, a te mogą być tylko wierzchołkiem góry lodowej).
Mając tak dużo zazdrości wobec tych, którzy rzeczywiście próbowali przejrzeć dokumentację Pyth, pomyślałem, że byłoby miło mieć trochę bardziej konstruktywnego wyzwania, jakim jest strona internetowa specjalizująca się w wyzwaniach kodu.
Wyzwanie jest raczej proste. Jako dane wejściowe mamy nazwę języka i liczbę bajtów . Możesz je traktować jako dane wejściowe funkcji stdinlub domyślną metodę wprowadzania w swoich językach.
Jako wynik mamy poprawioną liczbę bajtów , tj. Twój wynik z zastosowanym handicapem. Odpowiednio, wyjście powinno być wyjściem funkcji stdoutlub domyślną metodą wyjścia twojego języka. Dane wyjściowe zostaną zaokrąglone do liczb całkowitych, ponieważ uwielbiamy tiebreakers.
Korzystając z najbardziej brzydkiego, zhakowanego zapytania ( link - nie krępuj się go wyczyścić), udało mi się stworzyć zestaw danych (zip z .xslx, .ods i .csv), który zawiera migawkę wszystkich odpowiedzi na pytania związane z golfem . Można użyć tego pliku (a zakładamy, że będzie dostępny do programu, na przykład, jest w tym samym folderze) lub przekonwertować ten plik na inny format konwencjonalnej ( .xls, .mat, .savitd - ale może zawierać tylko oryginalne dane!). Nazwa powinna pozostać QueryResults.extz extrozszerzeniem wyboru.
Teraz szczegóły. Dla każdego języka istnieją parametry Boilerplate Bi Verbosity V. Razem można je wykorzystać do stworzenia liniowego modelu języka. Niech nbędzie rzeczywistą liczbą bajtów i cbędzie poprawionym wynikiem. Korzystając z prostego modelu n=Vc+B, otrzymujemy skorygowany wynik:
n-B
c = ---
V
Dość proste, prawda? Teraz do ustalenia Vi B. Jak można się spodziewać, przeprowadzimy regresję liniową, a dokładniej regresję liniową ważoną metodą najmniejszych kwadratów. Nie zamierzam wyjaśniać szczegółów na ten temat - jeśli nie jesteś pewien, jak to zrobić, Wikipedia jest twoim przyjacielem , a jeśli masz szczęście, dokumentacją Twojego języka.
Dane będą następujące. Każdy punkt danych będzie liczbą bajtów ni średnią liczbą bajtów pytania c. Aby uwzględnić głosy, punkty będą ważone według liczby głosów plus jeden (w celu uwzględnienia 0 głosów), nazwijmy to v. Odpowiedzi negatywne powinny zostać odrzucone. Mówiąc najprościej, odpowiedź z 1 głosem powinna liczyć się tak samo jak dwie odpowiedzi z 0 głosem.
Dane te są następnie dopasowywane do wyżej wspomnianego modelu n=Vc+Bprzy użyciu ważonej regresji liniowej.
Na przykład , biorąc pod uwagę dane dla danego języka
n1=20, c1=8.2, v1=1
n2=25, c2=10.3, v2=2
n3=15, c3=5.7, v3=5
Teraz tworzymy odpowiednie macierze i wektory A, ya Wwraz z naszymi parametrami w wektorze
[1 c1] [n1] [1 0 0] x=[B]
A=[1 c2] y=[n2] W=[0 2 0], [V]
[1 c3] [n3] [0 0 5]
rozwiązujemy równanie macierzowe (z 'oznaczeniem transpozycji)
A'WAx=A'Wy
dla x(i w konsekwencji otrzymujemy nasz Bi Vparametr).
Twój wynik będzie wynikiem twojego programu, jeśli podasz własną nazwę języka i liczbę bajtów. Tak, tym razem nawet użytkownicy Java i C ++ mogą wygrać!
UWAGA: Zapytanie generuje zestaw danych z wielu wierszy z powodu nieprawidłowych osób korzystających z „cool” i formatowaniem ludzi nagłówek znakowaniu ich kod prowokacji pytania jak code-golf . Pobrane przeze mnie pliki usunęły większość wartości odstających. NIE używaj pliku CSV dostarczonego z zapytaniem.
Miłego kodowania!
C++ <s>6 bytes</s>. Poza tym nigdy wcześniej nie korzystałem z T-SQL i już jestem pod wrażeniem, że udało mi się wyodrębnić bajt.
