Wyniki - 19 lipca 2014 r
Obecny król wzgórza jest najemnikiem użytkownika Fabiglera ! Nadsyłaj wpisy i zrzuć go z tronu!
Kliknij tutaj, aby wyświetlić tabelę wyników.
Uwzględniono programy przesłane 19 lipca 2014 r. Lub wcześniej. Wszystkie pozostałe zgłoszenia zostaną uwzględnione w przyszłych testach. Nowe wyniki powinny zostać opublikowane około 9 sierpnia, dzięki czemu zyskasz dużo czasu.
Ilustrowane przez Chrisa Rainbolta, mojego brata i świeżego absolwenta Savannah College of Art and Design
Wprowadzenie
Aniołowie i demony walczą i, jak zwykle, wykorzystują ziemię jako swoje pole bitwy. Ludzie utknęli w środku i zostali zmuszeni do poparcia stron. Nieznana neutralna siła nagradza tych, którzy konsekwentnie walczą o przegraną stronę.
Gra
W każdej próbie zostaniesz pseudolosowo sparowany, a następnie przetasujesz od 20 do 30 innych zgłoszeń. Każda próba będzie się składać z 1000 rund. W każdej rundzie otrzymujesz dane wejściowe i oczekuje się, że przyniosą wynik. Twoje wyniki zostaną zarejestrowane i ocenione. Ten proces zostanie powtórzony 1000 razy.
Wejście
Otrzymasz pojedynczy argument, który reprezentuje poprzednie głosy każdego gracza. Rundy są rozdzielane przecinkami. 0
Oznacza gracza, który po stronie zła, które okrągłe. A 1
reprezentuje gracza, który opowiedział się po stronie Dobra. W trakcie okresu próbnego gracze będą zawsze w tej samej kolejności. Twój głos zostanie uwzględniony, ale nie zostanie wyraźnie określony. Na przykład:
101 100,100
W tym przykładzie zakończono trzy rundy i trzech graczy bierze udział w rywalizacji. Gracz jednostronny zawsze z Good. Gracz drugi zawsze był po stronie Zła. Gracz trzeci zamienił z Dobra w rundzie 1 na Zło w rundzie 2 i 3. Jednym z tych graczy byłeś ty.
Wynik
Zgłoszenia Java
- Zwróć ciąg
good
jeśli chcesz stanąć po stronie Dobra. - Zwróć ciąg,
evil
jeśli chcesz stanąć po stronie Zła.
Zgłoszenia inne niż Java
- Wyjście łańcucha
good
na standardowe wyjście, jeśli chcesz stanąć po stronie Dobra. - Podaj ciąg
evil
na standardowe wyjście, jeśli chcesz stanąć po stronie Zła.
Jeśli Twój program wyświetli lub zwróci cokolwiek innego, zgłosi wyjątek, nie skompiluje się lub wyda cokolwiek dłużej na tej konkretnej maszynie , zostanie zdyskwalifikowany.
Punktacja
Wyniki zostaną opublikowane w arkuszu kalkulacyjnym Dokumentów Google w celu łatwego przeglądania, gdy tylko będę mógł skompilować wszystkie bieżące wpisy. Nie martw się - będę testować tak długo, jak wy będziecie przesyłać programy!
- Otrzymujesz 3 punkty za bocznicę z większością podczas rundy.
- Otrzymujesz n - 1 punktów za stronnictwo z mniejszością podczas rundy, gdzie n jest liczbą kolejnych stron, które opowiedziałeś się po stronie mniejszości.
Twój wynik będzie medianą z 5 prób. Każda próba składa się z 1000 rund.
Produkty
Zgłoszenia inne niż Java
Musisz przesłać unikalny tytuł, program i ciąg wiersza poleceń systemu Windows, który uruchomi Twój program. Pamiętaj, że do tego ciągu można dołączyć argument. Na przykład:
python Angel.py
- Zauważ, że ten nie ma argumentów. To jest runda pierwsza! Przygotuj się na to.
python Angel.py 11011,00101,11101,11111,00001,11001,11001
Zgłoszenia Java
Musisz przesłać unikalny tytuł i klasę Java, która rozszerza abstrakcyjną klasę Human zapisaną poniżej.
public abstract class Human {
public abstract String takeSides(String history) throws Exception;
}
Testowanie
Jeśli chcesz przetestować własne zgłoszenie, postępuj zgodnie z instrukcjami tutaj .
Dodatkowe uwagi
Możesz przesłać tyle różnych zgłoszeń, ile chcesz. Zgłoszenia, które wydają się być w zmowie, zostaną zdyskwalifikowane. Autor tego wyzwania będzie jedynym sędzią w tej sprawie.
Nowa instancja twojego programu lub klasy Java będzie tworzona za każdym razem, gdy zostanie wywołana. Możesz zachować informacje, pisząc do pliku. Nie możesz modyfikować struktury ani zachowania czegokolwiek poza własną klasą.
Gracze zostaną potasowani przed rozpoczęciem okresu próbnego. Demon i Anioł będą uczestniczyć w każdej próbie. Jeśli liczba graczy będzie parzysta, dołączy do nich Petyr Baelish. Demon walczy ze złem, anioł na dobre, a Petyr Baelish wybiera pseudolosową stronę.
źródło
Odpowiedzi:
Najemnik
Zawsze po stronie tego, który zapłacił najwięcej pieniędzy w ostatniej rundzie.
Biorąc pod uwagę, że dobrzy ludzie zarabiają statystycznie więcej.
źródło
Hipster, Ruby
Po prostu idzie w parze z mniejszością z ostatniej rundy, tylko dlatego, że wszystko inne jest w głównym nurcie.
Biegnij jak
źródło
Petyr Baelish
Nigdy nie wiadomo, po czyjej stronie stoi Petyr Baelish.
Ten wpis zostanie uwzględniony tylko wtedy, gdy liczba graczy będzie parzysta. To gwarantuje, że zawsze będzie większość.
źródło
C ++, The Meta Scientist
Ten działa zasadniczo tak samo jak Naukowiec, ale nie działa na rundach jako całości, ale na pojedynczych graczach. Próbuje przyporządkować falę (lub stałą funkcję) każdemu graczowi osobno i przewiduje ich ruch w następnej rundzie. Z wynikowej prognozy rundy The Meta Scientist wybiera, która strona wygląda jak posiadanie większości.
Jeśli chcesz włączyć instrukcje debugowania, zmień odczyt linii
#if 0
na#if 1
.Połącz z
g++ -O3 -std=c++0x -o MetaScientist MetaScientist.cpp
(nie potrzebujesz ostrzeżeń, więc nie-Wall
) i uruchom zMetaScientist.exe
(prawdopodobnie włączając argument oczywiście). Jeśli naprawdę ładnie pytasz, mogę dostarczyć plik wykonywalny dla systemu Windows.EDYCJA: Najwyraźniej poprzedniej wersji zabrakło czasu około 600 rund do gry. To nie powinno tego robić. Zużycie czasu jest kontrolowane przez
#define WINDOW (...)
linię, więcej jest wolniejsze, ale spogląda wstecz.źródło
Anioł
Najczystszy gracz ze wszystkich.
Program
Komenda
źródło
Artemis Fowl
W Książce 7, The Atlantis Complex , Artemis Fowl zachorował na chorobę psychiczną (zwaną kompleksem Atlantis), która zmusiła go do zrobienia wszystkiego w wielokrotności 5 (mówienie, działania itp.). Kiedy nie mógł tego zrobić kilkukrotnie, wpadł w panikę. Zasadniczo robię to: sprawdzam, czy dobro lub zło (celowe nastawienie) jest podzielne przez 5, jeśli nie, to panikuję i widzę, który był większy i biegnę z tym lub panikuję jeszcze bardziej i losowo wybieram.
źródło
break;
w swoimswitch
.Disparnumerofobic
Dziwne liczby są przerażające.
źródło
Linus, Ruby
Stara się wprowadzać analityków w błąd, zawsze przełamując wzorzec .
Zapisz jako
linus.rb
i biegnij zruby linus.rb
źródło
BackPacker
Określa gracza, który jak dotąd najbardziej wybrał pasującą mniejszość i wybiera swój ostatni głos.
The CrowdFollower
Określa gracza, który jak dotąd najbardziej wybrał pasującą większość i wybiera swój ostatni głos.
źródło
goWithMajority = true
i jeden tam, gdzie jestfalse
. Czy to w porządku, czy muszę do tego dodać drugiego BackPackera?Wróżka
To wciąż praca w toku. Jeszcze tego nie testowałem. Chciałem tylko sprawdzić, czy OP uważa, że łamie zasady, czy nie.
Chodzi o to, aby symulować następną rundę, wykonując kilka razy wszystkich pozostałych uczestników, aby uzyskać prawdopodobieństwo wyniku i odpowiednio postępować.
źródło
C ++, naukowiec
Ten próbuje, z historią tego, co większość wybrała na rundę
wave
(majority()
daje większości wybór na rundę), dopasować falę do danych, długości fali2*period
i fazyphase
. Tak więc dane0,1,1,1,0,1,0,1,1,1,0,0,0,1,0
selectperiod=3, phase=5
(maxat=={3,5}
): jego wyniki stają się9 3 11 5 5 3 5 7 9 7 7 7 7 7 7
. Zapętla się we wszystkich możliwych okresach, a jeśli dla tego okresu wynik jest wyższy niż dla bieżącego maksimum, zapamiętuje,{period,phase}
dla którego to miało miejsce.Następnie ekstrapoluje znalezioną falę do następnej rundy i przyjmuje przewidywaną większość.
Połącz z
g++ -O3 -std=c++0x -o Scientist Scientist.cpp
(nie potrzebujesz ostrzeżeń, więc nie-Wall
) i uruchom zScientist.exe
(prawdopodobnie włączając argument oczywiście). Jeśli naprawdę ładnie pytasz, mogę dostarczyć plik wykonywalny dla systemu Windows.Aha, i nie waż się mieszać z formatem wejściowym. W przeciwnym razie zrobi dziwne rzeczy.
EDYCJA: Najwyraźniej poprzedniej wersji zabrakło czasu około 600 rund do gry. To nie powinno tego robić. Zużycie czasu jest kontrolowane przez
#define WINDOW (...)
linię, więcej jest wolniejsze, ale spogląda wstecz.źródło
Code Runner
Aby uczynić rzeczy interesującymi, stworzyłem skrypt do automatycznego pobierania kodu z każdej opublikowanej odpowiedzi, kompilowania go w razie potrzeby, a następnie uruchamiania wszystkich rozwiązań zgodnie z regułami. W ten sposób ludzie mogą sprawdzić, jak sobie radzą. Po prostu zapisz ten skrypt w run_all.py (wymaga BeautifulSoup), a następnie:
Kilka spraw:
def submission_type(lang)
.CPPSubmission
). Typ języka jest pobierany ze znacznika meta kodu< !-- language: lang-java -- >
, więc pamiętaj o dodaniu go, jeśli chcesz, aby kod był uruchamiany (Usuń dodatkowe spacje przed i po <>). AKTUALIZACJA : Istnieje teraz bardzo podstawowe wnioskowanie, aby spróbować wykryć język, jeśli nie jest zdefiniowany.blacklist.text
i automatycznie usunięty z przyszłych prób. Jeśli naprawisz kod, po prostu usuń wpis z czarnej listy i uruchom ponownieget
,Obecnie obsługiwane języki:
Bez zbędnych ceregieli:
źródło
Piękny umysł, Ruby
Podejmuje decyzję w oparciu o wzorce o wątpliwym znaczeniu w bitowej reprezentacji ostatniej rundy
Biegnij jak
źródło
Piustitious, Lua
Przesądny program, który wierzy w Znaki i Cuda.
uruchom z:
a następnie wejście.
źródło
Winchesters
Sam i Dean są dobrzy (przez większość czasu).
źródło
9:1
odpowiedni stosunek? Może powinniśmy przeprowadzić eksplorację danych i uzyskać bardziej precyzyjny stosunek?9:1
wydaje mi się to w porządku;)Statystyk
źródło
Math.ceil(Math.random()-Math.random())
ciebie możesz również zrobić tylkoMath.round(Math.random())
.R, nieco bayesowski bot
Użyj tabeli częstotliwości dla każdego użytkownika jako wcześniejszego prawdopodobieństwa wyników innych użytkowników.
Wywoływany za pomocą
Rscript BayesianBot.R
następuje wejście.Edycja : Aby wyjaśnić, co to robi, oto krok po kroku z przykładowym wejściem:
Następnie linia rozpoczynająca się od
result<-
, dla każdego gracza, wybiera losowo 0 lub 1, używając tego ostatniego stołu jako wag (tj. Dla gracza 1 prawdopodobieństwo wybrania 0 wynosi 2/7, wybrania 1 5/7 itd.). Wybiera jeden wynik dla każdego gracza / kolumny i ostatecznie zwraca liczbę, która zakończyła się najczęściej.źródło
szwajcarski
Zawsze zachowuje neutralność. Skazany na to, że nigdy nie wygra.
źródło
HAL 9000
Edycja: może jest to bardziej odpowiednie dla HAL 9000, ale bądź ostrożny! To jest bardzo złe. Zalecam
cd
opróżnienie katalogu przed jego uruchomieniem.Nie tak oczywiste wywołanie:
W M $
W * nix
źródło
Wola większości
Zapisz jako
WotM.py
, uruchom jakopython3 WotM.py
z danymi wejściowymi.Prosty program, aby zobaczyć, jak to zrobi. Idzie z tym, co większość powiedziała ostatnio, albo losowo.
źródło
Alan Shearer
Powtarza to, co właśnie powiedziała osoba, obok której siedzi. Jeśli dana osoba się myli, przechodzi do następnej osoby i zamiast tego powtarza to, co mówi.
źródło
lastRound
zanim jeszcze ją zadeklarujesz. Ponadto dodałeś nawiasy do wszystkich,String.length
ale to nie jest funkcja. Czy uda ci się przesłać zgłoszenie do punktu, w którym zostanie ono skompilowane?lastRound.length
jest nadal dostępny (w pierwszym przypadku) przedlastRound
zadeklarowanym (w tym przypadku, jeśli jest inny). Spróbuj go skompilować (i być może uruchomić) przed przesłaniem go tutaj.Później jest zło, JavaScript ( node.js )
Mierzy czas między wykonaniami. Jeśli różnica czasu jest większa niż poprzednio, musi być zła. W przeciwnym razie dobrze.
Biegnij z:
node laterisevil.js
źródło
Wyszukiwarka wzorców, Python
Szuka powtarzającego się wzoru, a jeśli nie może go znaleźć, po prostu idzie z większością.
Biegnij z
źródło
Kamizelka
Kamizelka wierzy, że ze względu na innych dotychczasowych walczących większość po każdej rundzie zmienia się między dobrem a złem częściej, niż pozostaje po tej samej stronie. W ten sposób zaczyna pierwszą rundę od arbitralnego stronnictwa z dobrem, a następnie naprzemiennie co rundę, próbując częściej pozostać w drużynie wygranej lub przegranej.
Po napisaniu tego, zdałem sobie sprawę, że z powodu wpisów opartych na analizie statystycznej pęd spowodowałby, że większość zamieniłaby strony mniej, ponieważ ukończono więcej rund. Stąd leniwy kamizelka.
Leniwy kamizelka
Leniwy kamizelka zaczyna się jak kamizelka, ale gdy mija runda, staje się coraz bardziej leniwy, aby przejść na drugą stronę.
źródło
Biograf, Ruby
Moja próba prawie inteligentnego wejścia (właściwie inteligentna wymagałaby testowania w terenie). Napisane w Ruby, więc jest szansa, że będzie to zbyt wolne, ale na mojej maszynie i tak zajmuje to .11 sekund, aby obliczyć ostatnią rundę, gdy jest 40 losowych graczy, więc mam nadzieję, że zadziała wystarczająco dobrze.
zapisz jako
biographer.rb
, uruchom jakoruby biographer.rb
Chodzi o to, że dla każdego gracza, ocenia on szanse na wybranie „dobrego”, patrząc zarówno na własne wybory w ciągu ostatnich dziesięciu rund, jak i na ogólne wyniki, i znajdując w przeszłości przypadki, w których identyczne okoliczności (ich głosy + ogółem wyniki). Wybiera najdłuższy wygląd (do 10 rund), tak aby istniał jakikolwiek precedens, i używa go do stworzenia częstotliwości (dostosowanej zgodnie z prawem sukcesji Laplace'a, aby nigdy nie mieć 100% pewności co do nikogo).
Następnie przeprowadza symulacje i sprawdza, jak często Dobry wygrywa. Jeśli symulacje zakończyły się w większości w ten sam sposób, to prawdopodobnie dobrze się powiedzie, więc wybierze przewidywaną mniejszość. Jeśli nie jest pewny, wybiera przewidywaną większość.
źródło
Judasz
Judasz jest naprawdę dobrą osobą. Szkoda, że zdradzi dobrych facetów za kilka groszy.
źródło
,
OUThistory
, nawet bardziej tak Rusher ma zamiar podzielić się z gry w grupach.Fallacious Gambler (Python)
Jeśli jedna ze stron wygrała większość razy z rzędu, gracz zdaje sobie sprawę, że druga strona ma większą szansę na przewagę w następnej rundzie (prawda?) I to wpływa na jego głos. Dąży do mniejszości, ponieważ jeśli uda jej się wejść do mniejszości, prawdopodobnie uda jej się tam kilka razy (prawda?) I zdobędzie wiele punktów.
Stosowanie
W pierwszej rundzie:
a następnie:
źródło
Automat komórkowy
W tej grze używa się konwencjonalnych zasad gry Conwaya. Najpierw tworzona jest siatka 2D z poprzednich głosów. Następnie „świat” przesuwa się o jeden krok do przodu i obliczana jest łączna liczba pozostałych żywych komórek. Jeśli liczba ta jest większa niż połowa całkowitej liczby komórek, wybierana jest wartość „dobra”. W przeciwnym razie wybierane jest „zło”.
Proszę wybaczyć błędy, które zostały rozbite podczas mojej przerwy na lunch. ;)
źródło
Profesor Ridge
Mam nadzieję, że korzystanie z bibliotek jest dozwolone, nie mam ochoty robić tego bez jednego =)
Podstawową ideą jest trenowanie klasyfikatora regresji grzbietu dla każdego uczestnika w ostatnich rundach, wykorzystując 30 wyników przed każdą rundą jako cechy. Pierwotnie obejmowała ostatnią rundę wyników dla wszystkich graczy, aby przewidzieć wynik również dla każdego gracza, ale to było raczej zbliżone do czasu, gdy liczba uczestników będzie większa (powiedzmy 50 lub więcej).
Kompilować
Zapisz kod źródłowy w pliku o nazwie
ridge_professor.cc
, pobierz bibliotekę Eigen i rozpakuj znajdujący się w niej folder Eigen do tego samego folderu, co plik źródłowy. Połącz zg++ -I. -O3 -ffast-math -o ridge_professor ridge_professor.cc
.Biegać
wywołaj ridge_professor.exe i w razie potrzeby podaj argument.
Pytanie
Ponieważ nie mogę jeszcze skomentować, zapytam tutaj: czy ograniczenie wielkości argumentów w oknach nie uniemożliwia wywołania wynikowych plików binarnych z całą historią na kilkaset obrotów? Myślałem, że nie możesz mieć więcej niż ~ 9000 znaków w argumencie ...
źródło
Crowley
Ponieważ Winchesterowie są znacznie mniej interesujący bez tego faceta. On oczywiście popiera zło ... chyba że jest potrzebne, aby zająć się większym złem.
Patrzę na dwie ostatnie tury (do tej pory 0 przecinków i 1 przecinek) i jeśli obie pozwolą wygrać złu, głosuję dobrze. W przeciwnym razie głosuję na zło.
źródło