Tieni traccia di una serie di scelte con un singolo numero

0

Voglio tenere traccia di una serie di domande con punteggio in un singolo numero (il punteggio totale). È possibile? e come?

Ad esempio, ho 30 domande con 3 o 2 scelte. Per ogni domanda data, l'utente effettua una selezione e il punteggio viene incrementato / decrementato. Semplice addizione e sottrazione sono sufficienti per questo, ma voglio anche essere in grado di tornare indietro e determinare a cosa hanno risposto per qualsiasi domanda.

Il mio primo pensiero è che si tratti di un'operazione di checksum o di alcune operazioni di modulazione / spostamento (mascheramento). Quindi ci potrebbe essere un numero di input come la scelta, il numero di domanda, il numero dell'utente, ecc.

Aggiornamento: rimosso int preferenza come irragionevole e abbassato il numero di domande.

    
posta foobar 09.12.2014 - 21:21
fonte

2 risposte

3

Un int rappresenta un numero fisso di bit (di solito 32 o 64). Questa è una misura del contenuto informativo; è fondamentalmente impossibile memorizzare più di questo numero di decisioni sì / no in esso. Con le decisioni a tre vie l'aritmetica diventa leggermente più coinvolta perché rappresentano numeri frazionari di bit (due domande a tre vie contengono leggermente più informazioni di tre domande a doppio senso), ma il principio rimane.

Quindi usare i valori scalari in questo modo è una cattiva idea. È fragile (non appena il tuo questionario cresce oltre il numero magico di passaggi, si interrompe) e anche mentre funziona, è costoso codificare e decodificare le informazioni che desideri dal valore in cui è memorizzato. La domanda diventa: Perché vuoi utilizzare int ? Sei sicuro che i dati strutturati di qualche tipo non siano una scelta più facile e migliore?

    
risposta data 09.12.2014 - 21:28
fonte
1

È possibile memorizzare il valore come numero se si dispone di un tipo di dati che può rappresentare più di choices count valori possibili. Nel caso di 3 40 , questo è il numero 12,157,665,459,056,928,801 che è solo meno di 64 bit . Pertanto, puoi ipoteticamente memorizzarlo in un Unit64 ( documenti ).

Questa non è una buona idea.

  • Non appena aggiungi un'altra domanda, l'overflow di questo tipo di dati. Ciò renderà la vita molto difficile per il refactoring.

  • Hai qualcosa che non è abbastanza binario. Questo crea confusione nel tentativo di decodificarlo con operatori binari. Puoi farlo, ma il suo molto brutta .

  • Se qualcosa cambia (rimuovi una domanda) diventa molto fragile. È facile rompere questo.

Queste cose combinate dovrebbero puntare saldamente nella direzione di un elenco di tre enumerazioni di valore che possono essere serializzate. Non preoccuparti di un numero specifico. Rendilo una struttura piacevole da cui puoi lavorare e poi convertilo in comunque se vuoi trasmetterlo. Quando lo si archivia in un database o simile, memorizzarlo come una bella struttura (non un numero grande).

Cercare di mettere le cose a pezzi non ha più senso. La memoria è economica. È più facile trasmettere una stringa lunga 40 caratteri che contiene [ynm] con cui lavori: un codice pulito che puoi ragionare senza problemi.

    
risposta data 09.12.2014 - 21:52
fonte

Leggi altre domande sui tag