Lo struzzo Simone si sposta solo nelle direzioni dei quattro assi cardinali (Nord, Sud, Est, Ovest).
Ogni suo passo misura 1 metro.
Dovete scrivere un programma che, data una sequenza di spostamenti di Simone, misuri quant’è la distanza fra il punto di partenza e il punto di arrivo.
Dati in input
Il file input.txt contiene la sequenza degli spostamenti.
Tale file è costituito da un’unica riga di testo, contenente una sequenza di S, N, E, O (che indicano gli spostamenti nelle direzioni Sud, Nord, Est, Ovest rispettivamente).
La sequenza è terminata da un *.
Ad esempio, il file di input NNESO* dice che Simone si sposta di due metri a Nord, poi di un metro verso Est, poi di un metro verso Sud, e quindi di un metro a Ovest.
Dati in output
Il programma, dopo aver letto il file di input, deve calcolare la distanza in metri fra il punto di partenza e il punto di arrivo, e scriverla su un file di nome output.txt.
Più precisamente, il file output.txt deve contenere un’unica riga.
Su questa riga dovrà comparire il numero intero corrispondente al quadrato della distanza.
Assunzioni
- Il file di input non contiene altri caratteri oltre a quelli precisati.
- Il numero complessivo di spostamenti contenuti nel file di input è minore o uguale a 100000.
- Importante! Il programma non deve scrivere nulla sul video, e non deve interagire con l’utente. Deve solo leggere il file di input e scrivere il file di output.
- L’esecuzione del programma deve terminare entro 5 secondi.
Esempi
input.txt | output.txt | |
---|---|---|
1 | NNSEEESNOENNS* | 13 |
2 | NNESOS* | 0 |
3 | OSOS* | 8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
Program OII_2001_Lo_struzzo_Simone; Var fIN, fOUT: Text; px, py, risposta: LongInt; c : Char; begin px:=0; py:=0; Assign(fIN, 'input.txt'); Reset(fIN); While(Not Eof(fIN)) do Begin Read(fIN, c); case(c) of 'N': Inc(py); 'E': Inc(px); 'S': Dec(py); 'O': Dec(px); end; End; Close(fIN); risposta:=px*px+py*py; Assign(fOUT, 'output.txt'); Rewrite(fOUT); write(fOUT, risposta); Close(fOUT); end. |