EDYCJA: Ostatnio moje pytanie zostało zaproponowane jako duplikat 2048 Bot Challenge . Chciałbym podkreślić, że to pytanie różni się od tego pytania i wymaga przemyślenia odpowiedzi inaczej niż to pytanie. 2048 Bot Challenge poprosił użytkownika o utworzenie bota, który będzie uruchamiany przez godzinę, przy czym najwyższy wynik to wynik użytkownika. Dodatkowo miał limit 555 bajtów. Moje wyzwanie uruchamia kod znacznie rzadziej, tylko 3 razy. Twój wynik jest obliczany na podstawie średniego wyniku z tych trzech razy i podzielenia przez długość znaków kodu golfowego. Moje pytanie zachęca wpisy do bycia „mądrzejszymi” i nie próbowania uzyskiwania najwyższego wyniku brutalną siłą.
-
EDYCJA: Metoda get została zmieniona na getTile, aby uniknąć konfliktu ze słowem kluczowym JS get. Dodatkowo dodano sekcję z wysokim wynikiem.
Niedawno stworzyłem witrynę, która pozwala kontrolować popularną grę 2048 za pomocą JavaScript. Moja witryna jest połączona tutaj:
W jaki sposób:
Edytor asów znajduje się nad planszą. Umieszczasz w nim kod, który jest uruchamiany raz na 250 ms lub 4 razy na sekundę. To się nazywa cykl.
Użyj następujących metod do sterowania tablicą. Nie możesz używać klawiszy strzałek.
up(); //move up
down(); //move down
left(); //move left
right(); //move right
move(integer); //integer is a direction. 0:up,1:right,2:down,3:left
getTile(y,x); //gets the value of the tile in position y,x on the board. See diagram
Dla Twojej wygody zdefiniowano następujące zmienne:
eother //boolean, alternates every cycle
frozen //integer, counts how many cycles the board has remained stationary
lastDir //integer, indicates the last direction that was tried to move in
//uses same format as the move method above.
startup //boolean, will always be true when the game first starts
//you can change it as you wish
a
b //a b and c are all persistant variables, they do not change each cycle
c //any other variables defined in the cycle will be reset every time
Zasady:
- Bez przypadkowości, musisz użyć logiki. (Tak, wiem, że przykładowy kod używa losowo).
- Żadnego zaczepiania się w funkcje gry ani oszukiwania w inny sposób
- Ogólnie rzecz biorąc, spróbuj wywołać tylko jedną metodę ruchu na cykl. Jeśli używasz więcej, jest w porządku, ale wkręca się w animację
- Plansza musi rozpocząć się w losowym stanie, bez modyfikacji stanu sprzed gry
- W swoim poście musisz podać zarówno nieskompresowaną, jak i golfową wersję kodu.
- Musisz podać link do strony, która już ładuje nieskompresowaną wersję twojego kodu, udostępnianą przez PasteBin (na przykład ... thatcoolidea.com/2048?i=pH18GWtu ładuje przykładowy kod).
Punktacja:
- Twój kod zostanie oceniony przeze mnie.
- Część A twojego wyniku to średnio 3 serie kodu, zaokrąglone w dół.
- Część B twojego wyniku to długość znaków twojego golfowego kodu.
- Twój końcowy wynik to Część A podzielona przez Część B
Zwycięzca zostanie unieśmiertelniony jako przykładowy kod na stronie, jeśli sobie tego życzy, i potwierdzony w komentarzu do kodu.
Powodzenia! Mam nadzieję, że podoba Ci się wyzwanie.
Aktualny najlepszy wynik 225,22 - Zamrażarka - użytkownik3217109
źródło
Odpowiedzi:
Sinker / Shaker, 65 bajtów
Oto moje . Jest tak ślepy i prosty, jak to tylko możliwe.
Bez kompresji (ish) ...
Wszystko, co robi, to powtarza w dół, w prawo, w dół, w lewo itp. I uderza w górę, jeśli utknie. Nie zawsze radzi sobie bardzo dobrze, ale czasami dostaje 512 sekund. Mój najlepszy wynik podczas testów wynosił 7520.
źródło
Sygnalizacja świetlna -
2321 bajtówTo jest link.
Będzie się poruszać naprzemiennie w górę i w prawo, z wyjątkiem sytuacji, gdy tablica pozostanie nieruchoma przez ostatnie dwa ruchy, w którym to przypadku przesunie się odpowiednio w dół i w lewo.
Moje oryginalne, funkcjonalnie równoważne zgłoszenie miało 23 bajty i otrzymało 182,72:
źródło
Whirlpool -
372117 bajtów - Wynik: 211,22Zdecydowałem się na podejście „mniej znaczy więcej”. Mój kod jest prostym projektem, który próbuje iść w górę, w prawo, w dół, w lewo ... Będę pracował nad uczącą się sztuczną inteligencją, aby znaleźć bardziej optymalny sposób podejścia do układanki.
Optymalizator pomógł skrócić
a
inicjalizację.Sam pomógł skrócić
a
inicjalizację, usuniętyvar
.Nie golfowany?
Mój najlepszy wynik w tym AI to 5120.
Zamrażarka - 12 bajtów - Wynik: 225,22
Ten bot ma priorytet ruchu. Próbuje wejść w górę. Jeśli może pójść w górę, idzie w prawo. Jeśli nie może pójść dobrze, spada. Jeśli nie może spaść, idzie w lewo.
James Bond Wyjaśnienie
Zaszyfrowany kod deszyfruje, mówiąc:
Optymalizator powinien był odegrać w golfa swój odszyfrowany kod. To mogło być #Optimized.
źródło
a
. Należy to dodać do długości kodu.a
raz zdefiniować / zainicjować i zapomnieć o tym, ale jeśli zamkniesz kartę / okno i wrócisz do niego, nie sądzę, aby to działało. Dlatego musiałem dodać bit if (startup) do mojego.var a=a|0;move(a++%4)
- 21 bajtówa
bez robieniavar a
Wieszak - 20 bajtów
Oficjalny wynik: 224,87 - 2 miejsce o 0,35 punktu
Ten bot używa podejścia w dół, w lewo, w dół, w prawo, ale z niezwykłą funkcją, że nigdy się nie podniesie. Nie jestem pewien, jak oceniać przypadki, w których się zawiesza i nie kończy, ani czy fakt, że to się dzieje, czyni to nielegalnym. Oto jednak:
Wzór inicjalizacji dzięki @Optimizer.
W moich 3 przebiegach testowych uzyskał 4284, 6352 i 4232, średnio 4956. Będę aktualizować po uruchomieniu oficjalnego testu.
Alternatywna wersja, która się zawiesza (27 bajtów):
źródło