Podstawowe zasady (inne niż moje)
Fabuła
Jest rok 4579, ludzie mają teraz 2 ręce po 1001 palców. Pałeczki stały się oparte na punktach. I @Dennis ma więcej przedstawicieli niż @Martin ... Ręcznie rysowane czerwone kółka są teraz odrzucane ... Jon Skeet trafił 2 tryliony przedstawicieli na każdej stronie SE ... Tak, strasznie wiem
Pałeczki to rozwiązana gra ręczna. Aby obejść ten problem, stworzyłem go zmutowanym. Zwiększyłem liczbę palców.
Zasady gry
Sposób, w jaki się to gra
Każdy zaczyna z 2 rękami. Każda ręka ma 1001 palców. Każda ręka zaczyna się od 1 (jednego) palca w górę na każdej dłoni. Podczas swojej tury możesz „trafić” rękę innych graczy. Aby trafić, wybierz 1 z twoich rąk do uderzenia i 1 z ich rąk do uderzenia. Ręka, która została trafiona, ma teraz liczbę palców, które były na początku ORAZ liczbę palców, które miałeś na dłoni, którą uderzyłeś.
DAWNY
P1: 1,1
P2: 1,1
. P1[0]
trafienia P2[1]
. Teraz palce są P1:1,1
P2:1,2
. Teraz P2[1]
uderza p1[0]
. Palce są teraz P1: 3,1
P2 1,2
.
Jeśli jedna ręka dotrze do 1001 palców w górę lub więcej, wówczas ta ręka jest na zewnątrz. Następnie gracz, który dostał rękę (na swoją turę) może „podzielić”. Dzielenie ma miejsce wtedy, gdy bierzesz dłoń, która jest w środku, i zmniejszasz o połowę liczbę palców (zaokrąglamy w górę) i oddajesz je drugiej ręce, aby ją odzyskała.
DAWNY
P1: 1000,2
P2 7,7
. P2[0]
trafienia P1[0]
. Wynik to P1: 0,2
P2 1,1
. P1[1]
dzieli się na swoją turę, a wynik to P1: 1,1
i P2 7,7
.
Gra kończy się, gdy jeden z graczy wyciągnie obie ręce. Punkty są punktowane na podstawie liczby palców zwycięzcy. Więcej punktów = lepiej. Przegrany nie zdobywa punktów.
Są inne zasady, które są używane, ale te są tutaj stosowane.
Wszyscy grają wszyscy (round robin)
Etap końcowy
Suma punktów za każdą wygraną rundę. Wtedy średnia wszystkich punktów w górę. Podziel sumę przez średnią liczbę punktów i uzyskaj końcowy wynik. Większość punktów wygrywa.
Rzeczywiste zasady
Proszę nie nie starają się rozwiązać grę. Naprawdę muszę go uruchomić: P
Upewnij się, że bot może działać szybko. Przy ocenie długości rund potrwa to trochę
Wszystkie biblioteki potrzebne w twoim programie muszą znajdować się w domyślnej bibliotece Pythona. Wymień także te, które chcesz zaimportować. Import będzie tylko podstawowy import (dla matematyki zrobić: import math
)
Odpowiedzi muszą działać w Pythonie 3.x
Treser
Twój bot będzie własnym plikiem Python 3 z play
funkcją.
play
zostaną przekazane dwie listy po dwie liczby. Ta liczba wskazuje, ile palców jest na każdej ręce. Pierwsza lista to Twoja własna ręka.
Jeśli zdecydujesz się uderzyć rękę drugiego gracza, zwróć listę dwóch bitów. Pierwszy bit to indeks ręki, której używasz do uderzenia ( 0
pierwszy, 1
ostatni), a drugi bit to indeks ręki, którą trafiasz na przeciwnika.
Jeśli zdecydujesz się podzielić, zwróć dowolną inną prawdziwą wartość.
Tada!
Kontroler można znaleźć tutaj . Zapisz każdego bota we własnym pliku i wypisz jego nazwę pliku (bez .py
) w botnames
.
Ostatnia uwaga:
Ty i drugi bot będziecie na zmianę w pierwszej kolejności. Jeśli gra nie zakończy się w 100 000 (sto tysięcy) rundach, gra zostanie zakończona i żaden bot nie wygra.
Kontroler nie jest chroniony przed ruchami trwającymi wiecznie, ale niepotrzebne koszty ogólne zostaną mocno skrzywdzone.
źródło
My handler is very simple, your bot must do it's logic then adjust the the finger scores as needed, remember!
Co, więc to my wykonujemy obliczenia dla KoTH?Odpowiedzi:
CodingAndAl algorytmy
Ta odpowiedź używa kodowania i algorytmów, w przeciwieństwie do innych do tej pory! referencja: imgur (bije także wszystkie odpowiedzi opublikowane wcześniej)
źródło
CautionBot
Przestroga Bot nie chce sprawiać większych kłopotów, więc uderza mniejszą z rąk przeciwnika swoją mniejszą ręką, jeśli ma obie ręce, i w inny sposób dzieli. Jednak WarningBot nie jest głupcem, więc jeśli może wyciągnąć rękę przeciwnika bez natychmiastowej utraty następnej tury, zrobi to zamiast normalnego ruchu.
źródło
Wyrównywacz
Jeśli korektor nie ma układu, zostanie on podzielony. W przeciwnym razie trafi najmniejszą rękę przeciwnika własną największą ręką.
źródło
Agresor
Kolejny bot startowy, Aggressor uderzy większą z rąk przeciwnika większą z własnych rąk, jeśli obie ręce nie są puste; w przeciwnym razie dzieli się.
źródło
RandomBot
Na początek jest bot, który wykonuje losowe trafienie, jeśli jego ręce nie są puste; w przeciwnym razie dzieli.
Grał w golfa, ponieważ dlaczego nie: 3
źródło
Błąd
Tak, tak nazywa się bot.
Doszedłem do tego, testując z innymi botami. Jednak konsekwentnie zajmuje drugie miejsce w moich symulacjach. Więc w końcu będę robił kolejnego bota.
Edycja: Wydaje mi się, że nie mogę napisać żadnego bota, który pokonałby WarningBot, a moje dodatkowe testy wydają się wskazywać, że jest to drugi najlepszy, a nie drugi najgorszy.
źródło
Maratończyk
Ulepszyłem kod Aggressora dostarczony przez „HyperNeutrino”, aby po prostu trafić mniejszą z dwóch przeciwników dwiema rękami. Jest to oczywiście bardzo głupia strategia, ale nie mogę odmówić bycia na szczycie tabeli! (Mimo że ten wykres byłby stratami)
Nie jestem pewien, czy ten kod będzie działał bez błędów, ponieważ nie mogłem go przetestować z powodu pracy. Powinien jednak działać bezbłędnie.
źródło