Confronto finale esercizio 3

a
alessio.palma (1480 points)
0 34 56
asked Nov 19, 2018 in Es3 by alessio.palma (1,480 points)
recategorized Nov 19, 2018 by andrea.sterbini

Mi viene difficile fare l'ultimo passaggio dell'esercizio e. Ho due dizionari x:y (uno per percorso, del primo robot la y più bassa per una stessa x e del secondo la y piu alta per una stessa x), ma dato che ho soltanto le coordinate dei vertici del poligono, se nell'insieme di coordinate da verificare mi capita una tupla con  una x che  non si trova su un vertice essa non è nei due insiemi (o in uno dei due), quindi non riesco a fare il confronto tra le y. Consigli?

198 views

2 Answers

Xriuk (13590 points)
0 24 116
answered Nov 19, 2018 by Xriuk (13,590 points)
Ti consiglierei di aggiungere pure i punti intermedi nel dizionario, in modo da avere tutte le X del percorso, con le relative Y. Non è un'operazione complicata e ti risparmia parecchi grattacapi (come quello di controllare se la X di un punto è presente in uno degli intervalli).
a
alessio.palma (1480 points)
0 34 56
commented Nov 19, 2018 by alessio.palma (1,480 points)
Non saprei come aggiungere tutte le x intermedie partendo dal fatto che ho solo le x dei vertici
Xriuk (13590 points)
0 24 116
commented Nov 19, 2018 by Xriuk (13,590 points)

Come ottieni le X e Y? Presumo che tu ti svolga i calcoli sommando ogni "passo" alla X oppure alla Y e ottieni un nuovo vertice, no?

Ecco ogni volta che tu vai a sommare la X puoi fare un range dal tuo punto attuale al nuovo punto e setti i valori intermedi tutti alla stessa Y (che rimane uguale perchè stai lavorando sulla X).
Se sommi la Y aggiorni il valore del punto come già stai facendo: "del primo robot la y più bassa per una stessa x e del secondo la y piu alta per una stessa x".

a
alessio.palma (1480 points)
0 34 56
commented Nov 19, 2018 by alessio.palma (1,480 points)
Aggiungere questo for non rallenta troppo il programma?
Xriuk (13590 points)
0 24 116
commented Nov 20, 2018 by Xriuk (13,590 points)
No, perchè sono pochi elementi per volta, e comunque ti velocizza le operazioni successive
a
alessio.palma (1480 points)
0 34 56
commented Nov 20, 2018 by alessio.palma (1,480 points)
mi fa andare in timeout poichè comunque si tratta di un for nidificato (e ripetuto sia per il percorso1 che per il percorso2)
alessioclemente (19640 points)
1 66 153
answered Nov 19, 2018 by alessioclemente (19,640 points)
Usa un try except (se ho capito bene), in modo che se la x non è tra le tue chiavi, passa direttamente al prossimo.
andrea.sterbini (172780 points)
514 935 1789
commented Nov 19, 2018 by andrea.sterbini (172,780 points)
sbagliato, potresti mancare dei punti contenuti
a
alessio.palma (1480 points)
0 34 56
commented Nov 19, 2018 by alessio.palma (1,480 points)
Perdonami ma come funzionano try ed except? Ho provato ad usare un for che crea la y per tutte le x nel range di uno spostamento ma mi manda in timeot di un secondo abbondante. Ripeto che il mio dilemma è:

-prendendo una x dalla lista di punti da verificare data alla fine del file, se la x di quel punto non è in uno dei miei dizionari (poichè ho solo le coordinate dei vertici dei poligoni), come faccio a dirgli di "guardare" la y successiva(o precedente)(ad es. ho la coordinata (7,11) da controllare, non ho 7 nelle mie x dei dizionari, ma ho 9 e so a che altezza è il robot a 9, come gli dico di guardare la y di 9?)

-altrimenti qualsiasi altro modo che mi faccia avere le coordinate di tutto il perimetro ma non mi mandi in timeout come quello che uso adesso (per capire cosa uso vedesi suggerimento del ragazzo di sopra, che ringrazio comunque per l'ottimo spunto!)

Grazie!
a
alessio.palma (1480 points)
0 34 56
commented Nov 19, 2018 by alessio.palma (1,480 points)

ah okay, ho letto ora la risposta del prof, niente da fare crying

alessioclemente (19640 points)
1 66 153
commented Nov 19, 2018 by alessioclemente (19,640 points)
Io l'ho usato, ma probabilmente l'algoritmo è diverso <.<
a
alessio.palma (1480 points)
0 34 56
commented Nov 19, 2018 by alessio.palma (1,480 points)
mi aiuteresti comunque a capire come funzionano?
alessioclemente (19640 points)
1 66 153
commented Nov 20, 2018 by alessioclemente (19,640 points)
Il tuo programma esegue tutto il codice che è dentro il blocco try, poi quando c'è un errore, eseguirà il blocco except (l'errore può essere uno preciso ad esempio KeyError, oppure uno generico, se non specifichi)
Auron (15880 points)
32 126 194
commented Nov 20, 2018 by Auron (15,880 points)
Comunque basta controllare se la x del punto che cerchi è minore del massimo delle x dei percorsi... Se è cosi, allora deve essere per forza dentro il dizionario, perchè da (1,1) ad un certo quadrato (1+x, 1+y) il robottino deve necessariamente attraversare tutte le x da 1 al massimo che trovi nel dizionario...
a
alessio.palma (1480 points)
0 34 56
commented Nov 20, 2018 by alessio.palma (1,480 points)

per @Auron

si, questo controllo già lo faccio, il mio problema è: ad es. ho la coordinata (7,11) da controllare (tra le tuple a fine file),però non ho 7 nelle mie x dei dizionari avendo solo i vertici, ma ho 9 e so a che altezza è il robot a 9, come gli dico di guardare la y di 9?