szukam mały, szybki (w obu kierunkach) bijective mapowanie pomiędzy poniższej listy liczb całkowitych i podzbioru zakresu 0-127:Efektywne mapowanie dla określonej skończonej liczby całkowitej ustawić
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
oczywistym rozwiązaniem jest:
y = x>>2 & 0x40 | x & 0x3f;
x = 0x2000 | y<<2 & 0x100 | y & 0x3f;
Edit: mi brakuje niektórych wartości, zwłaszcza 0x20Ax, które nie współpracują z powyższych.
Innym oczywistym rozwiązaniem jest tablica przeglądowa, ale bez konieczności niepotrzebnego powiększania, tabela przeglądowa i tak wymagać będzie nieco przegrupowania i podejrzewam, że całe zadanie można lepiej wykonać przy prostym przegrupowaniu bitów.
Dla ciekawskich, te magiczne liczby są jedynymi "dużymi" kodami kodowymi Unicode, które pojawiają się na starszych stronach kodowych ISO-8859 i Windows.
http://en.wikipedia.org/wiki/Quine%E2%80%93McCluskey_algorithm –
okazji, bijective odwzorowywania podzbioru jest wywoływana za pomocą wstrzyknięć;) – Christoph