Do you need any help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

HW2 test 4 caso particolare

j
jbox65 (530 points)
3 7 10
asked Nov 5, 2019 in HW2 obbligatorio by jbox65 (530 points)
edited Nov 6, 2019 by jbox65
Ma per passare il test 4 si può creare un if che tratta quel caso particolare? Perchè mi è stato dato come consiglio per passarlo di procedere in questo modo, ma non dovrebbe essere costruito per casi generali l'algoritmo?

EDIT: Per test 4 intendo l'esempio 5, quello con gli swap.
481 views

7 Answers

E
Edward (25950 points)
2 4 172
answered Nov 5, 2019 by Edward (25,950 points)

Anche a me è stato dato come consiglio (da qualcuno che non ha capito nulla del mio algoritmo) di controllare che non ci siano stati sorpassi per passare il test4.

Ti posso assicurare che non è necessario farlo per superarlo.

Tra le regole dell'homework c'è scritto:

ATTENZIONE: i vostri programmi NON DEVONO sfruttare eventuali periodicità o caratteristiche strutturali degli input, ma devono essere applicabili a qualsiasi input valido.

Io eviterei.

È vero che ci possono essere input nella quale non ci siano sorpassi, ma quindi che succede se nel mezzo ti mette un sorpasso? Questo rientrerebbe nello sfruttare una caratteristica dell'input.

j
jbox65 (530 points)
3 7 10
commented Nov 5, 2019 by jbox65 (530 points)
Purtoppo pure io ho ricevuto consigli solo da chi non ha capito come funzionava il mio algoritmo con i dizionari, ho sperato in un consiglio con una soluzione alternativa più efficente, ma purtoppo mi è andata male.
AlessandraIzzo (6010 points)
6 6 30
commented Nov 6, 2019 by AlessandraIzzo (6,010 points)
Idem, 3 su 3 non hanno capito il mio algoritmo, pur avendolo spiegato con un certo dettaglio. Consigli completamente inutili (anzi, sbagliati) e voti senza senso.
Christian (15220 points)
2 4 77
answered Nov 5, 2019 by Christian (15,220 points)

Ciao, diciamo che non credo sia il consiglio migliore :)
Qui si è già parlato proprio di questo approccio al test 4.

plm (18850 points)
7 15 118
answered Nov 5, 2019 by plm (18,850 points)
In realtà l'algoritmo dovrebbe essere molto generale, ma ad esempio puoi fare in modo di controllare se degli eventi si ripetano molte volte e lavorare di conseguenza, in una generazione random è possibile che ci siano 100 sorpassi di fila
n
n.rossi (650 points)
3 4 9
answered Nov 5, 2019 by n.rossi (650 points)
Spiegaci cosa hai fatto così eventualmente possiamo darti una mano nel migliorare.
j
jbox65 (530 points)
3 7 10
commented Nov 6, 2019 by jbox65 (530 points)
Io ho lavorato con i dizionari e i set, passo tutti i test tranne il 4 (esempio 5, quello dove swappano tutti), purtoppo non ho avuto suggerimenti da parte di chi li ha passati tutti e 16 e sono alla ricerca di un metodo più efficente del mio (senza usare casi particolari).
n
n.rossi (650 points)
3 4 9
commented Nov 6, 2019 by n.rossi (650 points)
Io credo che lavorando con i dizionari i test vengono tutti fuori con qualsiasi input, io gli insiemi non li ho utilizzato per il semplice fatto che per come ho costruito il dizionario non mi servono, attualmente passo tutti i test in locale, ma il 5 sulla VM fallisce per
0.65 ms e dato che nessuno mi ha suggerito soluzioni, sto cercando in autonomia qualcosa. Comunque descrivimi cosa hai fatto e vedo se posso aiutarti.
a
a.pietroluongo (11250 points)
15 38 131
answered Nov 5, 2019 by a.pietroluongo (11,250 points)
edited Nov 5, 2019 by a.pietroluongo
[quote="jbox65"]Ma per passare il test 4 si può creare un if che tratta quel caso particolare?[/quote]
No.
mi sembra che sia stato detto anche da Spognardi nelle esercitazioni.
M
MatteoB (1690 points)
8 16 21
answered Nov 6, 2019 by MatteoB (1,690 points)
Ovviamente l'algoritmo che andiamo a "costruire" deve funzionare per tutti i casi che si presentano nei test e non, e quindi quando si crea l'algoritmo bisogna pensare in linee generali prevedere tutti i casi possibili che ci potrebbero essere, in modo tale che quando va in esecuzione funzioni per tutti i test che poi andranno a testare il tuo algoritmo.

Implementare una if che prevede quel caso specifico potrebbe avere degli effetti collaterali, potrebbe si velocizzare quel test ma allo stesso tempo potrebbe rallentare altre parti
J
Jan Rogala (7260 points)
3 4 37
answered Nov 7, 2019 by Jan Rogala (7,260 points)
Non penso si un grandissimo problema dato che è lecito farsi domande sul come migliorare un algoritmo in base ad un determinato input. Però in questo caso per l'esempio 5 in non vedo nessun caso particolare, ovvero si la lista di partenza viene completamente ribaltata e poi mano a mano vengono cancellati molti concorrenti, perciò se riesci a creare un qualcosa a partire da cio molto probabilmente creerai qualcosa che abbia a che fare con la periodicità delle operazioni, il che questo non è consentito da regolamento. Però un caso particolare che potrebbe succedere è quello dove non avvengono sorpassi, li se riesci a trovare qualcosa di efficiente puoi sfruttare quella condizione, poichè non usa una periodicità ma una caratteristica dell'input. Attenzione, molto probabilmente andrai a compromettere i test che non hanno questa caratteristica, perchè dovranno fare un controllo in piu