UWAGA : Zwycięzcą tego konkursu jest Jack !!!. Żadne kolejne zgłoszenia nie będą akceptowane.
Oto czat tego wyzwania króla wzgórza . To mój pierwszy, więc jestem otwarty na sugestie!
Reaper to koncepcja gry opracowana przez Art of Problem Solving, która wymaga cierpliwości i chciwości. Po zmodyfikowaniu gry, aby pasowała do konkursu w stylu KOTH (dzięki @NathanMerrill i @dzaima za sugestie i ulepszenia), oto wyzwanie.
Gra działa w następujący sposób: mamy wartość znaną jako Reap, która mnoży się przez określoną stałą przy każdym tiku. Po każdym tyknięciu każdy bot ma opcję „zbierania”, co oznacza dodanie bieżącej wartości Reap do swojego wyniku i zmniejszenie Reap do 1.
Istnieje jednak ustalona liczba tyknięć, które bot musi odczekać między „zbiorem”, oraz stała liczba punktów niezbędnych do wygrania gry.
Wystarczająco proste? Oto twoje dane wejściowe:
I / O
Masz napisać funkcję w Pythonie 3, która pobiera 3 dane wejściowe. Pierwszy selfsłuży do odwoływania się do obiektów klasy (pokazano później). Drugi to Reapaktualna wartość Żniwa, którą zarobiłbyś, gdybyś „Żył”. Trzecia to prevReaplista botów, które zbierały podczas poprzedniego tyknięcia.
Inne obiekty, do których masz dostęp w swojej funkcji:
self.obj: An object for your use to store information between ticks.
self.mult: The multiplier that Reap is multiplied by each tick
self.win: The score you need to win
self.points: Your current set of points
self.waittime: The amount of ticks that you must wait between reaps during the game
self.time: The number of ticks since your last reap
self.lenBots: The number of bots (including you) in the game.
self.getRandom(): Use to produce a random number between 0 and 1.
Ty MUSI nie zmieniać żadnego z treścią tych obiektów, z wyjątkiem self.obj.
Musisz generować, 1aby zbierać, i cokolwiek innego (lub nic), aby nie zbierać. Zauważ, że jeśli zbierzesz, gdy nie czekałeś wystarczająco dużo tyknięć, zignoruję fakt, że postanowiłeś zbierać.
Zasady
Parametry będę używał to winning_score=10000, multiplier=1.6-(1.2/(1+sqrt(x))), waittime = floor(1.5*x)gdzie xjest liczbą botów w KOTH.
- Gra kończy się, gdy gracz (lub wielu) osiągnie zwycięski wynik.
- Kiedy wiele botów prosi o zbieranie na raz, pierwszeństwo mają boty, które czekały dłużej (w przypadku remisów, boty, które czekały maksymalny czas wszystkie mogą zbierać i zdobywać punkty w Reap)
- Twój bot nie może zająć średnio więcej niż 100 ms przez 5 tyknięć.
- Jeśli chcesz zaimportować biblioteki, zapytaj! Spróbuję dodać dowolne biblioteki, które mogę uruchomić na mojej stacjonarnej wersji Pythona (matematyka jest już zaimportowana: możesz ją swobodnie używać)
- Wszystkie standardowe luki dla KoTH, takie jak zduplikowane boty, boty 1-up itp., Są podobnie zbanowane.
- Wszelkie boty korzystające z dowolnej losowości muszą korzystać z
getRandomfunkcji, którą podałem.
Kontroler można znaleźć w linku TIO poniżej. Aby go użyć, dodaj nazwę swojej funkcji BotListjako ciąg, a następnie dodaj funkcję do kodu. Zmodyfikuj, multiplieraby zmienić to, co Reap jest mnożone przez każdy tik, zmodyfikuj, winning_scoreaby zmienić wynik niezbędny do zakończenia gry, i zmodyfikuj, waittimeaby zmienić liczbę tyknięć, które będą czekać między zbiorami.
Dla Twojej wygody, oto kilka przykładowych (i raczej głupich) botów. Przesyłanie botów podobnych do tych nie będzie dozwolone. Pokazują jednak, jak działa kontroler.
def Greedybot(self,Reap, prevReap):
return 1
def Randombot(self,Reap, prevReap):
if self.obj == None:
self.obj=[]
self.obj.append(prevReap)
if self.getRandom()>0.5:
return 1
Dla zainteresowanych, oto Kontroler z wbudowanymi 15 zgłoszeniami: Wypróbuj online
OSTATECZNE REZULTATY
WOO SĄ OSTATECZNIE TUTAJ! Sprawdź powyższy link TIO, aby zobaczyć, jakiego kodu użyłem do wygenerowania końcowej klasyfikacji. Wyniki nie są wyjątkowo interesujące. Wyniki ponad 1000 przebiegów, które wykonałem z różnymi losowymi nasionami
1000 wins - Jack
0 wins - everyone else
Gratulacje dla zwycięzcy nagrody Bount Jack! (alias @Renzeee)
len(BotList)?
25botów w grze. Najpierw jednak trochę poczekam, by zobaczyć boty innych ludzi. Rushabh Mehta , czy będzie ostateczny termin / data, kiedy wszystkie boty zostaną uruchomione i zostanie wyłoniony zwycięzca?