Najnowszy ranking @ 02.08.2014 12:00
| Pos # | Author | Name | Language | Score | Win | Draw | Loss | Avg. Dec. Time |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
| 1st | Emil | Pony | Python2 | 064 | 064 | 000 | 005 | 0026.87 ms |
| 2nd | Roy van Rijn | Gazzr | Java | 062 | 062 | 001 | 006 | 0067.30 ms |
| 2nd | Emil | Dienstag | Python2 | 062 | 062 | 001 | 006 | 0022.19 ms |
| 4th | ovenror | TobiasFuenke | Python2 | 061 | 061 | 001 | 007 | 0026.89 ms |
| 5th | PhiNotPi | BayesianBot | Perl | 060 | 060 | 000 | 009 | 0009.27 ms |
| 6th | Claudiu | SuperMarkov | Python2 | 058 | 058 | 001 | 010 | 0026.77 ms |
| 7th | histocrat | Alternator | Ruby | 057 | 057 | 001 | 011 | 0038.53 ms |
| 8th | histocrat | LeonardShelby | Ruby | 053 | 053 | 000 | 016 | 0038.55 ms |
| 9th | Stretch Maniac | SmarterBot | Java | 051 | 051 | 002 | 016 | 0070.02 ms |
| 9th | Martin Büttner | Markov | Ruby | 051 | 051 | 003 | 015 | 0038.45 ms |
| 11th | histocrat | BartBot | Ruby | 049 | 049 | 001 | 019 | 0038.54 ms |
| 11th | kaine | ExcitingishBot | Java | 049 | 049 | 001 | 019 | 0065.87 ms |
| 13th | Thaylon | UniformBot | Ruby | 047 | 047 | 001 | 021 | 0038.61 ms |
| 14th | Carlos Martinez | EasyGame | Java | 046 | 046 | 002 | 021 | 0066.44 ms |
| 15th | Stretch Maniac | SmartBot | Java | 045 | 045 | 001 | 023 | 0068.65 ms |
| 16th | Docopoper | RoboticOboeBotOboeTuner | Python2 | 044 | 044 | 000 | 025 | 0156.55 ms |
| 17th | Qwix | Analyst | Java | 043 | 043 | 001 | 025 | 0069.06 ms |
| 18th | histocrat | Analogizer | Ruby | 042 | 042 | 000 | 027 | 0038.58 ms |
| 18th | Thaylon | Naan | Ruby | 042 | 042 | 004 | 023 | 0038.48 ms |
| 20th | Thaylon | NitPicker | Ruby | 041 | 041 | 000 | 028 | 0046.21 ms |
| 20th | bitpwner | AlgorithmBot | Python2 | 041 | 041 | 001 | 027 | 0025.34 ms |
| 22nd | histocrat | WereVulcan | Ruby | 040 | 040 | 003 | 026 | 0038.41 ms |
| 22nd | Ourous | QQ | Cobra | 040 | 040 | 003 | 026 | 0089.33 ms |
| 24th | Stranjyr | RelaxedBot | Python2 | 039 | 039 | 001 | 029 | 0025.40 ms |
| 25th | JoshDM | SelfLoathingBot | Java | 038 | 038 | 001 | 030 | 0068.75 ms |
| 25th | Ourous | Q | Cobra | 038 | 038 | 001 | 030 | 0094.04 ms |
| 25th | Ourous | DejaQ | Cobra | 038 | 038 | 001 | 030 | 0078.31 ms |
| 28th | Luis Mars | Botzinga | Java | 037 | 037 | 002 | 030 | 0066.36 ms |
| 29th | kaine | BoringBot | Java | 035 | 035 | 000 | 034 | 0066.16 ms |
| 29th | Docopoper | OboeBeater | Python2 | 035 | 035 | 002 | 032 | 0021.92 ms |
| 29th | Thaylon | NaanViolence | Ruby | 035 | 035 | 003 | 031 | 0038.46 ms |
| 32nd | Martin Büttner | SlowLizard | Ruby | 034 | 034 | 004 | 031 | 0038.32 ms |
| 33rd | Kyle Kanos | ViolentBot | Python3 | 033 | 033 | 001 | 035 | 0032.42 ms |
| 34th | HuddleWolf | HuddleWolfTheConqueror | .NET | 032 | 032 | 001 | 036 | 0029.86 ms |
| 34th | Milo | DogeBotv2 | Java | 032 | 032 | 000 | 037 | 0066.74 ms |
| 34th | Timmy | DynamicBot | Python3 | 032 | 032 | 001 | 036 | 0036.81 ms |
| 34th | mccannf | YAARBot | JS | 032 | 032 | 002 | 035 | 0100.12 ms |
| 38th | Stranjyr | ToddlerProof | Java | 031 | 031 | 010 | 028 | 0066.10 ms |
| 38th | NonFunctional User2..| IHaveNoIdeaWhatImDoing | Lisp | 031 | 031 | 002 | 036 | 0036.26 ms |
| 38th | john smith | RAMBOBot | PHP | 031 | 031 | 002 | 036 | 0014.53 ms |
| 41st | EoinC | SimpleRandomBot | .NET | 030 | 030 | 005 | 034 | 0015.68 ms |
| 41st | Martin Büttner | FairBot | Ruby | 030 | 030 | 006 | 033 | 0038.23 ms |
| 41st | Docopoper | OboeOboeBeater | Python2 | 030 | 030 | 006 | 033 | 0021.93 ms |
| 44th | undergroundmonorail | TheGamblersBrother | Python2 | 029 | 029 | 000 | 040 | 0025.55 ms |
| 45th | DrJPepper | MonadBot | Haskel | 028 | 028 | 002 | 039 | 0008.23 ms |
| 46th | Josef E. | OneBehind | Java | 027 | 027 | 007 | 035 | 0065.87 ms |
| 47th | Ourous | GitGudBot | Cobra | 025 | 025 | 001 | 043 | 0053.35 ms |
| 48th | ProgramFOX | Echo | .NET | 024 | 024 | 004 | 041 | 0014.81 ms |
| 48th | JoshDM | SelfHatingBot | Java | 024 | 024 | 005 | 040 | 0068.88 ms |
| 48th | Trimsty | Herpetologist | Python3 | 024 | 024 | 002 | 043 | 0036.93 ms |
| 51st | Milo | DogeBot | Java | 022 | 022 | 001 | 046 | 0067.86 ms |
| 51st | William Barbosa | StarWarsFan | Ruby | 022 | 022 | 002 | 045 | 0038.48 ms |
| 51st | Martin Büttner | ConservativeBot | Ruby | 022 | 022 | 001 | 046 | 0038.25 ms |
| 51st | killmous | MAWBRBot | Perl | 022 | 022 | 000 | 047 | 0016.30 ms |
| 55th | Mikey Mouse | LizardsRule | .NET | 020 | 020 | 007 | 042 | 0015.10 ms |
| 55th | ja72 | BlindForesight | .NET | 020 | 020 | 001 | 048 | 0024.05 ms |
| 57th | robotik | Evolver | Lua | 019 | 019 | 001 | 049 | 0008.19 ms |
| 58th | Kyle Kanos | LexicographicBot | Python3 | 018 | 018 | 003 | 048 | 0036.93 ms |
| 58th | William Barbosa | BarneyStinson | Lua | 018 | 018 | 005 | 046 | 0005.11 ms |
| 60th | Dr R Dizzle | BartSimpson | Ruby | 017 | 017 | 001 | 051 | 0038.22 ms |
| 60th | jmite | IocainePowder | Ruby | 017 | 017 | 003 | 049 | 0038.50 ms |
| 60th | ArcticanAudio | SpockOrRock | PHP | 017 | 017 | 001 | 051 | 0014.19 ms |
| 60th | Dr R Dizzle | BetterLisaSimpson | Ruby | 017 | 017 | 000 | 052 | 0038.23 ms |
| 64th | Dr R Dizzle | LisaSimpson | Ruby | 016 | 016 | 002 | 051 | 0038.29 ms |
| 65th | Martin Büttner | Vulcan | Ruby | 015 | 015 | 001 | 053 | 0038.26 ms |
| 65th | Dr R Dizzle | Khaleesi | Ruby | 015 | 015 | 005 | 049 | 0038.29 ms |
| 67th | Dr R Dizzle | EdwardScissorHands | Ruby | 014 | 014 | 002 | 053 | 0038.21 ms |
| 67th | undergroundmonorail | TheGambler | Python2 | 014 | 014 | 002 | 053 | 0025.47 ms |
| 69th | cipher | LemmingBot | Python2 | 011 | 011 | 002 | 056 | 0025.29 ms |
| 70th | Docopoper | ConcessionBot | Python2 | 007 | 007 | 000 | 062 | 0141.31 ms |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
Total Players: 70
Total Matches Completed: 2415
Total Tourney Time: 06:00:51.6877573
Notatki z turnieju
- WOO HOO 70 BOTS
- Emil wciąż jest KOTH,
Pony
a jego nowy botDienstag
zajmuje 3 miejsce - Gratulacje dla Roya za wskoczenie na 2 miejsce ze swoim
Gazzr
botem - William Barbosa wygrywa nagrodę Quick Draw dla swojego bota
BarneyStinson
I zwolnionym Poke nagroda idzie do Docopoper dla swoich botów
R.O.B.O.T
iConcessionbot
którzy byli zarówno> 140 ms za rękęDzienniki dostępne @ https://github.com/eoincampbell/big-bang-game/blob/master/tourneys/Tournament-2014-08-01-23-24-00.zip?raw=true
Wykluczone boty
- BashRocksBot - wciąż nie ma radości ze .net wykonującego skrypty bash cygwin
- CounterPreferenceBot - oczekuje na naprawę błędu
- RandomlyWeighted - oczekuje na naprawę błędu
- CasinoShakespeare - wykluczone, ponieważ wymaga aktywnego połączenia z Internetem
Oryginalne wysłane pytanie
Udałeś się do domu swoich znajomych, by wziąć udział w najbardziej epickich bitwach pokazowych: Rock, Paper, Scissors, Lizard, Spock. W prawdziwym stylu kujonowym BigBanga, żaden z graczy nie gra sam, ale stworzył boty konsolowe, aby grać w ich imieniu. Wyciągasz klucz USB i oddajesz go Sheldorowi Zdobywcy w celu włączenia go do showdownu. Penny mdleje. A może Howard mdleje. Nie oceniamy tutaj w mieszkaniu Leonarda.
Zasady
Obowiązują standardowe zasady dotyczące kamieni, papieru, nożyczek, jaszczurki, Spocka.
- Nożyczki do cięcia papieru
- Papierowe okładki Rock
- Skała miażdży Jaszczurkę
- Jaszczurka zatruwa Spocka
- Spock rozbija nożyczki
- Nożyce dekapitują Jaszczurkę
- Jaszczurka je papier
- Papier obala Spocka
- Spock waporyzuje skałę
- Skała miażdży nożyczki
Bot każdego gracza rozegra jeden mecz przeciwko sobie nawzajem w turnieju.
Każdy mecz będzie się składał ze 100 powtórzeń gry RPSLV.
Po każdym meczu zwycięzcą zostaje gracz, który wygrał najwięcej gier / rozdań na 100.
Jeśli wygrasz mecz, otrzymasz 1 punkt w tabeli ligowej. W wyniku remisu żaden z graczy nie zdobędzie punktu.
Wymagania dotyczące botów
Twój bot musi być uruchamialny z linii poleceń.
Pudełko Sheldora * nix umarło, więc uruchamiamy go z jego laptopa z systemem Windows 8, więc upewnij się, że dostarczone rozwiązanie może działać w systemie Windows. Sheldor z wdzięcznością zaoferował zainstalowanie wszystkich wymaganych środowisk uruchomieniowych (w rozsądnym zakresie), aby móc uruchomić twoje rozwiązanie. (.NET, Java, Php, Python, Ruby, Powershell ...)
Wejścia
W pierwszej grze każdego meczu Twoi bot nie otrzymuje żadnych argumentów. W każdej kolejnej grze każdego meczu: - Arg1 będzie zawierać historię twoich rąk / decyzji botów w tym meczu. - Arg2 będzie zawierać historię układów / decyzji twoich przeciwników w tym meczu.
Historia będzie reprezentowana przez ciąg pojedynczych wielkich liter reprezentujących możliwe ręce, w które możesz zagrać.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
Na przykład
- Gra 1: MyBot.exe
- Gra 2: MyBot.exe SV
- Gra 3: MyBot.exe SS VL
- Gra 4: MyBot.exe SSR VLS
Wynik
Twój bot musi napisać odpowiedź jednej postaci reprezentującą jego „rękę” dla każdej gry. Wynik należy zapisać w STDOUT, a następnie bot powinien wyjść. Prawidłowe pojedyncze wielkie litery są poniżej.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
W przypadku, gdy twój bot nie zwróci prawidłowej ręki (tj. 1 z powyższych 5 pojedynczych wielkich liter, wtedy automatycznie tracisz tę rękę i dopasowanie jest kontynuowane.
W przypadku, gdy oba boty nie zwrócą prawidłowego układu, gra jest uważana za remis i mecz jest kontynuowany.
Dopasuj format
Każdy zgłoszony bot rozegra jeden mecz przeciwko sobie w turnieju.
Każdy mecz potrwa dokładnie 100 gier.
Mecze będą rozgrywane anonimowo, nie będziesz miał zaawansowanej wiedzy na temat konkretnego bota, z którym grasz, jednak możesz wykorzystać dowolne i wszystkie informacje, które możesz zdobyć na podstawie jego decyzji podczas historii bieżącego meczu, aby zmienić strategię przeciwko twojej przeciwnik. Możesz także śledzić historię swoich poprzednich gier, aby budować wzorce / heurystykę itp. (Zobacz zasady poniżej)
Podczas pojedynczej gry silnik orkiestracji uruchomi twojego bota, a twoi przeciwnicy rozdzielą 100 milisekund od siebie, a następnie porównają wyniki, aby uniknąć kolizji PRNG w tym samym języku / środowisku uruchomieniowym. (faktycznie tak się stało podczas testów).
Sędziowanie i ograniczenia
Dr Sheldon Cooper w przebraniu Sheldora Zdobywcy uprzejmie zaproponował nadzorowanie przebiegu turnieju. Sheldor Zdobywca jest uczciwym i sprawiedliwym nadzorcą (głównie). Wszystkie decyzje Sheldora są ostateczne.
Gry będą prowadzone w uczciwy i właściwy sposób:
- Twój skrypt / program bot zostanie zapisany w silniku orkiestracji w podfolderze
Players\[YourBotName]\
- Możesz użyć tego podfolderu,
Players\[YourBotName]\data
aby zapisać dowolne dane lub historię gry z bieżącego turnieju w trakcie jego trwania. Katalogi danych zostaną usunięte na początku każdego przebiegu turnieju. - Nie możesz uzyskać dostępu do katalogu Gracza innego gracza w turnieju
- Twój bot nie może mieć określonego kodu, który jest ukierunkowany na zachowanie innego konkretnego bota
- Każdy gracz może zgłosić więcej niż jednego bota do gry, o ile nie wchodzi w interakcje ani nie pomaga sobie wzajemnie.
Edycja - dodatkowe ograniczenia
- Jeśli chodzi o przepadki, nie będą one obsługiwane. Twój bot musi zagrać w jednym z 5 ważnych rozdań. Przetestuję każdego bota poza turniejem z losowymi danymi, aby upewnić się, że się zachowują. Wszelkie boty, które zgłaszają błędy (tj. Błędy przepadku), zostaną wykluczone z turnieju, dopóki nie zostaną naprawione.
- Boty mogą być pochodnymi, o ile zwięźle różnią się zachowaniem. Boty (w tym w innych językach), które zachowują się dokładnie tak samo jak istniejący bot, zostaną zdyskwalifikowane
- Istnieją już roboty spamujące dla następujących elementów, więc nie przesyłaj ponownie
- Rock - BartSimpson
- Papier - LisaSimpson
- Scissor - EdwardScissorhands
- Spock - Vulcan
- Jaszczurka - Khaleesi
- Pseudo losowy - SimpleRandomBot i FairBot
- Psuedo Random RPS - ConservativeBot
- Psuedo Random LV - Barney Stinson
- Boty nie mogą wywoływać usług zewnętrznych ani zasobów internetowych (ani niczego innego, co znacznie spowalnia szybkość / czas podejmowania decyzji przez mecze).
CasinoShakespeare
jest jedynym wyjątkiem, ponieważ bot został zgłoszony przed dodaniem tego ograniczenia.
Sheldor będzie aktualizował to pytanie tak często, jak to możliwe, z wynikami Turnieju, w miarę zgłaszania kolejnych botów.
Program orkiestracji / kontroli
Program do aranżacji wraz z kodem źródłowym dla każdego bota jest dostępny na github.
https://github.com/eoincampbell/big-bang-game
Szczegóły zgłoszenia
Twoje zgłoszenie powinno zawierać
- Imię twojego bota
- Twój kod
- Polecenie do
- uruchom bota z powłoki np
- ruby myBot.rb
- python3 myBot.py
- LUB
- najpierw skompiluj oba, a następnie uruchom je. na przykład
- csc.exe MyBot.cs
- MyBot.exe
Przesłanie próbki
BotName: SimpleRandomBot
Compile: "C:\Program Files (x86)\MSBuild\12.0\Bin\csc.exe" SimpleRandomBot.cs
Run: SimpleRandomBot [Arg1] [Arg2]
Kod:
using System;
public class SimpleRandomBot
{
public static void Main(string[] args)
{
var s = new[] { "R", "P", "S", "L", "V" };
if (args.Length == 0)
{
Console.WriteLine("V"); //always start with spock
return;
}
char[] myPreviousPlays = args[0].ToCharArray();
char[] oppPreviousPlays = args[1].ToCharArray();
Random r = new Random();
int next = r.Next(0, 5);
Console.WriteLine(s[next]);
}
}
Wyjaśnienie
Wszelkie pytania zadaj w komentarzach poniżej.
źródło
Odpowiedzi:
Kucyk (Python 2)
Opiera się to na bocie rock-paper-scissors, który napisałem jakiś czas temu dla wyzwania programistycznego pod koniec internetowej klasy Udacity . Zmieniłem to, aby uwzględnić Spocka i jaszczurkę, i wprowadziłem kilka ulepszeń.
Program ma 11 różnych prostych strategii, każda z 5 wariantami. Wybiera spośród nich na podstawie tego, jak dobrze by się spisali w ostatnich rundach.
Usunąłem strategię awaryjną, która grała losowo przeciwko silniejszym przeciwnikom. Myślę, że jest to bardziej zabawne.
Uruchom jako:
Edycja : Wprowadziłem niewielką zmianę, nastawiając się na najprostszą strategię (tj. Zawsze wykonuj ten sam ruch) w niepewnych przypadkach. To pomaga trochę nie próbować znaleźć zbyt skomplikowanych wzorców tam, gdzie ich nie ma, np. W botach takich jak ConservativeBot.
Uwaga : Próbowałem wyjaśnić podstawową strategię dopasowywania historii, której ten bot używa w poście dla mojego innego bota Dienstagu .
źródło
Markov, Ruby
Patrzy na dwa ostatnie ruchy przeciwnika i określa możliwe (i najprawdopodobniej) kontynuacje. Jeśli kombinacja nie została wcześniej wybrana, po prostu wykorzystuje zamiast tego wszystkie ruchy przeciwnika (jak dotąd). Następnie zbiera wszystkie możliwe odpowiedzi i wybiera losową.
Biegnij jak
źródło
ConservativeBot, Ruby
Nowe rzeczy są złe.
Biegnij jak
źródło
Fan Star Wars - Ruby
Pieprzyć cię, Spock
Uruchom to jak:
źródło
Barney Stinson - Lua
Mam tylko jedną zasadę: nowe zawsze są lepsze. Pieprzyć starą Jo Ken Po lub jakkolwiek to nazwiesz.
Uruchom to jak:
źródło
Boring Bot (Java)
Zakłada, że wszyscy zawsze grają to samo i odpowiednio planuje. Zazwyczaj jednak wybiera kamienie w więzach, bo czy wszyscy mają rację?
źródło
max
IocainePowder, Ruby
Oparta na (bezwstydnie skradzionej) strategii RPS tutaj . Wygląd bota wybiera przypuszczenie identyczne z botem Markowa, ale następnie zakłada, że przeciwnik odgadł, co zamierza wybrać, i wybiera ruch, aby go odpowiednio pokonać.
Zauważ, że właśnie dostosowałem podstawową ideę połączonej strategii, nie podążając za nią szczegółowo.
Biegnij jak
źródło
HuddleWolfTheConqueror - C #
HuddleWolf powraca i jest lepszy niż kiedykolwiek. Pokona Sheldora Zdobywcę we własnej głupiej grze. HuddleWolf jest wystarczająco inteligentny, aby identyfikować i zwalczać spamerów. Bardziej inteligentni przeciwnicy HuddleWolf wykorzystuje swoją wiedzę na temat podstawowych statystyk piątej klasy i wykorzystuje ważony rzut kostką na podstawie historii rozgrywek przeciwnika.
źródło
ToddlerProof
Ten dość głupi bot zakłada, że gra z małym dzieckiem, które będzie „ścigało” jego ruchy, zawsze próbując pokonać to, co zostało ostatnio rzucone. Jeśli bot zostanie pokonany kilka razy z rzędu, przeskakuje do nowego punktu wzoru. Opiera się na mojej strategii bicia mojego dużo młodszego brata. :)
EDYCJA :: Zmieniono długość serii strat wymaganych do skoku w losowe rzuty. Naprawiono także poważny błąd losowego skoku.
Zapisz jako
ToddlerProof.java
, skompiluj, a następnie uruchomjava ToddlerProof [me] [them]
źródło
Bart Simpson
„Dobry stary kamień! Nic nie przebije rocka!”
Uruchom jako
Lisa Simpson
„Biedny, przewidywalny Bart. Zawsze wybiera kamień.”
Uruchom jako
Lepiej Lisa Simpson
Czułam się źle, robiąc Lisę tak głupią, więc pozwoliłem jej losowo wybierać jedną z rąk, które pokonają rock. Wciąż głupia, ale w końcu jest Simpsonem. Może kredka utknęła w jej mózgu?
Uruchom jako
źródło
Echo
Napisane w C #. Kompiluj z
csc Echo.cs
. Biegnij jakEcho.exe ARG1 ARG2
.Przy pierwszym uruchomieniu Echo wybiera losową opcję. Za każdym razem po pierwszym Echo po prostu powtarza ostatnią akcję przeciwnika.
źródło
Vulcan, Ruby
Moje palce są sklejone.
Biegnij jak
(Myślę, że jest to jedyna strategia postaci dla twojego tła).
źródło
Tyrannosaurus, Godzilla, Barney ... Reguła jaszczurek. Czasami mają kłopoty i muszą zadzwonić do Spocka lub rzucić Kamieniem
źródło
BayesianBot, Perl (teraz v2!)
Przede wszystkim jest to wyjątkowy program. Zobaczysz w nim genialne połączenie statystyki i okropnej formy programowania. Ponadto ten bot prawdopodobnie łamie wiele zasad statystyki bayesowskiej, ale nazwa brzmi fajniej.
Podstawową istotą tego bota jest stworzenie 250 różnych modeli predykcyjnych. Każdy model ma postać „Biorąc pod uwagę, że grałem w kamień w ostatniej turze, a mój przeciwnik grał nożyczkami dwie tury temu, jest to rozkład prawdopodobieństwa dla następnego ruchu mojego przeciwnika”. Każdy rozkład prawdopodobieństwa ma postać wielowymiarowego rozkładu Dirichleta.
Każdej turze prognozy wszystkich odpowiednich modeli (zwykle 10) są mnożone razem, tworząc ogólną prognozę, która jest następnie wykorzystywana do ustalenia, które ruchy mają najwyższą oczekiwaną wypłatę.
Edycja 1: W tej wersji zmieniłem poprzednią dystrybucję i uczyniłem bota bardziej losowym, gdy przegrywa.
Istnieje kilka rzeczy, które mogą ulec poprawie, takich jak liczba modeli (250 to tylko 3 cyfry), wybór wcześniejszej dystrybucji (obecnie Dir (3,3,3,3,3)) i metoda łączenia prognoz. Poza tym nigdy nie zadałem sobie trudu znormalizowania rozkładów prawdopodobieństwa, co jest w tej chwili w porządku, ponieważ je mnożę.
Nie mam bardzo wysokich oczekiwań, ale mam nadzieję, że ten bot da sobie radę.
Uruchomiłem ten program tak:
źródło
DynamicBot
Dynamiczny bot prawie zawsze się zmienia. Naprawdę nie znosi się powtarzać
Język: Python 3.4.1
Polecenie:
python dynamicbot.py <history>
lub wpython3 dynamicbot.py <history>
zależności od systemuźródło
SmartBot - Java
Mój pierwszy wpis na cokolwiek na tej stronie!
Choć niezbyt kreatywna nazwa ...
SmartBot wyszukuje sekwencje ruchów, w których ruchy przeciwnika i / lub siebie są podobne do ruchów ostatnio wykonanych i odpowiednio planuje.
name = SmartBot
Myślę, że go uruchomię, popraw mnie, jeśli się mylę.
java -jar SmartBot.jar
Przypisuje ocenę za każdy możliwy następny ruch według liczby podobnych zdarzeń.
Lekko faworyzuje jaszczurki.
źródło
java ABot
powinien działać (pamiętaj, aby nazwać ten sam plik co klasa publiczna)SpockOrRock - PHP
W prawdziwym świecie większość ludzi instynktownie wybiera nożyczki. Ten bot wybiera Spocka lub Rocka, aby pokonać przeciętnego gracza. Nie przejmuj się poprzednimi rundami.
Biegnij z
php spockorrock.php
źródło
SlowLizard, Ruby
Po rozpoczęciu z Jaszczurką zawsze wybiera losowy ruch, który przewyższa poprzedni ruch przeciwnika.
Biegnij jak
źródło
LexicographicBot
Ten bot lubi porządkować swoje listy, więc wybierze odpowiedź o 1 wyższą niż jego przeciwnik w poprzedniej rundzie - chyba że przeciwnik wybrał Vulcan, wtedy losowo wybiera odpowiedź.
Oczekuje to, że ręka przeciwnika otrzyma drugie:
źródło
Werevulcan - Ruby
Uruchom jako
ruby werevulcan.rb
Wilkołak wygląda normalnie za dnia, ale kiedy księżyc wschodzi, jego uszy stają się spiczaste, a jego ruchy bardziej logiczne.
źródło
Analogizer - Ruby
Uruchom z
ruby analogizer.rb
. Poprawiłem logikę kodu, ale nie mam pojęcia, dlaczego wystąpiły błędy.Zakłada, że przeciwny bot zawsze reaguje na mój poprzedni ruch i albo wybiera coś, co by go pokonało, coś, co by go przegrało, lub ten sam ruch, być może z ograniczonego zestawu możliwych ruchów. Następnie wybiera najlepszy ruch, biorąc pod uwagę to założenie.
Tyle że pierwsze dziesięć ruchów jest zakodowanych na stałe: najpierw udaję, że znam tylko jaszczurkę, potem zakładam, że mój przeciwnik zawsze rzuca czymś, co pokonał ostatnią rzecz, którą rzuciłem, dopóki nie mam wystarczającej ilości danych do właściwej analizy.
źródło
Java - SelfLoathingBot
Bot rozpoczyna się losowo, następnie ~ 33%, aby przejść losowo, lub ~ 33%, aby zagrać zwycięską taktykę przeciwko którejkolwiek z wcześniejszych zagrań, z 50% wyborem zwycięskiej taktyki.
źródło
Analityk
Analityk analizuje niektóre rzeczy i robi pewne rzeczy, aby spróbować cię pokonać.
skompiluj
javac Analyst.java
i uruchom jakojava Analyst
źródło
Hazardzista - Python 2
Wbrew nazwie, w tym programie losowość jest używana tylko w pierwszej rundzie, gdy nie ma żadnych informacji. Zamiast tego, jego nazwa pochodzi od błędu gracza - przekonania, że jeśli zdarzenie losowe zdarzało się rzadziej w przeszłości, bardziej prawdopodobne jest, że w przyszłości. Na przykład, jeśli rzucisz uczciwą monetą 20 razy, a pierwsze 15 to główki, błąd gracza oznacza, że szanse na pozostałe rzuty są ogonami. Oczywiście jest to nieprawda; niezależnie od poprzednich rzutów, szanse pojawienia się reszki na uczciwej monecie wynoszą zawsze 50%.
Ten program analizuje historię przeciwnika, znajduje 2 ruchy, których użył najmniej do tej pory, i zakłada, że tym razem ruch przeciwnika będzie jednym z nich. Przypisując 2 do wygranej, 1 do remisu i 0 do przegranej, znajduje ruch z maksymalnym wynikiem w stosunku do tych dwóch przewidywanych ruchów i rzuca nim.
Brat hazardzisty - Python 2
Po przełączeniu
MODE
zmiennej na 0, program ten będzie działał w oparciu o powiązany błąd, czasami określany również mianem błędu gracza. Stwierdza, że jeśli zdarzenie losowe zdarzało się częściej w przeszłości, bardziej prawdopodobne jest, że w przyszłości. Na przykład, jeśli rzucisz monetą 20 razy, a pierwsze 15 to główki, ten błąd mówi, że pozostałe rzuty są bardziej prawdopodobne, ponieważ obecnie występuje seria. W trybie 0 program działa w ten sam sposób, z tym wyjątkiem, że zakłada, że przeciwnik wykona jeden z dwóch najczęściej wykonywanych ruchów.Tak więc, te dwa programy różnią się tylko jedną postacią. :)
źródło
Dienstag (Python 2)
Mój pierwszy wpis, Pony, wydaje się całkiem nieźle z całym drugim zgadywaniem (potrójne zgadywanie, ...) i meta rozumowaniem. Ale czy to w ogóle konieczne?
Oto Dienstag, mały przyjaciel Pony, z jedną z 55 strategii: Przewiduj następny ruch przeciwnika i pokonaj go.
Na dłuższą metę Dienstag wygrywa lub łączy się z każdym botem w pierwszej dziesiątce obecnej tabeli liderów. Z wyjątkiem Kucyka.
Uruchom jako:
Przyznaję, że kod jest nieco zaciemniony. Jeśli ktoś chciałby dowiedzieć się więcej na ten temat, mogę dodać wyjaśnienia.
Edycja: Oto
krótkiprzykładowy przewodnik wyjaśniający pomysł:Program pobiera własną historię i ruchy przeciwnika:
sys.arg[1] = 'LLVLLVL', sys.arg[2] = 'RPSPSSP'
Historia jest łączona w listę par, a ruchy są tłumaczone na liczby (R = 0, ...):
hist = [[4, 0], [4, 1], [3, 2], [4, 1], [4, 2], [3, 2], [4, 1]]
Liczba rozegranych do tej pory rund jest ustalana:
N = 7
Podstawową ideą jest teraz poszukiwanie najdłuższego nieprzerwanego łańcucha dokładnie ostatnich ruchów we wcześniejszej historii. Program śledzi, gdzie taki łańcuch kończy się na liście
cand
(dla „kandydatów”). Na początku, bez sprawdzania, bierze się pod uwagę każdą pozycję w historii z wyjątkiem ostatniej:cand = [0, 1, 2, 3, 4, 5]
Teraz długość możliwych łańcuchów zwiększa się krok po kroku. Dla długości łańcucha
l = 1
szuka poprzednich wystąpień ostatniej pary ruchów[4, 1]
. Można to znaleźć w pozycji historii1
i3
. Tylko te są przechowywane nacand
liście:cand = [1, 3]
Następnie
l = 2
sprawdza, który z potencjalnych kandydatów został poprzedzony parą ruchów od drugiego do ostatniego[3, 2]
. Dotyczy to tylko pozycji3
:cand = [3]
Co
l = 3
więcej, nie ma wcześniejszych łańcuchów o tej długości icand
byłyby puste. W tym przypadku zachowany jest ostatni elementcand
:cand = [3]
Bot zakłada, że historia się powtórzy. Po ostatnim
[3, 2], [4, 1]
wystąpieniu kaina nastąpił po nim[4, 2]
. Zatem przeciwnik grał2
(nożyczkami), które mogą zostać pokonane przez(2+1)%5 = 3
(Spock) lub(2+3)%5 = 0
(rock). Bot odpowiada, z pierwszą lub drugą alternatywą, zależnie od tego, czyN
jest nieparzysty, czy nawet po prostu wprowadza pewną wariancję.Tutaj
3
wybierany jest ruch, który jest następnie tłumaczony z powrotem:print 'V'
Uwaga: Dienstag ma złożoność czasową O ( N 2 ) do powrotu następnego ruchu po N rundach. Kuc ma złożoność czasową O ( N 3 ). W tym aspekcie są one prawdopodobnie znacznie gorsze niż większość innych pozycji.
źródło
Bash Rocks
Czy cygwin to zbyt wiele, by prosić o środowisko uruchomieniowe?
bashrocks.sh:
i uruchom tak:
źródło
R
. ;)dos2unix
plik w cygwinie przed jego uruchomieniem?Algorytm
Algorytm dla samego posiadania.
Ponieważ zawsze robi się coś bezpieczniej, im bardziej skomplikowane, tym lepiej.
Nie zrobiłem jeszcze poważnej matematyki, więc ten algorytm może nie być tak skuteczny.
Program Python 2:
python algorithm.py
źródło
FairBot, Ruby
Zacznijmy prosto.
Biegnij jak
źródło
ViolentBot
Ten bot wybiera najbardziej brutalną opcję w oparciu o poprzedni wybór przeciwników:
Uruchom jako
źródło
Haskell - MonadBot
Nie wiem, czy ghc jest uważany za „w granicach rozsądku”, ale załóżmy, że tak. Strategią tego bota jest przeciwstawienie się najpopularniejszemu ruchowi przeciwnika.
Kod:
źródło