Twój kumpel geolog prawie kopnął drzwi do biura, gdy wpadł do środka z szeroko otwartymi oczami z podniecenia, i poprosił cię, abyś poszedł z nim do miejsca, które właśnie odkrył. Po drodze wyjaśnia, że myśli, że dosłownie uderzył w złoto. Jedynym problemem jest to, że jest pochowany głęboko pod ziemią w jaskini z bardzo niestabilnym dachem. Jest zbyt niebezpieczny, by strzelać, więc chce, abyś zaprogramował jednego z jego robotów eksplorujących jaskinię, aby zebrał jak najwięcej złota, zanim zdąży go podnieść. Wspomina również, że zbadał jaskinię i znalazł dziką przyrodę, która mogłaby być szkodliwa dla robotów, a także, że upuścił tam sprzęt, który może być nadal użyteczny. Każdy robot jest wyposażony w dwa ramiona i szereg czujników. Po przybyciu na miejsce mówi, że planuje zrekrutować więcej programistów,
A teraz do drobiazgów. Czujniki przekazują informacje do programu jako znaki ASCII. Oto lista tego, co oznacza każda postać, oraz opis wszystkiego, co bot może napotkać w jaskini:
Code Name/Description
Y Your bot
You do things
@ Other bots
They do other things
- Ground
This doesn't do things
C Centipede
These will bite you and leave a poison effect
The bite will cost 1 health
The poison effect will last for 3 turns, costing 2 health each turn
B Bats
If bats end up in the same space you are, your bot runs in a random direction during its turn rather than what you told it to do
L Lion (because reasons)
Lions deal heavy damage, 10 health, each time they attack
F Food
Eating this will give you 5 health
Can only be used once
W Water
Drinking this will cure poison effects early
Can only be used once
R Revealer
This will increase the range of your visibility to an 11x11 grid
The extra range will only be 75% correct, but the original range won't be effected
K Knife
You do twice as much damage to other bots if you have a knife
G Gold
The whole reason you're doing this in the first place
N Nurse Nina
She mend you good
Restores your health by 10 while you occupy the same space as her
} Boulder
You can't walk over boulders, and neither can anything else
P Pit
If you fall in a pit, you will be stuck for 3 turns
Wielkość jaskini rośnie w zależności od liczby botów. Zaczyna się jako 30x30 i dostaje dodatkowe 10x10 dla każdego bota. Więc 2 boty zbadają jaskinię 50x50.
Boty zaczynają od 20 zdrowia, ale nie mają maksymalnego limitu zdrowia.
Wejście:
Otrzymasz dane wejściowe za pośrednictwem STDIN w następującym formacie:
20,5,10,1,0,True,False <-health, number gold pieces, number of turns your bot has lasted, number of until the poison wears off, number of turns until you are no longer stuck in a pit, if you have a revealer, if you have a knife
-----
-G}--
--Y-L
-C---
---B-
Pierwszy wiersz zawiera informacje o twoim bocie, a reszta to siatka, którą widzi twój bot. Jeśli twój bot jest przy jednej z 4 ścian jaskini, otrzymasz siatkę, która wygląda mniej więcej tak (w przypadku drogi na Zachód):
---
}--
Y--
---
---
Jaskinia nie zawija się, podobnie jak twoja wizja. Ściany jaskini nie są oznaczone, jedyną wskazówką, że bot otrzymuje informację, że zbliża się do ściany, jest zmniejszona widoczność. Dzięki Revealer możesz uzyskać coś takiego:
--------C--
LW--------B
---K-N-----
--------BR-
-F---------
--B--Y---@N
-W@---F----
------K-F--
----@-}----
R@---G}--}-
--------G-R
Wynik:
Otrzymujesz dwa ruchy na turę, które wypisujesz w następującym formacie:
MNNANW <- Moves are groups of 3 characters representing the action and the direction
Możliwe działania to:
M Move - Move your bot in the specified direction
A Attack - Attack the square in the specified direction
H Hold - Do nothing
Możliwe kierunki są następujące:
NN - North (up)
NE - Northeast (up-right)
EE - East (right)
SE - Southeast (down-right)
SS - South
SW - Southwest
WW - West
NW - Northwest
Ruchy są stosowane od lewej do prawej.
Okazuje:
Włącza postęp w następujący sposób:
Efekty zatrucia są stosowane do każdego gracza, który został otruty
Nie-boty poruszają się i atakują
2a. Lwy, stonogi i nietoperze poruszają się losowo
2b. Lwy i stonogi zaatakują wszystko, co bezpośrednio do niej przylega (w tym po przekątnej)
2c. Efekt nietoperza zostanie zastosowany do bota tylko wtedy, gdy znajduje się na tym samym polu co nietoperz
2d. Pielęgniarka Nina pozostanie w miejscu przez 3 tury, a następnie przeskoczy do miejsca przypadkowego.
Boty się poruszają
3a. Jeśli twój bot podaje nieprawidłowe dane wyjściowe, nie ruszy się
3b. Twój bot będzie próbował zbliżyć się do miejsca wyznaczonego przez wyjście tak blisko, jak to możliwe (więcej informacji znajduje się na dole)
3c. Jeden atak na stonoga, lwa lub nietoperza go zabije
3d. Zaatakowanie innego bota bez noża spowoduje 5 obrażeń i 10 za pomocą noża
Zasady:
Trzymaj się popularnych języków, które można uruchomić w systemie OS X lub Linux.
Opcjonalnie możesz zapisać do pliku danych o wielkości do 1 KB
Punktacja:
Boty będą znajdować się tylko w jaskini, dopóki nie pozostanie tylko jedna lub do upływu 50 tur, w zależności od tego, co nastąpi wcześniej. Twój bot zostanie oceniony na podstawie sumy zebranych złotych monet i liczby tur.
Kod kontrolera można pobrać do testowania tutaj (utwórz folder o nazwie „boty” w tym samym katalogu, w którym go pobrałeś, i umieść swojego bota w „botach”). Aby go uruchomić, potrzebujesz NumPy. Możesz go przekopać, ale będziesz musiał usprawiedliwić bałagan ...
Oto kod dla losowego bota:
#!/usr/bin/python
import random as r
a = ['M','A','H']
d = ['NN','NE','EE','SE','SS','SW','WW','NW']
print(a[r.randint(0,2)]+d[r.randint(0,7)]+a[r.randint(0,2)]+d[r.randint(0,7)])
**** Twój bot zawsze będzie poruszał się w ogólnym kierunku określonym przez twój wynik, ale jeśli przeszkadza mu skała lub ściana, dokładny kierunek zależy od okoliczności. Na przykład, jeśli twój bot jest przy ścianie taki:
---
}--
Y--
---
---
a twój wynik to
MNWMSW
twój bot przesunie się o jedno pole w dół. Nie mógł poruszać się na północ ani na zachód, więc ruch nie przyniósł żadnego efektu. Mógł przenieść na południe (i zrobił), ale nie mógł przenieść na zachód. Gdyby jednak twój bot próbował przenieść się na północny wschód, trafiłby bezpośrednio do tego miejsca (ruch po przekątnej jest ukośny, a nie proceduralny)
Tabela liderów
Są to średnie wyniki 4 gier.
The bot of Survival: 54.75
Coward: 52.25
Pufferfish: 50.00
Randombot: 50.00
Indiana Jones: 47.50
TheoremBot: 46.50
źródło
Odpowiedzi:
Indiana Jones, Python 2
Ten bot niczego się nie boi. Spróbuje zdobyć złoto; a jeśli nie będzie w stanie go znaleźć, spróbuje dźgnąć przeciwników nożami.
źródło
line.index('Y')
zadziałało - wygeneruje błąd, jeśli „Y” nie będzie w linii, aleline.find('Y')
zwróci -1, jeśli „Y” nie będzie w linii. W przeciwnym razie jest świetnie!MSNMSN
, co jest nieprawidłowe.Tchórz, python3
Tchórz zawsze ucieka przed potencjalnymi zagrożeniami.
Jeśli jednak poczuje się bardzo silny, nagle zacznie amok i dźgnie wszystko w pobliżu.
Problem z obecną implementacją polega na tym, że polecenia przenoszenia są wydawane bez wiedzy, czy jest to pierwszy, czy drugi ruch.
źródło
Bot przetrwania - Python 2
Edycja: dodano lepsze unikanie pitów.
źródło
Rozdymka, Python 3+
Jestem tylko tą osobą.
źródło