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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 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 2023-24 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.

Esercizio 2 homework1 non passa ultimi test con 1 sec

N
Nikolay (1250 points)
5 21 30
in Es2 by (1.3k points)
closed by
Buongiorno, ragazzi. Sto eseguendo i test dell'esercizio 2 hw1. Lanciando il commando pytest test_02.py -v --timeout 3 --durations 0 passo correttamente tutti i test e vedo 2 test che vanno oltre 1 secondo che non mi permettono di superare il test lanciando il comando pytest test_02.py -v --timeout 1 --durations 0. Questi due test sono N = 10000 e lampadine tutte spente o accese a meta. Algoritmo che sto usando e' il seguente : inizio con ultimo pulsante p[N-1] e ne calcolo i divisori, con algoritmo che va da 1 a radice di N. Dopo unisco insieme delle lampadine gia accese con divisori di p[N-1], se l'insieme ottenuto e uguale all'insieme {1,...,N} allora risultato trovato, altrimenti rifaccio lo stesso lavoro per p[N-1] e cosi via finche non trovo risultato. Dopo aver perso alcune giornate non riesco proprio a vedere altro modo per sviluppare algoritmo che vada sotto 1 secondo in esecuzione. Chiedo aiuto se qualcuno mi puo dare consiglio. Grazie P.S. Per eliminare elementi comuni utilizzo set(a)^set(b)
526 views
closed with the note: answered

2 Answers

a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
edited by
Io calcolerei i divisori solo se la lampadina relativa al pulsante è spenta li inserirei o li rimuoverei da insieme lampadine accese...
N
Nikolay (1250 points)
5 21 30
by (1.3k points)
M infatti faccio cosi. Salto quelle gia accese
daniel.f (1750 points)
4 20 34
by (1.8k points)
i divisori fino a sqrt di n non basta perche così non hai tutti i divisori ,segui questa logica : parti dall'ultima lampadina e accendi quelle spente aggiungi il suo numero ai bottoni da premere e poi cambi lo stato dei divisori fino a quando non finiscono le lampadine .
N
Nikolay (1250 points)
5 21 30
by (1.3k points)
Potresti spiegare ancora? Non riesco a capire la logica. Inizio con ultimo pulsante, se lampadina relativa e' spenta allora premo questo pulsante e tutti i suoi divisori. E cosi via finche tuttle le lampadine risultino accese. Questo volevi dire
a.capobianco1 (16770 points)
14 54 165
by (16.8k points)
In realtà x ogni divisore più piccolo di rad quad ne esiste uno più grande ottenuto da n/div
The Electrician (800 points)
7 8 11
by (800 points)
Penso che quello che intende sia proprio questo: ogni volta che trovi una lampadina spenta, la accendi ma devi cambiare lo stato anche dei suoi divisori, per cui accendi la lampadina corrente e inserisci il bottone nella lista risultato, ma devi anche accendere le lampadine divisori di quella corrente, se sono spente, e spegnerle se sono accese.