Un numero variabile di bit è un array di 0 o più bit. Così [0, 1]
è un numero variabile di bit, ma lo è anche []
.
Scrivi una funzione o un programma che, dato un numero intero non negativo, restituisca un numero variabile di bit in modo tale che ogni numero intero abbia una mappatura uno a uno (biiettiva) con un array.
Esistono un'infinità di tali mappature, sei libero di costruirne uno a tuo piacimento, ma deve essere uno a uno. Il tuo mapping deve essere concettualmente uno a uno per un numero intero di dimensioni arbitrarie, ma va bene se l' implementazione non riesce per numeri interi di grandi dimensioni a causa di limiti numerici di tipi nella tua lingua preferita (ad es. C int
).
Come esempio di ciò che non è un mapping uno a uno, è semplicemente elencare le cifre binarie dell'intero. In un tale sistema 5 diventa [1, 0, 1]
(o 0b101
), ma non è uno a uno, perché 0b0101
o [0, 1, 0, 1]
significa anche 5.
Dovrebbe essere abbastanza ovvio che un mapping non è uno a uno se salta un numero intero (ad esempio non funziona per 5), ma vorrei chiarire che saltare un array di bit variabile non è nemmeno uno -to-uno. È necessario eseguire il mapping a tutti i possibili array di bit variabili, incluso []
.
Vince il codice più breve in byte.