Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Confronto finale esercizio 3

a
alessio.palma (1480 points)
9 36 56
in Es3 by (1.5k points)
recategorized by

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?

651 views

2 Answers

Xriuk (13590 points)
6 24 116
by (13.6k 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)
9 36 56
by (1.5k points)
Non saprei come aggiungere tutte le x intermedie partendo dal fatto che ho solo le x dei vertici
Xriuk (13590 points)
6 24 116
by (13.6k 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)
9 36 56
by (1.5k points)
Aggiungere questo for non rallenta troppo il programma?
Xriuk (13590 points)
6 24 116
by (13.6k points)
No, perchè sono pochi elementi per volta, e comunque ti velocizza le operazioni successive
a
alessio.palma (1480 points)
9 36 56
by (1.5k 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)
16 67 153
by (19.6k 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 (207920 points)
749 1267 2373
by (208k points)
sbagliato, potresti mancare dei punti contenuti
a
alessio.palma (1480 points)
9 36 56
by (1.5k 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)
9 36 56
by (1.5k points)

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

alessioclemente (19640 points)
16 67 153
by (19.6k points)
Io l'ho usato, ma probabilmente l'algoritmo è diverso <.<
a
alessio.palma (1480 points)
9 36 56
by (1.5k points)
mi aiuteresti comunque a capire come funzionano?
alessioclemente (19640 points)
16 67 153
by (19.6k 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)
50 126 194
by (15.9k 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)
9 36 56
by (1.5k 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?