Usare una funzione hash per dare una personalità memorabile agli oggetti
-
05-07-2019 - |
Domanda
(Nota: il progetto è in Python.)
Sto eseguendo una simulazione in cui ho molti oggetti che voglio mostrare sullo schermo e manipolare. Deve esserci un modo per identificare ogni oggetto, perché si sposteranno da un posto all'altro all'improvviso e voglio essere in grado di tracciare l'oggetto spostato dove.
Quello che ho pensato è che per ogni oggetto genererò una "personalità". Un paio di colori e un nome inglese, e lo inserirò come rappresentazione dell'oggetto nella GUI. Ho pensato che una funzione hash verrà utilizzata per creare questi colori e nomi, ma non ho mai lavorato con le funzioni hash.
Come posso fare quello che voglio fare?
Soluzione
usa un uuid (modulo uuid in python > = 2.5).
Questo uuid, nella versione 4, è per definizione casuale su tutti i campi (tranne uno)
>>> uuid.uuid4()
UUID('9d477dc7-a986-4e3d-aa4f-6e57f690be78')
È possibile scomporre correttamente i campi per creare un colore o un nome (mappando un secchio di nomi su un campo specifico). Ovviamente stai limitando il tuo hash (la vera identità è sempre l'UUID) ma per scopi visivi è molto sufficiente.
Ad esempio, è possibile utilizzare i primi tre ottetti per generare il colore # 9d477d e l'ottetto rimanente c7
per scegliere un nome da un set di 256.
Se finisci con colori troppo brutti, puoi invece lavorare in HSV e bloccare la saturazione e il valore a determinati livelli. ancora una volta, questo limita ulteriormente il tuo hash (ma lo spazio colore è già piuttosto limitato dopo tutto).