Sei un globo di melma. Naturalmente, essendo melma, devi trasudare su più area possibile. Ma ci sono altri 3 slime che vogliono fare esattamente la stessa cosa. Chi sarà la melma superiore?
Descrizione
Tutte le melme saranno raccolte in un'arena. I giudici (vale a dire il programma di controllo) passeranno attraverso un elenco esaustivo di tutte le possibili combinazioni di 4 melme, le posizioneranno sugli angoli di un tavolo e osserveranno per vedere quale melma trasuda sulla maggior parte dell'area.
I tuoi slime possono compiere una delle 3 azioni per turno: allargare, saltare o unire. Ulteriori descrizioni sul significato di questi significati saranno fornite nella sezione Output .
Tavola / Arena
L'arena sarà una tavola quadrata (attualmente 8x8, ma questo potrebbe cambiare in futuro). Ecco un esempio di arena di un gioco in corso:
11111222
11111444
11.22444
.1222.4.
333.3244
33333.44
333...44
333....4
La melma è rappresentata dai numeri da 1 a 4 (giocatori da 1 a 4) e lo spazio vuoto è rappresentato da un punto ( .
). Inizialmente, il tabellone inizia come tutto lo spazio vuoto ad eccezione di una singola unità della melma del giocatore 1 nell'angolo in alto a sinistra, il giocatore 2 in alto a destra, il giocatore 3 in basso a sinistra e il giocatore 4 in basso a destra.
Le coordinate sono rappresentate dall'indice di riga e colonna in base 0, per una leggibilità nel codice. Ad esempio, le coordinate (3, 6) rappresentano il 7o quadrato nella 4a fila (nell'esempio sopra, a 4
). (Ciò semplifica l'accesso ai quadrati:. board[coords.x][coords.y]
) Ecco un'illustrazione visiva:
(0, 0) (0, 1) (0, 2)
(1, 0) (1, 1) (1, 2)
(2, 0) (2, 1) (2, 2)
Ingresso
L'input del tuo programma sarà quale giocatore sei (1, 2, 3 o 4), una virgola ( ,
), quindi il contenuto del tabellone / arena (con le nuove righe sostituite da virgole). Ad esempio, se tu fossi il giocatore 3 nello scenario sopra, il tuo input sarebbe:
3,11111222,11111444,11.22444,.1222.4.,333.3244,33333.44,333...44,333....4
Produzione
Il tuo programma deve generare 4 numeri interi. I primi due sono rispettivamente l'indice di riga e di colonna della melma che si desidera spostare, mentre i successivi due sono l'indice di riga e colonna di dove si desidera spostarli.
Ci sono tre scelte che hai in ogni turno: Distribuire, saltare o unire.
Diffusione
Per diffondersi, le coordinate del bersaglio devono essere esattamente a un quadrato di distanza dalla melma che si sta spostando e il quadrato in corrispondenza delle coordinate del bersaglio deve essere spazio vuoto. Durante la diffusione, viene creata una nuova melma sulle coordinate target e la vecchia melma non viene rimossa. Dopo aver creato la nuova melma, tutte le melme nemiche nelle 8 caselle attorno a questa nuova melma vengono convertite nel giocatore che si è mosso.
Ad esempio, con la scheda in Fig. 1, se il giocatore 1 dovesse uscire
0 1 1 2
, il risultato sarebbe la scheda in Fig. 2.1. 2. 11.22 11.12 1..22 1.112 ..22. ..11. ..... .....
Saltare
Per saltare, le coordinate del bersaglio devono essere esattamente a due quadrati di distanza dalla melma che viene spostata e il quadrato in corrispondenza delle coordinate del bersaglio deve essere spazio vuoto. Durante il jupming, viene creata una nuova melma alle coordinate del bersaglio e la vecchia melma viene rimossa. Dopo aver creato la nuova melma, tutte le melme nemiche nelle 8 caselle attorno a questa nuova melma vengono convertite nel giocatore che si è mosso.
Ad esempio, con la scheda in Fig. 1, se il giocatore 1 dovesse uscire
0 1 2 3
, il risultato sarebbe la scheda in Fig. 2.1. 2. 11..2 1...2 1...2 1...1 ....2 ...11 ...22 ...11
Merge
Per unire, le coordinate del bersaglio devono essere esattamente a un quadrato di distanza dalla melma che si sta spostando e il quadrato alle coordinate del bersaglio deve essere la stessa melma del giocatore. Durante l'unione, la vecchia melma viene rimossa. Quindi, tutti gli spazi vuoti negli 8 quadrati attorno alla melma bersaglio vengono convertiti nel giocatore che si è mosso (non includendo la vecchia melma in movimento).
Ad esempio, con la scheda in Fig. 1, se il giocatore 1 dovesse uscire
0 1 1 2
, il risultato sarebbe la scheda in Fig. 2.1. 2. 11..2 1.112 1.1.2 11112 ....2 .1112 ..222 ..222
Puoi anche passare, semplicemente emettendo coordinate non valide (es. 0 0 0 0
).
Regole e vincoli
Regole aggiuntive sono:
- È possibile leggere e scrivere file nella propria cartella per conservare i dati (gli invii verranno archiviati
players/YourBotName/yourBotName.language
), ma non è possibile modificare o accedere a qualsiasi altra cosa al di fuori di esso. È vietato l'accesso a Internet. - Il tuo invio potrebbe non essere codificato specificamente per aiutare o danneggiare un altro invio. (Potresti avere più invii, ma non devono interagire in modo specifico tra loro in alcun modo.)
- La tua presentazione non deve richiedere più di 0,1 secondi per turno. Se l'invio richiede 0,105 secondi di tanto in tanto, va bene, ma potrebbe non durare significativamente più a lungo di questo limite di tempo. (Questo è principalmente un controllo di integrità per evitare che i test richiedano troppo tempo.)
- Il tuo invio non deve essere un duplicato esatto (cioè usa la stessa identica logica) di un altro, anche se è in una lingua diversa.
- La tua richiesta deve essere una richiesta seria. Questo è basato sull'opinione, ma se la tua richiesta non sta chiaramente cercando di risolvere la sfida (es. Se passi ogni turno), sarà squalificata.
Se il tuo invio infrange una di queste regole o non segue le specifiche, verrà squalificato, rimosso da playerlist.txt
e il gioco ricomincerà dall'inizio. Se la tua richiesta è squalificata, lascerò un commento sul tuo post che spiega perché. Altrimenti, il tuo invio verrà aggiunto alla classifica. (Se non vedi il tuo contributo in classifica, non hai commenti esplicativi sul tuo post e hai pubblicato il tuo contributo prima del tempo "Ultimo aggiornamento" qui sotto, per favore dimmelo! Potrei averlo inavvertitamente ignorato.)
Nella voce, includere:
- Un nome.
- Un comando di shell per eseguire il programma (per esempio,
java MyBot.java
,ruby MyBot.rb
,python3 MyBot.py
, etc.).- Nota che l'input (giocatore e mappa) verrà aggiunto a questo come argomento della riga di comando.
- I programmi saranno testati su Ubuntu 14.04, quindi assicurati che il tuo codice possa essere eseguito (liberamente) su di esso.
- Un numero di versione, se il codice funziona in modo diverso su versioni diverse della tua lingua.
- Il codice del tuo bot.
- Istruzioni su come compilare il codice, se necessario.
Codice controller / test, esempio bot
Il codice del controller è scritto in C ++ e può essere trovato su Github . Ulteriori istruzioni su come eseguire e testare il codice sono disponibili qui.
simplebot.rb
, un bot molto semplice che diffonde o salta una melma casuale in una posizione casuale ogni turno, è anche pubblicato su Github .
Punteggio e classifica
Quando tutti i quadrati sul tabellone sono riempiti, il gioco termina e vengono calcolati i punteggi. Il punteggio finale di un giocatore è la quantità di quadrati che contengono la loro melma alla fine del gioco. Se sono passati 2000 turni (500 per ogni giocatore) e il gioco non è ancora terminato, il gioco finirà comunque e i punteggi verranno riportati come se il gioco fosse terminato.
Alla fine del torneo, i punteggi di tutte le partite verranno calcolati in media per calcolare il punteggio finale di ciascun giocatore, che verrà pubblicato nella classifica. Non ci sono termini per la presentazione; Continuerò ad aggiornare periodicamente la classifica man mano che arrivano nuovi invii.
Sono necessari 4 invii fino a quando non viene visualizzata una classifica reale.
+--------------------------+-----------+--------------------+
| Name | Avg Score | Last Updated (UTC) |
+--------------------------+-----------+--------------------+
| GreedySlime | 47.000 | Jul 22 10:27 PM |
| Jumper | 12.000 | Jul 22 10:27 PM |
| ShallowBlue | 5.000 | Jul 22 10:27 PM |
| Lichen | 0.000 | Jul 22 10:27 PM |
+--------------------------+-----------+--------------------+
Ultimo aggiornamento: 22 lug 22.27 (UTC).