Il gioco
Molti di noi conoscono Frogger , il gioco arcade degli anni '80 in cui l'obiettivo è di saltare in sicurezza una rana attraverso un'autostrada trafficata e uno stagno pieno di pericoli per arrivare in sicurezza a casa.
Alcuni mesi fa è stata lanciata una sfida per lo sviluppo di un clone Frogger. Ma perché clonare Frogger quando puoi giocare a Frogger? :)
Considera la seguente griglia di gioco semplificata:
XXXXXXXXXXXXXXXXXXXXXXX North Safe Zone
-----------------------
| | <<<< Express Lane West (Lane 1)
| | > Gridlock East (Lane 2)
| | << Freeflowing Traffic West (Lane 3)
| | < Gridlock West (Lane 4)
| | >>>> Express Lane East (Lane 5)
-----------------------
XXXXXXXXXXX@XXXXXXXXXXX South Safe Zone
\__________ __________/
'
23 cells horizontally
Abbiamo cinque corsie di traffico, ognuna larga 23 celle e due zone sicure (dove la rana può spostarsi in modo sicuro a destra e sinistra), larga anche 23 celle. È possibile ignorare i bordi destro e sinistro in quanto questi sono per chiarezza pittorica.
La nostra rana inizia nella zona sicura meridionale, sulla cella centrale (12a), come indicato da una @
nella figura sopra.
Il tempo nel gioco è diviso in passaggi discreti chiamati frame. Froggy è una rana veloce e può saltare una cella in qualsiasi direzione (su, giù, a destra, a sinistra) per frame. Può anche scegliere di rimanere fermo per qualsiasi frame. Il traffico nelle cinque corsie si muove a velocità costante come segue:
- il traffico nella corsia espressa ovest (corsia 1) sposta 2 celle a sinistra di ogni fotogramma
- il traffico nella corsia est della parata (corsia 2) si sposta di 1 cella a destra ogni secondo fotogramma
- il traffico nella corsia ovest (corsia 3) a flusso libero si sposta di 1 cella a sinistra di ogni fotogramma
- il traffico nella corsia ovest della parata (corsia 4) si sposta di 1 cella a sinistra ogni secondo fotogramma
- il traffico nella corsia espressa est (corsia 5) sposta di 2 celle a destra di ogni fotogramma
Il traffico stesso è definito in modo univoco per ca. 3.000 timestep in questo file di testo . Il "traffico" è costituito da veicoli e spazi tra i veicoli. Qualsiasi personaggio che non è uno spazio fa parte di un veicolo. Il file di testo contiene cinque righe, corrispondenti alle cinque corsie di traffico (con lo stesso ordine).
Per le corsie in direzione ovest, all'inizio del frame 0 (l'inizio del gioco), consideriamo il primo veicolo nella corsia appena oltre il bordo destro della griglia di gioco.
Per le corsie in direzione est, la stringa di traffico deve essere considerata "all'indietro", nel senso che i veicoli appaiono a partire dalla fine della stringa. All'inizio del fotogramma 0, consideriamo il primo veicolo in queste corsie appena oltre il bordo sinistro del campo di gioco.
Considera come esempio:
Traffic Lane 1: [|==| =
Traffic Lane 2: |) = o
Traffic Lane 3: (|[]-[]:
Traffic Lane 4: <| (oo|
Traffic Lane 5: |==|] :=)
Quindi la griglia di gioco apparirà come segue:
Start of Frame 0 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 1 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 2 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 3 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Dopo che tutto il traffico in una corsia è "esaurito" (ovvero la stringa si esaurisce), consideriamo tutti i caratteri nella stringa come spazi.
La nostra rana viene schiacciata se si verifica una delle seguenti condizioni:
- la rana occupa una cella occupata da un veicolo, su qualsiasi telaio
- la rana rimane ferma in una corsia espressa e un veicolo di 1 cella di larghezza gli passa sopra in quella cornice
- la rana salta a est "attraverso" un veicolo in direzione ovest, o salta a ovest attraverso un veicolo in direzione est
- la rana salta fuori dal 7 (linea) di 23 (cella) giocando alla griglia, su qualsiasi fotogramma
Nota che queste sono le uniche condizioni in cui una rana viene schiacciata. In particolare, è ammessa una rana che salta insieme al traffico "con", così come una rana che salta dentro o fuori da una cella in una corsia espressa che è passata da un veicolo di larghezza 1 nello stesso telaio.
Obiettivo e punteggio
L'obiettivo della sfida di programmazione è far attraversare la rana il più volte possibile prima che l'ultimo veicolo esca dalla griglia di gioco . Cioè, il programma termina immediatamente dopo il completamento del frame X , dove il frame X è il primo frame che porta la griglia in uno stato in cui non sono presenti più veicoli.
L'output del tuo programma dovrebbe essere una stringa (o file di testo) contenente la sequenza di mosse per la rana usando la seguente codifica:
< frog moves left
> frog moves right
^ frog moves up
v frog moves down
. frog remains stationary
Ad esempio, la stringa <<^.^
indica che la rana si sposta a sinistra due volte, quindi verso l'alto, quindi fa una pausa per un fotogramma, quindi si sposta di nuovo verso l'alto.
Viene assegnato un punto ogni volta che la rana attraversa dalla zona sicura del sud alla zona sicura del nord e un punto viene assegnato ogni volta che la rana attraversa dalla zona sicura del nord alla zona sicura del sud.
Alcune regole importanti:
- La rana non deve essere schiacciata.
- Pubblica la tua soluzione (sequenza di mosse) insieme al codice del programma, sia in linea che come file di testo (ad es. Utilizzando pastebin.com).
- La nostra rana è presciosa e precognitiva, quindi il tuo programma può utilizzare tutti i dati sul traffico in qualsiasi frame mentre cerca soluzioni. Ciò include i dati per il traffico che non ha ancora raggiunto la griglia di riproduzione.
- La griglia non si avvolge. Uscire dalla griglia farà schiacciare la rana e quindi non è permesso.
- In nessun caso il traffico "resetta" o la rana "teletrasporta". La simulazione è continua.
- La rana può tornare nella zona sicura sud dopo essere uscita, ma questo non viene conteggiato come un punto. Allo stesso modo per la zona sicura del nord.
- Il vincitore del concorso è il programma che genera la sequenza di mosse ottenendo il maggior numero di incroci.
- Per ulteriori domande o dubbi, non esitare a chiedere nella sezione commenti.
Per un ulteriore incentivo, aggiungerò una ricompensa di +100 rappresentanti al programma vincente quando sarò in grado di farlo.
bonus
+ 2,5% al punteggio di base * (fino a + 10%) per ogni angolo della griglia di gioco toccato dalla rana. I quattro angoli della griglia sono le celle più a sinistra e più a destra delle due zone sicure.
+ 25% al punteggio di base * se la sequenza di mosse mantiene la rana confinata entro +/- 4 celle a sinistra oa destra della sua cella iniziale per l'intera simulazione (ovviamente può muoversi liberamente in verticale).
Nessun bonus per il punteggio, ma i puntelli speciali nel PO andranno a chiunque pubblicherà un validatore di soluzioni rapido e sporco, quindi non devo programmarne uno. ;) Un validatore accetterebbe semplicemente una sequenza di mosse, assicurerebbe la sua legalità (secondo le regole e il file del traffico) e segnalerebbe il suo punteggio (cioè il numero totale di attraversamenti).
* Il punteggio totale è uguale al punteggio di base più il bonus, arrotondato per difetto all'intero più vicino.