Avviso: questa sfida del re della collina è stata completata. Ciò significa che il segno di spunta verde, che è stato assegnato a C5H8NNaO4 per la loro iscrizione, The Observer non verrà spostato in nessuna nuova risposta.
Puoi ancora inviare nuove iscrizioni, ma potrebbero esserci ritardi nei nuovi tornei in corso poiché non sto più controllando attivamente le nuove iscrizioni.
introduzione
In questa sfida, stai giocando a un gioco arcade intitolato The Ultimate Samurai Showdown Ultimate Edition versione speciale 2.0 Alpha Alpha Turbo (o solo Ultimate Samurai Showdown in breve). I tuoi avversari? Nient'altro che gli altri membri di Programming Puzzles & Code Golf!
Come ci si potrebbe aspettare da un gioco arcade PPCG, non si gioca a Ultimate Samurai Showdown direttamente a , ma si scrive piuttosto un programma che giocherà il gioco per te. Questo programma combatterà contro i programmi presentati da altri utenti in duelli uno contro uno. Il programma più qualificato sarà incoronato Ultimate Samurai di PPCG e gli verrà concesso il segno di spunta verde della leggenda.
Descrizione del gioco
Questa sezione descrive le meccaniche alla base del gioco.
Condizione di vittoria
Una partita è composta da due samurai che si affrontano uno contro l'altro. Ogni samurai inizia ogni incontro con 20 punti ferita e 1 onore . Un samurai vince se il suo avversario è morto ed è ancora vivo. Esistono due metodi con cui un samurai può morire:
- Se i punti ferita di un samurai vengono ridotti a 0, morirà.
- Se un samurai porta il proprio onore al di sotto di 0, verrà colpito dagli dei per aver agito in modo disonorevole in un duello.
Essere abbattuti dagli dei ha una priorità maggiore rispetto alla riduzione dei punti ferita a 0, quindi in una situazione in cui un samurai è a 0 punti salute e l'altro a -1 punti onore, il samurai con 0 punti salute vincerà. In una situazione in cui entrambi i samurai sono in onore di -1, entrambi vengono colpiti dagli dei e il gioco è un pareggio.
Una partita è composta da un massimo di 500 turni . Se passano tutti i 500 turni e la partita non è stata decisa (né il samurai è morto), gli dei si annoiano e abbattono entrambi i samurai, provocando così un pareggio.
Azioni
Ad ogni turno, il samurai deve eseguire esattamente una delle seguenti azioni:
W
Il samurai deve attendere e non eseguire alcuna azione. Questo lo rende bello ma non lo aiuta a sconfiggere il suo avversario. Questa è anche l'azione predefinita.
B
Il samurai si inchinerà al suo avversario in modo onorevole. Questo piace agli dei e quindi il samurai otterrà 1 onore. Honor è vitale per il successo del tuo samurai perché Honor è essenzialmente la "risorsa" per questo gioco: tutti si allontanano B
e W
possono diminuire Honor. Inoltre, se un samurai ottiene 7 punti onore o più, gli viene concesso l'uso della Spada degli Dei . Le implicazioni di ciò sono descritte di seguito.
Tuttavia, inchinarsi al tuo avversario ti lascia aperto se il tuo avversario decide di colpirti con la sua spada, quindi fai attenzione quando scegli di inchinarti.
G
Il samurai deve entrare in una posizione difensiva e proteggersi da qualsiasi attacco di spada. Questa mossa bloccherà con successo tutti i colpi di spada, anche quelli fatti con la Spada degli Dei .
Tuttavia, gli dei disapprovano un samurai eccessivamente difensivo, quindi questa mossa consumerà 1 Onore se anche l'azione del samurai nel turno immediatamente precedente era di guardia. Non consuma Honor altrimenti.
I
Il samurai tenterà di colpire il suo avversario con una rapida estrazione della sua spada dal suo fodero. Se il samurai ha 7 punti onore o più, userà la Spada degli dei invece della sua spada normale. Questa mossa consuma 1 onore.
Il sorteggio rapido è un colpo rapido che batterà attacchi aerei più lenti, tuttavia, perderà contro le parate. Se lo sciopero si collega correttamente, infliggerà 1 danno o 2 danni con la Spada degli Dei .
P
Il samurai dovrà tentare di parare qualsiasi attacco in arrivo, quindi lanciare il proprio attacco. Se il samurai ha 7 punti onore o più, userà la Spada degli dei invece della sua spada normale. Questa mossa consuma 1 onore.
La parata è una buona manovra contro i colpi veloci, ma sarà sopraffatta da attacchi aerei più lenti. Se lo sciopero si collega correttamente, infliggerà 1 danno o 2 danni con la Spada degli Dei .
O
Il samurai tenterà di colpire il suo avversario con un attacco aereo più lento. Se il samurai ha 7 punti onore o superiore, userà la spada degli dei invece della sua spada normale. Questa mossa consuma 1 onore.
Il colpo in testa può sopraffare le parate, ma perderà in caso di colpi veloci. Se lo sciopero si collega correttamente, infliggerà 1 danno o 2 danni con la Spada degli Dei .
Spada degli dei
Un samurai con Honor che è 7 o più ottiene la capacità di usare la Spada degli Dei . Se il suo onore viene ridotto al di sotto di 7, la capacità di usare la Spada degli dei verrà revocata da lui. La spada degli dei infligge 2 danni invece di 1.
La Spada degli dei non consente a un colpo di sconfiggere un colpo di spada che normalmente non avrebbe sconfitto. Ad esempio, una parata di Sword of the Gods perderà comunque con un normale colpo in testa e un'estrazione rapida di Sword of the God non prevarrà su un'estrazione rapida ordinaria. Anzi, il cosiddetto Spada degli dei non è in realtà così potente - forse è uno scherzo cosmico interpretato dagli dei ...
Tabella delle interazioni
Il frammento di stack di seguito contiene una tabella che elenca esplicitamente tutti i possibili risultati delle diverse combinazioni di azioni che i due samurai possono eseguire. Per visualizzarlo, fai clic su "Mostra snippet di codice", quindi fai clic su "Esegui snippet di codice".
Comunicazione del programma
Per facilitare lo svolgimento del torneo, è stato scritto un programma di controllo per interpretare il ruolo degli "dei": mantiene registri di onore e salute e colpisce di conseguenza il samurai. Questa sezione descrive come comunicherà il programma con il programma del controller.
Descrizione dell'input
Il programma del controller chiamerà il tuo programma dalla riga di comando in questo modo:
<command> <history> <enemy_history> <your_health> <enemy_health> <your_honour> <enemy_honour>
dove:
<command>
è il comando richiesto per eseguire il programma. Ad esempio, se il programma si trova in un filesuper_sentai.pl
, probabilmente è il comandoperl super_sentai.pl
.<history>
è una storia di mosse che hai fatto. Ad esempio,WWBP
vorrebbe dire che hai aspettato due volte, inchinato una volta e parato una volta.<enemy_history>
è una storia di mosse compiute dal tuo nemico. Ad esempio,BBBI
significherebbe che il tuo nemico si è inchinato tre volte ed ha eseguito un sorteggio rapido.<your_health>
è la tua salute attuale.<enemy_health>
è la salute attuale del nemico.<your_honour>
è il tuo attuale onore.<enemy_honour>
è l'onore attuale del nemico.
Per il primo turno, history
e enemy_history
sarà vuoto, quindi il tuo programma verrà chiamato con gli ultimi quattro argomenti come questo:
<command> <your_health> <enemy_health> <your_honour> <enemy_honour>
Si prega di essere preparati per questo!
I lettori astuti possono notare che i quattro argomenti che forniscono l'onore e la salute di entrambi i samurai sono, in una certa misura, superflui; dato che si tratta di un perfetto gioco di informazioni, l'onore e la salute del samurai possono essere determinati usando solo le storie.
Questi valori vengono forniti a scopo di praticità, in modo da non dover analizzare gli argomenti della cronologia. Ciò dovrebbe rivelarsi utile per implementare strategie semplici, come non attaccare quando il tuo Honor è 0.
Descrizione dell'uscita
Per scegliere un'azione, il programma dovrebbe uscita una delle W
, B
, G
, I
, P
, o O
sullo standard output, a seconda di quale azione si vuole fare. Se il tuo programma non emette nulla entro 1000 ms, verrà terminato e il tuo programma verrà trattato come se fosse stato emesso W
.
Se il tuo programma genera più di una lettera, verrà presa in considerazione solo la prima, quindi l'output Parry
sarà lo stesso dell'output P
.
Se l'output della prima lettera del tuo programma non è una delle opzioni sopra elencate, verrà automaticamente impostato su W
.
Formato di invio
Invia un programma come risposta a questo post. È possibile inviare più programmi. Se stai inviando più programmi semplici, ti consiglio di inviarli come un'unica risposta; se stai inviando più programmi complessi, ti consiglio di inviarli come risposte separate. Una volta che avrò aggiunto con successo i tuoi programmi al torneo, farò un commit al repository git con la tua iscrizione (linkato sotto).
Se riscontro problemi che impediscono l'aggiunta del tuo programma al torneo, lascerò un commento sulla tua partecipazione indicando il problema.
Si prega di includere quanto segue nell'invio:
- Il nome umano leggibile del tuo programma, da utilizzare nei tabelloni. Gli spazi sono ammessi qui; virgole e caratteri Unicode non lo sono.
- La lingua in cui è scritto il tuo programma. Evita di scrivere in lingue strane e di difficile accesso come TinyMUSH.
- Una breve sinossi del tuo programma. Questa può essere una descrizione di come funziona il programma, o solo un po 'di testo sul tuo programma (se vuoi essere tutto riservato), o forse entrambi.
- I comandi richiesti per eseguire il programma. Ad esempio, se scrivessi il tuo invio in Java chiamato
example.java
, forniresti le istruzioni per la compilazione,javac example.java
quindi esegui le istruzionijava example
. - Il codice sorgente per il programma.
Per facilitare l'invio, fornisco un modello di invio che può essere trovato qui . Il modello rende le presentazioni più belle. Incoraggio fortemente ad usarlo.
Fornisco anche due voci di esempio. Sebbene le voci di esempio parteciperanno al round robin, il loro scopo principale è quello di chiarire i formati di presentazione e input / output per il torneo, piuttosto che essere seri contendenti per il titolo di Ultimate Samurai.
Struttura del torneo
Questa sezione descrive come si svolgerà il torneo tra i partecipanti.
Programma di controllo
Il programma di controllo è scritto in Python 2 e può essere trovato sul repository Ultimate Samurai Showdown Github . Se desideri eseguirlo da solo, le istruzioni su come eseguirlo sono incluse nel file README.md nel link. Tuttavia, solo i tornei eseguiti sul mio computer saranno ufficiali per evitare differenze hardware che incidono sui risultati dei tornei.
Il programma di controllo verrà eseguito su un computer portatile con Arch Linux. Ha un processore Intel Core i7 e 8 GB di RAM. Cercherò di far funzionare tutte le voci sul mio computer, ma lo apprezzerei immensamente se eviti le lingue a cui non è possibile accedere liberamente (come in nessun costo monetario).
Sistema di punteggio
Il sistema di punteggio è un round robin. Ogni programma giocherà otto partite contro ogni altro programma. Una vittoria garantisce al programma 1 punto, una perdita nessun punto e un pareggio di 0,5 punti. Il programma con il punteggio più alto vince la partita. Se c'è un pareggio, duello i primi due programmi uno contro l'altro per determinare il vincitore.
Il numero di volte in cui ciascun programma si giocherà a vicenda può essere ridotto da 8 se vi è un numero estremamente elevato di partecipanti. Aggiungerò una nota qui se questo si verifica.
Eseguirò il round robin molte volte man mano che vengono pubblicati nuovi invii, ma è solo il round robin più recente che conterà.
squalifiche
È possibile che il tuo programma venga squalificato dal torneo. La squalifica può verificarsi se:
- Il tuo programma non viene compilato o eseguito;
- Il tuo programma è un duplicato strategico di un altro programma (ovvero implementa esattamente la stessa strategia di un altro programma);
- Il tuo programma tenta di sabotare altri programmi modificando il codice del controller, il codice di altri programmi, ecc .;
- Il tuo programma tenta di sfruttare un bug nel codice del controller. Invece di sfruttare i bug, dovresti invece aprire un problema nel repository git, fare un commento qui o pingarmi in chat.
Risultati passati
I risultati dettagliati di tutti i tornei sono disponibili sulla pagina wiki .
Il torneo più recente è stato completato il 17/07/2015 alle 07:20. Ecco un riepilogo dei risultati:
The Observer: 209.0
Coward: 203.0
Monk: 173.0
Elephant Warrior: 157.0
Iniqy: 157.0
Agent 38: 144.0
Ninja: 138.0
Meiyo Senshi: 138.0
Kakashi: 136.0
Yoshimitsu: 131.0
Hermurai: 121.0
Warrior Princess: 120.0
Gargoyle: 119.5
The Honourable: 119.0
Hebi: 118.5
Predictor: 116.0
Whack-a-mole: 107.0
The Fool: 106.0
The Prophet: 105.0
Copy-san: 97.0
YAGMCSE: 80.0
The Waiter: 66.0
Swordsman: 43.0
Spork Holder: 32.5
Blessed Samurai: 27.5
Attacker: 27.0
The Terminator: 17.0
Master Yi: 16.0