To wyzwanie na szczycie wzgórza opiera się na teleturnieju Weakest Link . Dla tych, którzy nie znają tego programu, sedno tego wyzwania dotyczy tego, komu głosujesz :
- Jeśli inni gracze są mądrzejsi od ciebie, masz mniejsze szanse na zdobycie puli.
- Jeśli inni gracze są głupsi od ciebie, masz mniej puli do zdobycia.
Na początku każdej rundy, Pot zaczyna się od $ 0. Powstaje grupa 9 graczy, a każdy gracz otrzymuje unikalną inteligencję od 1 do 9.
Na początku każdej tury, Pot += Smartness
dla każdego gracza wciąż w rundzie. Następnie gracze głosują na gracza, którego chcą usunąć. Gracz z największą liczbą głosów zostanie usunięty. W przypadku remisu mądrzejszy gracz zostaje zachowany.
Gdy w rundzie zostają tylko 2 graczy, walczą oni w bitwie sprytu. Jest szansa na wygraną gracza Smartness/(Smartness+OpponentSmartness)
. Zwycięski gracz otrzymuje wtedy całą pulę.
Gracz, który otrzymał najwięcej pieniędzy na koniec gry, wygrywa.
Wejście wyjście
W każdej turze otrzymujesz aktualną listę przeciwników. Będziesz miał dostęp do swojej inteligencji i całej historii głosowania wszystkich graczy w rundzie dzięki funkcjom w klasie Gracza.
Jako wynik musisz zwrócić jedną liczbę całkowitą, reprezentującą gracza, na którego chcesz głosować (reprezentujący jego inteligencję). Głosowanie na siebie jest dozwolone (ale nie zalecane).
Rundy 9 będą się powtarzać, aż wszyscy gracze rozegrają co najmniej 1000 10000 rund, a wszyscy gracze rozegrają tę samą liczbę rund.
Kontroler można znaleźć tutaj: https://github.com/nathanmerrill/WeakestLink
Aby stworzyć gracza, musisz rozszerzyć klasę Player i dodać swojego gracza do klasy PlayerFactory. Twoja klasa musi przestrzegać następujących zasad:
Komunikacja lub ingerencja w jakikolwiek inny odtwarzacz (w tym innych graczy tego samego typu) jest surowo zabroniona.
Odbicie i zmienne statyczne (z wyjątkiem stałych) są niedozwolone.
Jeśli chcesz użyć losowości, podałem
getRandom()
funkcję w klasie Player. Użyj go, aby symulacje mogły być deterministyczne.
Udostępniłem wiele funkcji w klasie Player dla łatwego dostępu do danych. Można je znaleźć online na Github . Twój gracz zostanie utworzony w każdej nowej rundzie. Gracze „głupi / samobójcy” są dozwoleni (ale nie gracze o tej samej strategii).
Wyniki
377195 WeakestLink.Players.PrudentSniper
362413 WeakestLink.Players.Sniper
353082 WeakestLink.Players.VengefulSniper
347574 WeakestLink.Players.AntiExtremist
298006 WeakestLink.Players.BobPlayer
273867 WeakestLink.Players.MedianPlayer
247881 WeakestLink.Players.TheCult
240425 WeakestLink.Players.Leech
235480 WeakestLink.Players.SniperAide
223128 WeakestLink.Players.Guard
220760 WeakestLink.Players.Anarchist
216839 WeakestLink.Players.RevengePlayer
215099 WeakestLink.Players.IndependentVoter
213883 WeakestLink.Players.SniperKiller
210653 WeakestLink.Players.MaxPlayer
210262 WeakestLink.Players.Bandwagon
209956 WeakestLink.Players.MeanPlayer
208799 WeakestLink.Players.Coward
207686 WeakestLink.Players.Spy
204335 WeakestLink.Players.Hero
203957 WeakestLink.Players.MiddleMan
198535 WeakestLink.Players.MinPlayer
197589 WeakestLink.Players.FixatedPlayer
197478 WeakestLink.Players.HighOrLowNotSelf
181484 WeakestLink.Players.RandomPlayer
165160 WeakestLink.Players.BridgeBurner
źródło
src\WeakestLink
użyłemjavac Game\*.java Players\*.java Main.java
, aby skompilować ijava -cp .. WeakestLink.Main
uruchomić.Odpowiedzi:
Snajper
Ogólna idea polega na tym, aby trzymać jednego z głupich graczy (tj. Tych, których łatwiej pokonać w pojedynku), aby strzelać do punktów. Następnie staramy się usunąć innych graczy o niskiej wartości, aby podnieść pulę. Ale kiedy dochodzimy do inteligentnych graczy, wybieramy najbardziej niebezpiecznych, na wypadek gdyby nasz głupi gracz został usunięty. W ten sposób, jeśli nie będziemy mieli kogoś do strzelania, powinniśmy zdobyć kogoś, z kim przynajmniej mamy szansę. Ponadto, ponieważ zawsze głosujemy z graczem minimalnym lub maksymalnym, oczekuję, że jesteśmy dość skuteczni w dotarciu na naszą stronę.
źródło
PrudentSniper
Snajper , ale z dwoma wyjątkowymi zachowaniami. Jednym z nich jest to, że jeśli pozostały trzy boty, a PrudentSniper jest najmądrzejszy, będzie głosował na środkowego bota zamiast najmniej inteligentnego. To pozwala mu wygrać jeszcze kilka pojedynków. Innym zachowaniem jest to, że jeśli najmądrzejszy bot strzela do niego (ostatnio głosował na niego lub analogicznego bota), a najmniej inteligentny nie, będzie głosował na najmądrzejszego bota w samoobronie.
źródło
Kult
Kultowi gracze mają nieco ezoteryczny schemat głosowania, w którym próbują się wzajemnie zidentyfikować i głosować jako grupa, wykorzystując tylko zapis głosowania. Ponieważ każdy członek kultu wie, jak głosować, każdy, kto głosuje inaczej, zostaje ujawniony jako osoba niebędąca członkiem i ostatecznie jest celem eliminacji.
Schemat głosowania w skrócie:
Kod:
Końcowe przemyślenia:
Kult przełącza się teraz na głosowanie na najgroźniejszych graczy, gdy do pojedynku pozostaje tylko dwóch lub mniej członków kultu. Przetestowałem go kilka razy
cult_cnt>1
icult_cnt>2
warunków oraz późniejszych zwycięstw częściej.Jest to jednak środek ostrożności, a kult naprawdę nie jest przeznaczony do działania jako samotny gracz, więc wraz ze wzrostem liczby nowych graczy kult powinien ostatecznie stracić.
źródło
unusedPlayers.addAll(allPlayers);
w Game.java powielić się około dziewięć razy, aby wszyscy gracze mogli występować w różnej różnorodności (jak tasowanie wielu talii kart) ... nie, oczywiście, to całkowicie stronnicze żądanie, ale ciekawe jest to, jak potężna może być nadal strategia zespołowa, jeśli mają nawet niewielką szansę na połączenie.BridgeBurner
Nie gdzieś, gdzie mogę to teraz przetestować, a wyszło mi to na prawdę jak brzydki / głupi kod, ale powinno działać.
Ten bot po prostu chce być znienawidzony. Głosuje za tym, kto głosował przeciwko temu najmniej . W przypadku remisu wybiera ten, kto przeszedł najdłużej, nie głosując na niego. W przypadku kolejnego remisu wybiera najmądrzejszego z nich (prawdopodobnie dlatego, że będzie najgorszym wrogiem). Nie zagłosuje na siebie, ponieważ nikt tak naprawdę nie będzie go nienawidził, gdy go nie będzie w pobliżu.
źródło
-1
głosowano na gracza . Ale należy to teraz naprawić.Wóz dla orkiestry
Śledzi tłum podczas głosowania, chyba że to on jest celem.
Domyślam się, że ten tylko wzmocni snajperów, podążając za nimi, ale także pozwoli uniknąć celowania przez kult i pomocników snajperskich w nieco skuteczny sposób. Równie dobrze może być tarczą mięsną dla zabójców snajperów lub pomóc im, jeśli jest ich więcej. (Konieczność przetestowania przy użyciu najnowszych aktualizacji).
Korzystanie z funkcji Java 8, ponieważ gra i tak musi ją uruchomić.
źródło
RevengePlayer
Ten bot będzie głosował na tego, kto głosował na niego najwięcej razy, a tiebreaker jest najmądrzejszym graczem. Teoria jest taka, że gracz, który głosował na ciebie w przeszłości, prawdopodobnie zagłosuje na ciebie ponownie.
źródło
MeanPlayer
Nie głosuj ani na najgłupszych, ani na najmądrzejszych graczy, a on niesie broń (przemknął przez zabezpieczenia)
źródło
AntiExtremist
Ten skrajny socjalista uważa, że wszyscy ludzie powinni być jednakowo inteligentni. Próbuje zabić tych, którzy są znacznie mądrzejsi lub głupsi niż on. Rozważa oba, ale ogólnie preferuje głupie. Na początku faworyzuje głupich ludzi, a na koniec mądrych, ale zależy to od tego, jak skrajni są ci ludzie.
UWAGA: Według Linusa będzie to głosować tak samo jak snajpera przez większość czasu (525602: 1228).
źródło
static Sniper S = new Sniper()
astatic long agrees=0, disagrees=0;
. W metodzie głosowania dodaję,S.setSmartness(getSmartness()); int sniper_answer=S.vote(currentOpponents);
która oblicza, jak snajper zagłosowałby na twoim stanowisku, a następnie umieściłem twoją odpowiedź w zmiennej, aby policzyć, czy się zgodziła, czy nie, przed zwrotem odpowiedzi. Po zakończeniu gry możesz wydrukować zgody: disagress, który wynosił 525602: 1228.Szpieg
Szpieg jest zarezerwowany. Nie lubi strzelać do najmądrzejszych ludzi. Podobnie nie lubi
wybieraćbezbronnych idiotów. Dlatego lubi sprytnie eliminować tych, którzy są mu najbliżsi.Właśnie zostałeś dźgnięty w plecy, mes amis . Nie obchodzi go, czy wygra. On po prostu lubi dźwięk noża w twoich plecach, kiedy z powodzeniem cię głosuje.
źródło
Math.abs(enemyIntel - selfIntel) < closestIntel
powinno byćMath.abs(enemyIntel - selfIntel) < Math.abs(closestIntel - selfIntel)
.MedianPlayer
Ten gracz stara się być najgorszym (cóż, mediana).
Głosuje, aby wyeliminować najmądrzejszych i najgłupszych przeciwników (z lekką tendencją do głosowania na najmądrzejszych), w zależności od tego, czy są bardziej lub mniej mądrzejsi / głupsi od nich samych.
ramy rażąco skradzione z @Linus powyżej.
źródło
Tchórz
Po prostu nie chce się głosować, więc głosuj na przeciwnika najbardziej podobnego do gracza, który został głosowany w ostatniej rundzie, aby zmaksymalizować szansę na bycie w zwycięskiej drużynie.
W tej chwili nie robi się szczególnie dobrze, ale równie dobrze może wrzucić to do miksu.
źródło
Bohater
Głosuj na tych, którzy wybierają słabych ... lub denerwują go.
źródło
Kok
Bob jest po prostu przeciętnym facetem, który uważa, że jest mądrzejszy, niż jest naprawdę. Nie mogę wygrać rodziny snajperów, ale przez większość czasu zdobywam piątkę w moich symulacjach.
źródło
FixatedPlayer
Wybiera losowy cel, a następnie głosuje na niego, aż zniknie. Nie zagłosuje jednak na siebie.
źródło
Statystyka
To nie jest wejście do konkursu. Jest to tylko sposób na uzyskanie przydatnych statystyk gry. Te statystyki drukują procentowe prawdopodobieństwo, że dany gracz zostanie wykluczony w danej rundzie.
Aby to zrobić, dodaj następujące wiersze, aby
Round.java
góra pliku wyglądała tak:Następnie zmodyfikuj metodę głosowania, aby wyglądała tak:
Przykładowe dane wyjściowe:
źródło
MaxPlayer
Wiem wszystko. Woli usuwać każdego, kto ma wysoką inteligencję (który może zatem rzucić wyzwanie swojemu niezrównanemu intelektowi)
źródło
Strzec
Głosuj na tych, którzy wybierają mocnych ... lub tych, którzy go denerwują.
źródło
Pijawka
Polega na innych botach, aby głosować na najmądrzejszych i najgłupszych facetów.
On jest zadowolony z stawili się gdzieś w środku i ostatecznie podział puli ze zwycięzcą (bo jest rzeczywiście bardzo przyzwoity
facetbot).źródło
SniperKiller
Kolejna odpowiedź bezwstydnie skradziona z kodu Linusa . Ten zabije wszystkich snajperów, a nie ich ochroni. Jeśli wie, że nie ma już snajperów, będzie działał jak sam snajper.
źródło
RandomPlayer
źródło
MinPlayer
Elitarysta. Woli usunąć każdego o niskiej inteligencji.
źródło
VengefulSniper
Zaczęło się to od czegoś, co myślałem , że nazywało się pierwotnie
StupidBuffering
(imię, którego nienawidziłem się poddawać), a potem stało się po prostu PrudentSniper, który nie dbał o to, czy był celem. To także był jedyny powód, dla którego nie był w stanie pokonać PrudentSniper, więc poprawiłem trochę, żeby się skupić.Teraz jest to po prostu snajper, ale jeśli najbystrzejszy lub najgłupszy bot namierzy go, będzie celował w każdego, kto uzyskał najwięcej głosów w ostatniej rundzie. Jeśli obaj otrzymali taką samą liczbę głosów i obaj go zaatakowali, wraca do normalnego zachowania snajperskiego. W moich testach ten rzeczywisty czasami pokonuje PrudentSniper.
źródło
Pośrednik
MiddleMan dokłada wszelkich starań, aby zmaksymalizować zyski, jednocześnie uważając, aby nie został odcięty od gry. Utrzymuje mniejszych zawodników, aby zwiększyć swoją szansę na przejście do następnej rundy (i pozostawić łatwe zakończenie). Głosuje za kimś mądrzejszym od niego tylko wtedy, gdy jest więcej mądrzejszych zawodników niż mniejszych. Niezależnie od tego, która z dwóch grup zawsze głosuje na najniższą z grup, aby pula nadal rosła.
PS mam nadzieję, że się skompiluje, nie jestem facetem z Javy.
Miałem ten plan na myśli przed przeczytaniem innych wpisów. Potem byłem zaskoczony, jak blisko (ale krytycznie różny) był Sniper, więc zacząłem używać go jako punktu wyjścia, ponieważ nie znam składni Java. Dzięki @Linus
źródło
ApproximatePosition
Ten bot próbuje strzelać w przybliżeniu wokół brakujących wartości inteligencji, zakładając, że grupa będzie kontynuować z tym samym wzorem, co oznacza, że będzie celować w ten sam typ celu. Zawsze głosuje na najmądrzejszego z dwóch graczy, gdy jest wybór.
Dawno nie korzystałem z Javy, a obecnie pracuję, więc ... Nie mogę tego przetestować, mam nadzieję, że nie jest zbyt wadliwy, bądź łagodny proszę :).
Nawiasem mówiąc, używa awt.Point tylko dlatego, że jestem zbyt leniwy, aby zaimplementować krotkę n_n.
źródło
emptyPosition[emptyPosition.length]=j;
zawsze da ci tablicę poza granicami. Wreszcie, nie jestem pewien, dlaczego, ale zagłosujesz za graczami, którzy nie są w rundzie.emptyPosition[emptyPosition.length]
jest to głupi błąd jak długość jest zawsze jeden w ciągu ostatniego indeksu ^^. Dzięki za zmiany, użyję tej nowej wersji, aby ją poprawić. O bloku trójskładnikowym ... tak, miałem ochotę go użyć, a może zbyt przyzwyczajony do pisania dla siebie, chyba nie był przydatny do czytania. Robienie poprawek i aktualizacja.SniperAide
Przed dodaniem PrudentSniper pisałem bota pomóc snajper pokazał AntiExtremist i innych oszustw (używam tego słowa z miłością). Bot, SniperAide, szuka graczy, którzy głosują jak snajperzy i głosują tak, jak sądzą, że zrobiliby to w przypadku konsensu. Jeśli wszyscy gracze wyglądają jak snajperzy, głosuje na maksimum, chroniąc niższych snajperów (który również w tym momencie przeszedłby na maksimum), nawet jeśli to on sam.
Kod :
Obecnie nie jest zbyt pomocny przeciwko PrudentSniper.
źródło
HighOrLowNotSelf
Usuwa losowo najniższego lub najwyższego gracza inteligencji (ale nie siebie).
źródło
long
, a nieint
. Po drugie,ops
nie zawiera siebie. (Jeśli chcesz głosować na siebie, musisz to wyraźnie dołączyć). Wreszcie, jeśli podałeś / jeśli nie jest prawidłową Javą. Naprawiłem twój kod i dodałem go do githubAnarchista
Anarchista nie lubi reżimów.
Anarchista będzie próbował zabić obecnego prezydenta.
Jeśli anarchista jest prezydentem, postanawia nadużyć swojej władzy i zabić bezużytecznych peagentów. Chyba że jeden z jego podwładnych był celem, bo zamiast tego powinni się palić.
źródło
IndependentVoter
Ten bot wie, że ogólna populacja zawsze się myli! Głosuje więc na każdego, kto otrzyma najmniej głosów.
Kod jest prawie identyczny z „Bandwagon” SolarAarona, ale logika końca jest odwrócona.
źródło