Il problema chiedeva, utilizzando meno ipotesi possibili, di calcolare quello che sappiamo tutti, già dal primo contatto con l'informatica: il numero di bit in un byte.
Una soluzione potrebbe essere questa:
System.Convert.ToString(unchecked((byte)~0), 2).Length
tirata fuori da un'idea di Pietro Toniolo - ho apprezzato il fatto che NON ha pensato a "byte.MaxValue" (avrebbe fatto un'altra ipotesi ancora, quella del segno...). Però è un po' bruttino il fatto che calcoliamo il numero di bit in un tipo partendo da un valore (0) di quel tipo. Riusciamo a trovare una soluzione più "generale"?
Io ho pensato così:
System.BitConverter.ToString(new byte[1]).Replace("-", string.Empty).Length * 4
dove ci ricordiamo che la documentazione originale del metodo BitConverter.ToString dice:
"Return value: a String of hexadecimal pairs separated by hyphens, where each pair represents the corresponding element in value; for example, "7F-2C-4A"".
E' vero che noi passiamo al metodo ToString un array di un byte, quindi questo Replace in realtà non serve perché avremo trattini ("-") solo per più byte. Si ottiene la rappresentazione esadecimale della rappresentazione a bit di un byte (e il valore del byte non importa! anche se essendo un value type abbiamo un valore default). Il numero di cifre esadecimali si moltiplica per 4 visto che:
System.Math.Log(0xF + 1, 2)
è 4. Altre soluzioni? Commenti?
I versi del giorno: Pavese - "The cats will know" (p. 142):
"Tra fiori e davanzali
i gatti lo sapranno."