Нарисуйте большой круг на большом листе бумаги.Запишите все целые числа от 0 до MAXINT по часовой стрелке от вершины круга, с равным интервалом.Запишите все целые числа от 0 до MININT против часовой стрелки, снова с одинаковым интервалом.Обратите внимание, что MININT находится рядом с MAXINT в нижней части круга.Теперь сделайте дубликат этой фигуры на обеих сторонах части жесткой карты.Прикрепите жесткую карту к кругу через центры обоих.Выберите угол поворота, любой угол, который вам нравится.Теперь у вас есть отображение 1-1, которое удовлетворяет некоторым вашим требованиям, но, вероятно, недостаточно ясно.Открепите карту, переверните ее по диаметру, любому диаметру.Повторяйте эти шаги (в любом порядке) до тех пор, пока у вас не получится биекция, которой вы довольны.
Если вы внимательно следите за этим, то не составит труда запрограммировать его на предпочитаемом вами языке.
Для уточнения после комментария: Если вы поворачиваете карточку только против бумаги, то метод такой же простой, как вы жалуетесь.Однако, когда вы переворачиваете карту поверх сопоставления, это не эквивалентно (x+m) mod MAXINT
для любого m
.Например, если вы оставите карту не повернутой и перевернете ее по диаметру через 0 (который находится на верхней части циферблата), тогда 1 отобразится на -1, от 2 до -2 и так далее.(x+m) mod MAXINT
соответствует только поворотам карты.