Risultati finali disponibili
introduzione
Dopo il mio precedente KOTH con temi pesanti ( guerra di fantasia , pandemia in tutto il mondo ...), sono tornato con un nuovo gioco spensierato. Questa volta, ti trovi ad affrontare una situazione "da gioco da tavolo". Una pila di monete sottosopra è posta al centro di un tavolo davvero grande e sei determinato a ottenere la tua parte del bottino!
Glossario
Monete : token che possono essere ruotati o sbloccati.
Unflipped : monete posizionate sul tavolo con il loro valore rivolto verso il basso. Questo è lo stato predefinito delle monete.
Lanciato : monete posizionate sul tavolo con il loro valore rivolto verso l'alto.
Locale : si riferisce alla tua pila di monete.
Globale : si riferisce alla pila di monete al centro.
Principio
All'inizio del gioco, ogni giocatore inizia con 0 punti e 0 monete (lanciate o sbloccate). Il gioco è a turni. Durante il loro turno, i giocatori possono effettuare fino a 3 azioni interagendo con la pila di monete al centro del tavolo, la propria pila di monete o con altri giocatori.
L'ordine di gioco è definito in modo casuale all'inizio del gioco. L'ordine dei giocatori nella lista degli argomenti rappresenta l'ordine dei turni e va da sinistra a destra in quella lista. "Successivo" e "Precedente" si riferiscono rispettivamente a "a destra in quell'elenco" e "a sinistra in quell'elenco" con un ciclo se sei l'ultimo di entrambi i lati.
Il gioco dura 50 round o fino a quando non ci sono 0 monete al centro alla fine del turno di un giocatore (il che significa che finirai le tue 3 azioni anche se il mazzo è vuoto dopo la tua prima azione e puoi rimettere le monete per lasciare il gioco continua). Il numero iniziale di monete globali viene definito casualmente con questa formula:
(2 ^ nb_players) + (nb_players * 10) - random(1 + (nb_players ^ 2))`
Ogni azione ti farà guadagnare punti (o ti farà perdere alcuni) e alla fine del gioco, ogni moneta che hai verrà aggiunta ai tuoi punti ( -1 per non lanciato, +2 per lanciato ). Vince il giocatore con il punteggio più alto.
Il controller ti fornisce input tramite argomenti di comando e il tuo programma deve emettere tramite stdout.
Sintassi
Ingresso
Ogni volta che viene chiamato il tuo programma, riceverà argomenti in questo formato:
Round;YourPlayerId;Coins;PlayerId_Points_Flipped_Unflipped;PlayerId_Points_Flipped_Unflipped;...
I round sono 1 indicizzati.
Esempio di input
6;2;52;1_20_3_12;0_-2_0_1;2_12_1_0
Qui vedi che è il 6 ° round e sei il giocatore 2. Ci sono 52 monete nella pila centrale. Hai 12 punti, 1 moneta lanciata e 0 moneta sganciata. I punti possono essere negativi.
Produzione
Devi produrre tre caratteri (nessuno spazio, nessun separatore), ognuno dei quali corrisponde a un'azione che farai in questo turno. L'ordine dei personaggi determina l'ordine delle azioni. È possibile generare le stesse azioni più volte. Nel caso in cui non ci siano abbastanza monete per completare la tua azione, utilizzerà il massimo delle monete disponibili e conteggerà i punti solo per le monete utilizzate.
N
: Non fare nulla
1
: prendi 1 moneta dalla pila centrale [Effetti: +1 locale sbloccato / -1 punto / -1 globale sbloccato]
2
: Prendi 2 monete dalla pila centrale [Effetti: +2 locale sbloccato / -2 punti / -2 sbloccato globale]
3
: prendi 3 monete dalla pila centrale [Effetti: +3 locali sbloccati / -3 punti / -3 globali sbloccati]
A
: rimetti 1 moneta dalla pila [Effetti: -1 locale sbloccato / +1 punto / +1 sbloccato globale]
B
: rimetti 2 monete dalla tua pila [Effetti: -2 locali sbloccati / +2 punti / +2 sbloccati globali]
C
: rimetti 3 monete dalla tua pila [Effetti: -3 locali sbloccati / +3 punti / +3 global unflipped]
X
: rimuovi 1 moneta dalla tua pila[Effetti: -1 locale sbloccato / 0 punti]
Y
: rimuovi 2 monete dalla tua pila [Effetti: -2 locale sbloccato / 0 punti]
Z
: rimuovi 3 monete dalla tua pila [Effetti: -3 locale sbloccato / 0 punti]
R
: ruota monete al giocatore precedente [Effetti: -1 punto per sbloccato ricevuto, +2 punti per ribaltato ricevuto / si applica a tutti i giocatori]
T
: Ruota le monete al giocatore successivo [Effetti: -1 punto per sbloccato ricevuto, +2 punti per ribaltato ricevuto / si applica a tutti i giocatori]
F
: Lancia 1 moneta [Effetti: -1 locale sbloccato / +1 locale lanciato / +2 punti]
U
: Sblocca 1 moneta [Effetti: +1 locale sbloccato / -1 locale lanciato / -2 punti]
Esempio di output
2FF
: Prende due monete e lancia due monete, segnando -2 + 2 + 2 = 2 points
Se l'output non è corretto, il controller assumerà NNN
.
controllore
Puoi trovare il controller su GitHub . Contiene anche due samplebot, scritti in Java. Per farlo funzionare, controlla il progetto e aprilo nel tuo IDE Java. Il punto di ingresso nel main
metodo della classe Game
. Java 8 richiesto.
Per aggiungere i bot, prima devi avere la versione compilata per Java (file .class) o i sorgenti per le lingue interpretate. Inseriscili nella cartella principale del progetto. Quindi, crea una nuova classe Java nel players
pacchetto (puoi fare un esempio sui bot già esistenti). Questa classe deve implementare Player
per sovrascrivere il metodo String getCmd()
. La stringa restituita è il comando shell per eseguire i tuoi robot. È possibile ad esempio fare un lavoro bot rubino con questo comando: return "C:\Ruby\bin\ruby.exe MyBot.rb";
. Infine, aggiungi il bot nella matrice dei giocatori nella parte superiore diGame
classe.
Regole
- I bot non devono essere scritti per battere o supportare altri bot specifici.
- La scrittura su file è consentita. Scrivi a "yoursubmissionname.txt", la cartella verrà svuotata prima dell'inizio del gioco. Altre risorse esterne non sono consentite.
- Il tuo invio ha 1 secondo per rispondere.
- Fornisci comandi per compilare ed eseguire i tuoi invii.
Lingue supportate
Proverò a supportare tutte le lingue, ma deve essere disponibile online gratuitamente. Fornire istruzioni per l'installazione se non si utilizza un linguaggio "tradizionale".
A partire da ora, posso eseguire: Java 6-7-8, PHP, Ruby, Perl, Python 2-3, Lua, R, node.js, Haskell, Kotlin, C ++ 11.
Risultati finali
Questi sono i risultati di 100 giochi (i punti vengono sommati):
1. BirdInTheHand: 1017790
2. Balance: 851428
3. SecondBest: 802316
4. Crook: 739080
5. Jim: 723440
6. Flipper: 613290
7. Wheeler: 585516
8. Oracle: 574916
9. SimpleBot: 543665
10. TraderBot: 538160
11. EgoisticalBot: 529567
12. RememberMe: 497513
13. PassiveBot: 494441
14. TheJanitor: 474069
15. GreedyRotation: 447057
16. Devil: 79212
17. Saboteur: 62240
I risultati individuali dei giochi sono disponibili qui: http://pasted.co/63f1e924 (con monete iniziali e numero di round per partita).
Un premio di 50 reputazioni viene assegnato al vincitore: Bird In The Hand di Martin Büttner .
Grazie a tutti per la vostra partecipazione, alla prossima KOTH ~