Informatica ICN - ISN
#07 : Codin’game
1) Introduzione
Abbiamo imparato le basi del linguaggio Javascript. Pertanto, avrete notato che la sua sintassi non è
complicata e che è facile da attuare. Detto ciò, la difficoltà della programmazione non è utilizzare
un linguaggio ma bene di concepire i propri programmi organizzando le istruzioni e i dati
intelligentemente per arrivare efficacemente al risultato desiderato.
Quindi ci alleneremo a programmare risolvendo "giochi di programmazione" sul sito
Codin'game.
2) Primo programma: Onboarding
❑Inizia creando un account sul sito di Codin'game (www.codingame.com).
❑Una volta completata la procedura, fai clic sulla piccola freccia a destra del tuo avatar per selezionare
Impostazioni. Seleziona in fondo alle impostazioni la lingua francese per cambiare il sito in francese.
❑Poi scegli di risolvere il tuo primo gioco facendo clic su Allenamento nella barra a sinistra del
sito, si chiama Onboarding. Clicca su Risolvi per iniziare il gioco. Entrerai quindi nel
tutoriale.
❑Leggi le istruzioni e scegli il linguaggio JavaScript, poi segui le istruzioni per scrivere il tuo primo
programma.
❑A sinistra hai l'enunciato della missione e a destra il tuo programma. Quello che bisogna capire bene
Fin dall'inizio viene spiegato nel tutorial: « I giochi si svolgono a turno: ad ogni turno, il tuo
il programma riceve nuovi input e deve rispondere con un'azione.
❑Alla fine della procedura otterrete il seguente programma:
// ciclo di gioco : un ciclo infinito che verrà riavviato ad ogni turno di gioco
mentre (vero)
{
var nemico1 = readline(); // nome del nemico 1 : Lettura del nome del nemico n°1
var dist1 = parseInt(readline()); // distanza dal nemico 1 : Lettura della sua distanza
var enemy2 = readline(); // nome dell'ennemi 2: Lettura del nome dell'ennemi n°2
var dist2 = parseInt(readline()); // distanza dal nemico 2 : Lettura della sua distanza
// Inserisci il codice qui
Le voci di questo turno vengono lette, vengono analizzate e si risponde scrivendo il nome
del nemico su cui si deve sparare.
se (dist1 < dist2)
{
stampa(avversario1); // Scrivi il nome del nemico 1 se è il più vicino
}
altrimenti
{
stampa(enemy2); // Si scrive il nome del nemico 2 se è il più vicino
}
}
❑Spiega a cosa serve la funzione parseInt() utilizzata qui?
_____________________________
__________________________________________________
❑A cosa serve il test « if (dist1 < dist2) »?
_______________
❑Completa il tutorial e invia il tuo codice.
Valéry Bruniaux 1
Informatica ICN - ISN
3) Il Potere di Thor - Episodio 1
❑Avvia la risoluzione del gioco: Power of Thor – Episodio 1. La struttura del programma è la seguente:
var inputs = readline().split(' ');
var lightX = parseInt(inputs[0]); // la posizione X della luce di potenza
var lightY = parseInt(inputs[1]); // la posizione Y della luce di potenza
var initialTX = parseInt(inputs[2]); // La posizione X iniziale di Thor
var initialTY = parseInt(inputs[3]); // La posizione iniziale di Y di Thor
// ciclo di gioco
mentre (vero)
{
var turniRimanenti = parseInt(readline()); // Lettura del numero di turni rimanenti
// Per fare debug: printErr('Messaggi di debug...');
Una singola linea che fornisce il movimento da fare: N NE E SE S SW O o NO
print('SE');
}
Hai quindi due variabili, lightX e lightY, che contengono le coordinate del fulmine da raggiungere.
anche tu disponi delle coordinate iniziali di Thor nelle variabili initialTX e initialTY.
È quindi necessario ad ogni turno di gioco scrivere una direzione affinché Thor si muova di una casella, fino a raggiungere
l'éclair. In questo programma iniziale la direzione è sempre "SE" quindi non può funzionare.
❑ Sostituisci la riga: // Per il debug: printErr('Messaggi di debug...'); con:
stampaErrore("Test delle variabili : ", lightX, lightY);
❑Rilancia il primo test e guarda l'output della console. Hai qui un modo per conoscere lo stato dei tuoi
variabili aggiungendo questa funzione dove vuoi nel tuo programma.
❑ Per elaborare il programma rispondete a: « A quale condizione Thor deve scegliere la direzione 'N' ? »
________________________________________________________________________________________
❑ Poi rispondete a questa domanda: « A quale condizione Thor deve scegliere la direzione « S » ? »
________________________________________
❑Poi rispondi a questa domanda: « A quale condizione Thor deve scegliere la direzione « E » ?
_____________________________________________________________________________________________
❑Poi rispondi a questa domanda: « A quale condizione Thor deve scegliere la direzione « W » ? »
____________________________
❑ È quindi necessario avere due variabili (thorXetthorY) per leggere e registrare la posizione di Thor ad ogni
tour. Dichiarate queste due variabili prima del "game loop" e date loro come valori iniziali i
coordinate iniziali di Thor.
❑Traduci queste prime condizioni nel tuo programma e prova / modifica. Ricorda che
il tuo programma deve inviare solo un ordine di movimento print() per turno!
❑Una volta che il tuo programma supera tutti i test, prova a ottimizzarlo risparmiando spazio in
memoria evitando di creare le variabili thorX e thorY.
❑Puoi (se ti senti molto a tuo agio) cercare una soluzione con solo 4 test...
Valéry Bruniaux 2
Informatica ICN - ISN
La discesa
❑ Avvia la risoluzione del gioco: La discesa. Modifica lo scheletro del programma in questo modo:
var mountainH = 0; altezza della montagna
var altMax = 0; altitudine massima
var mountainIndex = 0; // indice della montagna da distruggere
// ciclo di gioco
mentre (vero)
{
per (var i = 0; i < 8; i++)
{
mountainH = parseInt(readline()); // Lettura dell'altezza della montagna di indice i
// completare qui
}
print(mountainIndex); // L'indice della montagna su cui sparare.
}
❑Devi completare la fine del ciclo for per trovare l'indice della montagna più alta e scriverlo in
la variabile mountainIndex.
❑Ad ogni giro del ciclo for trattiamo una montagna diversa (indice n°0 poi 1 poi 2 ecc.). Quale test
come fare per sapere se la montagna attuale è la più alta?
____________________________________
❑Cosa si deve fare se attualmente la montagna è la più alta?
_________________________________________________
_______________________________
❑Il valore dell'altitudine massima è lo stesso ad ogni turno di gioco?
__________________________
❑ Provate e modificate il vostro programma per superare tutti i test, poi inviate il vostro codice.
5) Lander di Marte - Episodio 1
❑ Avvia la risoluzione del gioco: Mars Lander - Episodio 1. In questo gioco, molte variabili sono inutili perché
Servono per i livelli successivi. Solo le variabili vSpeed e power vi saranno utili.
Aiuto: per conoscere il valore assoluto di un numero (la distanza da zero) puoi utilizzare:
Math.abs( la_variable ). Per risparmiare tempo, esiste anche una funzione che restituisce il valore più grande
tra due numeri: Math.max( numero1, numero2 ).
Aiuto: per realizzare la stringa finale puoi usare alla fine del turno:
print("0" + " " + potenza);
❑A voi di trovare le condizioni da applicare per effettuare il calcolo della potenza (variabile power) dei
motori da applicare a ogni turno di gioco.
❑Prova e modifica il tuo programma per superare tutti i test e poi invia il tuo codice.
❑Puoi (se ti senti molto a tuo agio) cercare una soluzione con solo 2 righe da aggiungere...
Valéry Bruniaux 3
Informatica ICN - ISN
Temperature
❑ Risolvete il gioco iniziando a modificare lo scheletro del programma in questo modo:
var n = parseInt(readline()); // il numero di temperature da analizzare
var temps = readline(); // le n temperature espresse come interi da -273 a 5526
var result;
var tablo = temps.split(" ").map(Number);// tabella delle temperature sotto forma di numero
per ( ) // un ciclo che attraversa tutti i valori di tablo
{
stampa(risultato);
Aiuto: per conoscere il valore assoluto di un numero (la distanza da zero) puoi utilizzare:
Math.abs( la_variabile ).
❑Costruisci, prova e modifica il tuo programma per superare tutti i test e poi invia il tuo codice.
7) Degli altri facili...
Per continuare, vi consiglio di proseguire con: Cavalli da corsa e Defibrillatori che sono facili.
Ma ovviamente, potete provarli tutti perché la programmazione è come tutto il resto: più si...
In effetti, meglio siamo :-) !
Valéry Bruniaux 4