• Онлайн: 2
Содержание
Играем с системами счисления
Итак, нам нужно придумать, каким образом использовать свойства систем счисления для создания интересных задачек и головоломок.
Пока мне видится несколько подходов:
- прямое использование редких систем счисления;
- неочевидные переводы чисел из одной системы в другую;
- составление слов-выражений из буквенных чисел систем счисления;
- комбинирование разных подходов.
При прямом использовании редких систем счисления числа выглядят совсем не так, как мы привыкли их видеть. И поэтому если просто записать какое-то число, например, в древнегреческой или системе Майя, то это будет прям как самый натуральный шифр.
Приведу несколько примеров.
Москва
Представьте, что мы играем мы в какую-то игру, по дороге попадается такая картинка:
Это реальные часы на Суздальском Кремле. Первое документальное упоминание об этих часах встречается в переписной книге Богородице-Рождественского собора за 1682 год: «На той же колокольнице часы боевые, перечастные в 8 колоколов». За их работой следил специальный человек — «часоводец».
Главная особенность циферблата — использование букв древнерусского алфавита для обозначения чисел. Такая система счисления была распространена на Руси до реформы Петра I в 1721 году. Чтобы не перепутать букву с цифрой, над ней ставили специальный знак — титло (в виде волнистой галочки или двух точек).
Похожие часы были не только в Суздале. Вот часы на башне Спасо-Преображенского Собора в Нижегородском Кремле:
В общем, порадовались мы и пошли играть дальше. И вдруг по ходу игры натыкаемся на такое:
И теперь, вспомнив в качестве подсказки циферблат с буквами, легко увидеть, что это очень похоже на те самые древнерусские цифры – «цифирь». Чтобы «расшифровать», подставляем вместо букв числовые значения:
и получаем: `москва = 40+70+200+20+2+1 = 333`. Прикольно, правда? :) хотя и не очень соответствует тогдашним правилам составления чисел.
На самом деле в записи чисел подобными непозиционными системами обычно принято сначала писать старшие разряды. То есть запись числа 333 должна бы была выглядеть как-то так: `333 = 300 + 30 + 3 = тлг`. Загадать число 333 буквами тл҃г. – не очень интересно. А вот со словом МОСКВА получилось намного красивее, хотя это скорее не запись числа, а арифметическое выражение, то есть прям самая настоящая математическая задачка с использованием древнерусской системы счисления.
- https://azbyka.ru/converter – Конвертер церковнославянских, греческих, еврейских и римских чисел
MIX+CD
Или, например, проходим мы веболомку и видим такую картинку:
Если сразу не придёт в голову, что это римские числа, то на это должны навести пара неявных подсказок из CSS. Во-первых, это написано довольно популярным шрифтом «Times New Roman», а во-вторых, стиль шрифта – курсив, то есть «Italic».
Выходит, это обычное арифметическое выражение, записанное римскими числами, и надо посчитать его результат, чтобы получить ответ. M=1000, I=1, X=10, MIX = 1000+(-1+10) = 1009. C - это 100, D – это 500, CD = -100+500 = 400. Ну и для кайфа записать ответ римскими же числами. В результате получим:
- `MIX+CD = 1009+400 = 1409 = MCDIX`
Опять мы видим обычное математическое выражение, но здесь сбивает с толку, что числа по написанию совпадают с известными словами и уводят мысль в сторону от арифметики.
В моей старой веболомке 2018, посвящённой наступающему тогда 2018 году была похожая задачка, заспойлерю её тут. Там была запись «MIX+MIX». Так вот, 1009+1009 как раз равно 2018 :) и ответ был MMXVIII.
Кружка кофе
А теперь представим, что мы снова играем в какую-то игру или проходим квест. На одном из этапов нам встречается панель с кнопками и нужно включить на панели несколько из них, чтобы что-то открыть. Кнопок аж 24 штуки. Перебирать все возможные комбинации всей жизни не хватит. Но у нас есть подсказка – кружка горячего кофе с надписью HEX2BIN. Обычно такой аббревиатурой называют утилиты или функции, которые осуществляют перекодировку из 16-ричной системы (HEX) в двоичную (BIN): hexadecimal to binary. И, например, немного ранее нам сказали, что «в кофе вся суть».
Похоже, что нам требуется преобразовать какое-то шестнадцатеричное число в двоичное (состоящее из 0 и 1 - выкл-вкл) и получить тем самым «карту» включения кнопок. Где же взять это число, если его нигде нет? Значит, надо попытаться где-то найти что-то, что похоже на 16-ричное число. Кружка с этим самым кофе, стоящая прямо перед нами, кагбэ намекает… В общем, можно "легко увидеть, что..." буквы слова КОФЕ, записанного латинскими буквами COFFEE уж очень сильно напоминают шестнадцатеричные цифры :) `C O F F E E → C 0 F F E E_16 → 110000001111111111101110_2`. И мы легко получили нужную нам последовательность. Запишем цифры в 4 ряда, нажмём кнопки там, где стоят единички и – вуаля!
- `110000001111111111101110_2 -> [[1,1,0,0,0,0],[0,0,1,1,1,1],[1,1,1,1,1,1],[1,0,1,1,1,0]] `
Можете попробовать поиграться с другими паттернами:
Разные слова из шестнадцатеричных цифр
На компьютере очень часто применяются шестнадцатеричные коды. Их можно увидеть, просматривая содержимое исполняемых файлов, работая с цветами в вебе или графических программах, да много где ещё. Давайте подумаем, какие слова можно составить из шестнадцатеричных цифр. Вы уже видели, как получилось C0FFEE. А можно ли составить ещё слова? А предложение из таких слов?
В шестнадцатеричной системе счисления есть следующие цифры: 0123456789ABCDEF. Составлять слова из десятичных цифр сложновато, а букв вроде бы совсем мало. Но если привлечь технологию LEET, то нам уже будет доступно гораздо большее число «букв». Потому что некоторые цифры напоминают некоторые буквы. Например, вот так: G=6=9, I=1, L=l=1, O=0, S=5, T=7, Z=2.
Итого, у нас получается вот такой набор букв, из которых можно составить свой словарь, а потом уже подумать, какие из этих слов нас могут заинтересовать, чтобы сделать из них задачку: ABCDEFGILOSTZ. 13 букв, 4 гласные – довольно хороший наборчик. Например, из этого набора можно составить более 2000 английских слов, даже одно 10-буквенное: decalogist (DECAl09157). Но нам могут быть более интересны слова покороче, например из 6 букв:
- sizeof zodiac adidas doodle bobcat tabaco cobalt collab baffle biface fabled blazed babels battle bladed labels tables gabled albedo cables atleet
- 512E0F 20D1AC AD1DA5 D00D1E B0BCA7 7ABAC0 C0BA17 C011AB BAFF1E B1FACE FAB1ED B1A2ED BABE15 BA771E B1ADED 1ABE15 7AB1E5 6AB1ED A1BED0 CAB1E5 A71EE7
А почему из шести? Потому что если приписать к ним спереди значок #, то получим цвет в формате RGB:
- #512E0F #20D1AC #AD1DA5 #D00D1E #B0BCA7 #7ABAC0 #C0BA17 #C011AB #BAFF1E #B1FACE #FAB1ED #B1A2ED #BABE15 #BA771E #B1ADED #1ABE15 #7AB1E5 #6AB1ED #A1BED0 #CAB1E5
И наш кофе станет вот таким: #C0FFEE. Не совсем кофейный цвет, конечно, но в этом и прелесть. Не зря я добавил вверху на LED-панели с кнопками колорпикер, показывающий текущий цвет. Можете проверить, если не верите :)
И из таких слов можно составлять целые предложения. Например, DEBA5E 1ABE15 D0EA5E 7AB1E5 = debase labels do ease tables. Смысла немного, не более чем во фразе "The quick brown fox jumps over the lazy dog". Но зато этим предложением можно зашифровать последовательность из 4 цветов. В общем, такому способу кодирования словами шестнадцатеричных чисел можно найти разные применения.
Можно вместо E использовать 3. Количество слов не изменится, а вот цвет может. Вот одно и то же слово, записанное с разным вариантом использования Е и 3: #A71EE7 #A71337.
Хороший пример использования зашифрованных шестнадцатеричными цветами слов был в 10-й задаче веболомки WM.
Большие системы счисления
Как мы видели выше, недостаток букв сказывается на качестве получаемых слов. В 16-ричной системе было 16 цифр: 0123456789ABCDEF, из них только 6 полноценных букв, этого мало, приходится прибегать к разным обходным решениям. Но ведь ничто нам не мешает взять систему бОльшего порядка, чтобы в ней уместились все нужные нам буквы.
Возьмём для примера 36-ричную систему со следующим набором цифр:
- 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
У нас теперь есть полный алфавит и можно составлять вообще любые слова и загадки на их основе.
Например, такая «простая» загадка:
- `N O Z D R_36 = ?`
Простая - потому что нам нужно именно что просто перевести 36-ричное числов в обычное десятичное (т.к. основание результата не указано, считаем его по умолчанию = 10). Т.к. это позиционная система счисления, то буква в каждой позиции является коэффициентом при основании (36), возведённом в степень разряда буквы. Короче, берём числовое значение буквы и домножаем его на 36 в соответствующей степени:
- `N O Z D R_36 = [N=23, O=24, Z=35, D=13, R=27] =`
- `= 23*36^4 + 24*36^3 + 35*36^2 + 13*36^1 + 27*36^0 =`
- `= 38 631 168 + 1 119 744 + 45 360 + 468 + 27 = 39 796 767_10`.
Всё действительно очень просто :)
Или задачка наоборот:
- `991 378 157_10 = ?_32`
Здесь уже 32-ричная система. Делим число на 32, пока делится и затем записываем остатки в обратном порядке, заменяя их буквами из таблички выше.
- `991378157 ÷ 32 = 30 980 567 (13` ост`) → D`
- `30980567 ÷ 32 = 968 142 (23` ост`) → N`
- `968142 ÷ 32 = 30 254 (14` ост`) → E`
- `30254 ÷ 32 = 945 (14` ост`) → E`
- `945 ÷ 32 = 29 (17` ост`) → H`
- `29 ÷ 32 = 0 (29` ост`) → T`
- Получаем `991 378 157_10 = T H E E N D_32 = ` The end
Конвертер из любой системы в любую систему
Перевод систем счисления предоставлен сайтом calcus.ru








