Sto cercando un piccolo, veloce (in entrambe le direzioni) corrispondenza biunivoca tra la seguente lista di numeri interi e un sottoinsieme della gamma 0-127:mappatura efficiente per un particolare intero insieme finito
0x200C, 0x200D, 0x200E, 0x200F,
0x2013, 0x2014, 0x2015, 0x2017,
0x2018, 0x2019, 0x201A, 0x201C,
0x201D, 0x201E, 0x2020, 0x2021,
0x2022, 0x2026, 0x2030, 0x2039,
0x203A, 0x20AA, 0x20AB, 0x20AC,
0x20AF, 0x2116, 0x2122
una soluzione ovvia è:
y = x>>2 & 0x40 | x & 0x3f;
x = 0x2000 | y<<2 & 0x100 | y & 0x3f;
Edit: mi mancava alcuni dei valori, in particolare 0x20Ax, che non funzionano con quanto sopra.
Un'altra soluzione ovvia è una tabella di ricerca, ma senza renderla inutilmente grande, una tabella di ricerca richiederebbe comunque un po 'di riarrangiamento e sospetto che l'intero compito possa essere meglio realizzato con un riarrangiamento bit semplice.
Per i curiosi, quei numeri magici sono gli unici codepoint Unicode "grandi" che appaiono nelle legacy ISO-8859 e nelle codepage di Windows.
http://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm –
btw, una corrispondenza biunivoca su un sottoinsieme è chiamato iniettiva;) – Christoph