Liar's Dice to dość prosta gra w kości. Widziałem kilka różnych odmian zasad, ale oto wersja, którą znam najbardziej:
- Każdy gracz zaczyna od 5d6
- Z wyjątkiem liczenia kości na końcu rundy każdy gracz może zobaczyć własne kości, ale nie kości dowolnego przeciwnika
- Na początku każdej rundy wszyscy gracze rzucają dowolnymi kostkami
- Następnie jeden gracz (zwykle jest to albo zwycięzca poprzedniej rundy LUB gracz po lewej stronie gracza, który zaczął ostatni raz; użyjemy tego pierwszego dla tego KotH; losowy gracz rozpocznie pierwszą rundę) zgaduje, ile konkretnej liczby jest na stole (ONES ARE WILD)
- Licytacja jest kontynuowana w prawo, za każdym razem rosnąc (na przykład; 3 piątki, 3 szóstki i 4 dwójki są wyższe niż 3 czwórki, ale 3 trójki nie są; 4 są również wyższe, ale licytacja na nich prawdopodobnie spowoduje niekorzyść); dopóki jakikolwiek gracz nie wezwie gracza poprzedzającego go kłamcą
- W tym momencie wszyscy gracze odkrywają swoje kości i liczą liczbę ostatniej liczby licytowanej na stole
- Jeśli suma jest niższa niż stawka, gracz, który złożył ofertę, musi dać kostkę graczowi, który nazwał ich kłamcą, w przeciwnym razie gracz, który nazwał licytatora kłamcą, musi dać kostkę licytującemu (więc licytujący wygrywa jeśli ich liczba jest co najmniej tyle, ile licytował, nie musi być dokładnej liczby)
- Kiedy skończą Ci się kości, przegrywasz
- Ostatni stojący gracz wygrywa
Na przykład:
Gracz pierwszy ma 1,1,2,4,6 Gracz drugi ma 1,2,2,3,5 Gracz trzeci ma 1,3,3,4,6 Gracz pierwszy: trzy szóstki. Gracz drugi: cztery dwójki. Gracz trzeci: cztery trójki. Gracz pierwszy: pięć dwójek. Gracz drugi: sześć dwójek. Gracz trzeci: sześć trójek. Gracz pierwszy: sześć czwórek. Gracz drugi: Kłamca! Odsłaniają swoje kości i liczą te (ponieważ są dzikie) i czwórki. Okazuje się, że w rzeczywistości jest dokładnie cztery czwórki. Gracz drugi daje graczowi jedną kość. Przewijają się ponownie, a gracz jeden rozpoczyna kolejną rundę.
Aby zagrać w tę grę, musisz napisać bota. Musi implementować następującą abstrakcyjną klasę Java:
public abstract class Player {
public Player() {}
public String toString() {
return this.getClass().getSimpleName();
}
public abstract String bid(int yourId, int[] diceEachPlayerHas, int[] yourDice, String[] bids);
}
- Musisz wdrożyć metodę licytacji
- Pierwszy argument to aktualna pozycja twojego bota w kolejności tury, drugi to tablica pokazująca, ile kości ma obecnie każdy gracz (w tym ty), trzeci to tablica pokazująca wartości aktualnie pokazane na twoich kościach, a czwarty to tablica wszystkich ofert złożonych od początku bieżącej rundy - będzie miała długość 0, jeśli złożysz pierwszą ofertę rundy
- Wynik powinien być ciągiem znaków „liczba twarzy” lub ciągiem „Kłamca!” nazwać poprzedniego oferenta kłamcą.
- Jeśli Twoje dane wyjściowe są sformatowane nielegalnie, zostaniesz wyeliminowany.
- Możesz zastąpić metodę toString, ale nie jest to wymagane. Nie można go jednak edytować w żaden sposób, który zakłóca czytelności danych wyjściowych kontrolera.
- Możesz wywoływać dowolne inne publiczne metody kontrolera, ale nie jego główną metodę.
- Możesz czytać i edytować tylko pliki w bieżącym katalogu poprzedzonym nazwą własnego bota
- Nie możesz pobierać danych z żadnego innego źródła
- Zmienne instancji są resetowane na początku każdej nowej gry, ale zmienne statyczne nie są.
Punktacja
- Za każdym razem, gdy dodawany jest bot (po przesłaniu trzech lub więcej botów), będzie symulowany jeden zestaw 1000 gier z 3-5 graczami, punktowany zgodnie ze źródłem kontrolera (w dowolnej grze zdobądź 1 na początku każdej tury, 10 za każdym razem, gdy złapiesz kostkę, i 1000 bonusów, jeśli wygrasz); egzekwowanie limitu 5000 TURN (nie rund) w każdej grze.
- Twój bot zostanie oceniony na podstawie wyniku z najnowszego zestawu gier; plus dziesięciokrotność wyniku głosowania, jeśli nieujemne. (Jest mało prawdopodobne, aby ten ostatni miał znaczący wpływ na wynik)
Źródło kontrolera można znaleźć tutaj.
Wyniki na dzień 19.06.2015:
Badnomial: 434,924 + 6x10 = 424,984
Nobody: 282,329 + 6x10 = 282,389
StraightShooter: 265,205 + 5x10 = 265,255
MostlyHonestAbe: 158,958 + 4x10 = 158,998
The Pirate: 157,005 + 1x10 = 157,015
Statistician: 144,012 + 2x10 = 144,032
Fidelio: 49,973 + 2x10 = 49,993
Absurd Bot: 6,831
DrHouse: 2,638 + 3x10 = 2,668
popularity-contest
king-of-the-hill
java
SuperJedi224
źródło
źródło
diceEachPlayerHas[yourId]
= liczą się twoje kości ibids[yourId]
jest to Twoja pierwsza oferta (lub zero, jeśli to twoja pierwsza tura). Czy to jest poprawne?Odpowiedzi:
Nikt
Próbuje odgadnąć kości od innych graczy. Nazywa innych botów kłamcami, jeśli nie wie, co robić.
Edycja: Naprawiono problem polegający na tym, że nikt nie licytował wiecznie, nigdy nie wzywając Kłamcy.
źródło
Badnomial, bot, który podejmuje złe decyzje na podstawie rozkładów dwumianowych: Edycja: Naprawiono głupi błąd w obliczeniach prawdopodobieństwa, teraz uwzględnia następnego Licytującego, a także poprzedniego.
Próbuje ustalić, czy powinien blefować, czy wezwać Kłamcę na podstawie szacunkowych skumulowanych rozkładów dwumianowych dla siebie i szans poprzednich i następnych licytantów na obecność potrzebnych kości.
Zasadniczo, wywołuje Kłamcę, jeśli poprzedni Licytant najprawdopodobniej będzie Kłamcą lub jeśli czuje, że zarówno on, jak i następny Licytator kłamią, a nie kłamią.
źródło
Straight Shooter
Gra prosto i nie blefuje. Jest również na tyle naiwny, by myśleć, że inni też tak robią, więc nigdy nie wzywa kłamcy, chyba że stawka przekroczy całkowitą liczbę kości w grze (minus jego własne kości, które nie pasują do stawki).
Aby być nieco bardziej konserwatywnym niż dokładna oczekiwana liczba dla każdej kości, nie liczy własnych dziczy, ale zakłada, że inne mają równomierny rozkład. Przy obecnych czterech graczach albo on, albo MostlyHonestAbe pojawiali się na pierwszym miejscu za każdym razem, z dość bliskimi wynikami.
Zakładam, że minimalna oferta to
2 2
. Jeśli licytacja jednej kości (lub licytacji) jest dozwolona, daj mi znać, abym mógł dokonać tej zmiany.źródło
MostlyHonestAbe
Abe podaje konserwatywne przypuszczenia, że reszta przeciwników umiera, a następnie pozostaje szczery, dopóki nie uzna, że jest wystarczająca ilość kości, aby pokonać aktualną ofertę. W tym momencie blefuje raz, a następnym razem nazywa się kłamcą.
źródło
Dr House
Wszyscy kłamią!
źródło
Fidelio
Ten bot wie, że tylko jego najbardziej powtarzająca się wartość doprowadzi go do zwycięstwa, więc trzyma się go. Zakłada, że część kości wszystkich jest taka sama jak jego, jeśli ktoś licytuje więcej niż ta część, zakłada, że jest kłamcą.
Mam nadzieję, że wykona kawał dobrej roboty :).
źródło
Statystyk
Masz 1/3 szans na posiadanie dowolnej liczby innej niż asy. Jeden facet powiedział mi kiedyś, że nie sprawdzanie kości i po prostu znajomość szans może sprawić, że wygrasz tę grę. EDYCJA: Licytacja była zbyt wysoka. Ale to niewiele poprawia wynik.
źródło
Absurdalny Bot
Twierdzi, że wszystkie kości to 6, chyba że nie może. Jeśli bot nie może tego zrobić, oznacza to, że jest to sytuacja niemożliwa lub prawie niemożliwa. Z tego powodu nazywa się kłamcą. Jestem ciekawy, jak skuteczny będzie ten bot.
źródło
Pirat
Zrobiłem kilka prostych botów podczas testowania kontrolera, i to jest jedyny naprawdę dobry.
Prawdopodobnie zostanie poprawiony później.
źródło