Wprowadzenie
Ta strona szybko buduje ogromny zbiór danych fragmentów kodu, więc zróbmy coś z tym!
Oto plik danych . Zawiera 9 066 unikalnych par język + fragment kodu dla 113 języków, wszystkie pobrane z tej witryny. Format jest rozdzielony tabulatorami (język-TAB-urywek), wszystkie znaki nowego wiersza we urywkach są zastąpione <LF>
, a wszystkie tabulacje zastąpione 4 spacjami. Istnieje co najmniej 5 fragmentów dla każdego języka.
[aktualizacja: Wprowadziłem niewielką zmianę w pliku danych, aby scalić niektóre wersje Pythona i RegExp, które wcześniej mi brakowały - powyższy link został zaktualizowany]
Wyzwanie
Napisz program lub funkcję, która pobiera fragment kodu i wyświetla język, w którym jest napisany (szczegóły poniżej). Całkowity rozmiar źródła + wszelkie wymagane dane muszą wynosić 300 bajtów lub mniej, a program musi wyświetlać poprawny język, jeśli otrzyma własny kod źródłowy. Wygrywa najwyższa dokładność (najbardziej poprawne odpowiedzi w powyższym zestawie danych).
Zasady
- Całkowity rozmiar kodu źródłowego, zasobów i wymaganych flag kompilacji / środowiska wykonawczego nie może przekraczać 300 bajtów.
- Twoja odpowiedź zostanie przetestowana w oparciu o powyższy zestaw danych; otrzyma jedną z wartości „Snippet” jako dane wejściowe, a jego wyniki zostaną porównane z „poprawnymi” danymi wyjściowymi zgodnie z zestawem danych. Zostanie to powtórzone dla wszystkich wpisów w zbiorze danych, a ostateczna liczba poprawnych odpowiedzi to Twój wynik.
- Możesz wybrać kodowanie wejściowe - zakładam UTF-8, więc jeśli potrzebujesz innego kodowania, podaj je w swojej odpowiedzi.
- Nie musisz używać
<LF>
zamiennika dla nowych linii; jeśli twój wpis spodziewa się otrzymywać nowe wiersze jako dosłowne nowe znaki (znak 10), określ to w swojej odpowiedzi. - Wpis musi zawierać język, w którym według niego jest wpisany fragment kodu. Aby uniknąć konieczności kompresji wielu ciągów językowych, pozwolę na odwzorowania (jeśli chcesz wypisać 3 dla „Java”, to w porządku); zwróć uwagę na mapowania w swojej odpowiedzi.
- Możesz mieć tylko 1 mapowanie wyjściowe dla każdego języka (tzn. Jeśli 3 oznacza „Java”, nie możesz również mieć 4 oznaczenia „Java”).
- Po otrzymaniu własnego kodu źródłowego twój program musi uzyskać poprawną odpowiedź (musi wypisać język, w którym jest napisany).
- Nie musisz obsługiwać wszystkich języków w zbiorze danych i możesz wesprzeć dodatkowe języki, jeśli chcesz (np. Jeśli twój wpis nie jest w jednym z języków w zbiorze danych).
- Twój program musi być deterministyczny (dwukrotne podanie tego samego sygnału wejściowego musi dać ten sam wynik).
Łamanie krawatów
- Decyzje dotyczące remisów będą redukowane przez zestaw danych do momentu wygrania jednego wpisu. Zestaw danych zostanie zmniejszony przez usunięcie wszystkich fragmentów dla najpopularniejszego języka (tzn. Powiązania są przerywane przez dokładność w rzadszych językach). Na przykład, jeśli A i B uzyskają 70% wyniku w pełnym zbiorze danych, wszystkie fragmenty Pythona zostaną usunięte. Jeśli oba A i B zdobędą teraz 60%, CJam zostanie usunięty. Jeśli A uzyska teraz 50%, a B 55%, B jest zwycięzcą.
- Jeśli zostanie osiągnięta 100% dokładność, decyzje o powiązaniach zostaną ustalone na podstawie drugiego (ślepego) zestawu danych zawierającego więcej próbek dla tych samych języków.
Przykład 1
Skrypt Pythona:
print("python")
Skrypt z powodzeniem tworzy „python”, gdy otrzymuje swój własny kod źródłowy, więc jest poprawny. W zbiorze danych wynik wynosi 1008/9066 = 11,1%
Przykład 2
Funkcja JavaScript:
function f(s){return /function/.test(s)?1:2}
Z mapowaniami 1 → javascript, 2 → python. Ponownie z powodzeniem produkuje 1 („javascript”) dla własnego źródła, a w zestawie danych osiąga wynik 1092/9066 = 12,0%
Skąd pochodzą dane?
Utworzyłem zapytanie SEDE, aby pobrać próbki z [golf-golfa] wyzwań na tej stronie. Z uzyskanych 10 000 odpowiedzi użyłem zhakowanego skryptu python, aby znaleźć kod i nazwę języka dla każdego z nich, a następnie odfiltrowałem dowolny język z mniej niż 5 przykładami. Dane nie są w 100% czyste (wiem, że zostały wyciągnięte niektóre fragmenty kodu), ale powinny być wystarczająco dobre.
Zainspirowany tym wyzwaniem z początku roku: kto to powiedział? Wybory prezydenckie w 2016 r
Również częściowo związany z tym, co to jest język?