Навигация

• Онлайн: 2



Яндекс
games/num_sys/play.txt · Последнее изменение: 26.08.2026 14:48 — nozdr

Играем с системами счисления

Итак, нам нужно придумать, каким образом использовать свойства систем счисления для создания интересных задачек и головоломок.

Пока мне видится несколько подходов:

  1. прямое использование редких систем счисления;
  2. неочевидные переводы чисел из одной системы в другую;
  3. составление слов-выражений из буквенных чисел систем счисления;
  4. комбинирование разных подходов.

Самое простое – это, конечно, чистая математика и информатика – перевод чисел из одной системы счисления в другую.

Например, встретили мы подсказку в виде 11111101010, а потом нам где-то нужно ввести пин-код из 4 цифр. Переводим двоичное число в десятичное и всё, даже особо думать не надо.

  • `11111101010_2 → 2026_10`

Намного интереснее, конечно, использовать какие-то более редкие и нестандартные варианты использования систем счисления. "Легко заметить, что" при прямом использовании древних систем счисления числа выглядят совсем не так, как мы привыкли их видеть. И поэтому если просто записать какое-то число, например, в древнегреческой или системе Майя, то это будет прям как самый натуральный шифр. Если с римскими числами ещё более-менее привычно:

  • `2026 = 1000(M)+1000(M)+10(X)+10(X)+5(V)+1(I) = MMXXVI`

то, например, с вавилонской или древнерусской будет уже совсем стрёмно :)

  • `2026_10 = 33(46`ост`)_60 = 33,46_60 =` <<<||| <<<<||||||
  • `2026_10 = 1000(`҂`) * 2(`в`) + 20(`к`) + 6(`ѕ`) = ` ҂вк҃ѕ.

Приведу несколько практических примеров.

Москва

Представьте, что мы играем в какую-то игру, и по дороге попадается такая картинка:

Часы в Суздальском Кремле

Это реальные часы на Суздальском Кремле. Первое документальное упоминание об этих часах встречается в переписной книге Богородице-Рождественского собора за 1682 год. Главная особенность циферблата — использование букв древнерусского алфавита для обозначения чисел. Такая система счисления была распространена на Руси до реформы Петра I в 1721 году. Чтобы не перепутать букву с цифрой, над ней ставили специальный знак — титло (в виде волнистой галочки или двух точек).

Похожие часы были не только в Суздале. Вот часы на башне Спасо-Преображенского Собора в Нижегородском Кремле:

В общем, порадовались мы интересным часикам и пошли играть дальше. И вдруг по ходу игры натыкаемся на такое:

Москва

И теперь, вспомнив в качестве подсказки циферблат с буквами, теперь уже действительно «легко увидим, что» это очень похоже на те самые древнерусские цифры в виде букв с титлами – «цифирь». Осталось где-то найти информацию про то, как именно всё кодировалось (вот же, внизу) и «расшифровать», подставляя вместо букв числовые значения:

Цифирь

и получаем: `москва = 40+70+200+20+2+1 = 333`. Прикольно, правда? :) хотя и не очень соответствует тогдашним правилам составления чисел.

На самом деле в записи чисел подобными непозиционными системами обычно принято сначала писать старшие разряды. То есть запись числа 333 должна бы была выглядеть как-то так: `333 = 300 + 30 + 3 = тлг`. Загадать число 333 буквами тл҃г. – не очень интересно. А вот со словом МОСКВА получилось намного красивее, хотя это скорее не запись числа, а арифметическое выражение, то есть прям самая настоящая математическая задачка с использованием древнерусской системы счисления.

  • https://azbyka.ru/converter – Конвертер церковнославянских, греческих, еврейских и римских чисел

DVI+CD

Или, например, проходим мы веболомку и видим такую надпись:

Если сразу не придёт в голову, что это римские числа, то на это должны навести пара неявных подсказок. Во-первых, это написано довольно популярным шрифтом «Times New Roman», а во-вторых, стиль шрифта – курсив, то есть «Italic». Не буду говорить, что это легко заметить… но можно. Обычно люди знают, что есть римские цифры X=10, V=5, I=1, но не знают, что есть ещё и L=50, C=100, D=500 и M=1000:

Выходит, это обычное арифметическое выражение, записанное римскими числами, и надо посчитать его результат, чтобы получить ответ. DVI = 500+5+1 = 506. C - это 100, D – это 500, CD = -100+500 = 400. Ну и для кайфа записать ответ римскими же числами. В результате получим:

  • `DVI+CD = 506+400 = 906 = CMVI`

Опять мы видим обычное математическое выражение, но здесь сбивает с толку, что числа по написанию совпадают с известными словами и уводят мысль в сторону от арифметики. Можно загадать ещё жёстче:

Но в этом случае нужно будет придумать какие-то явные подсказки, указывающие на римские цифры. Может быть, надпись какую-нибудь на CD нанести типа «Однажды в Риме» или «Римские каникулы» :)

В моей старой веболомке 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 ряда, нажмём кнопки там, где стоят единички и – вуаля!

  • `C O F F E E → C 0 F F E E_16 →`
  • `→ 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]] `

На картинке выше уже горит нужная последовательность. Кто-то подобрал число, дверь открылась, и он побежал дальше, даже кофе не допил…

Можете попробовать поиграться с другими паттернами:

Кружка какао

Кстати, кружка может быть не с кофе, а с какао. Вот одна задачка из моей недоделанной новогодней веболомки:

Какао

Как её решать? Ну обычно всё же вокруг такой задачки расставляют разные подсказки, которые возникают на неправильные попытки ответа игрока. И эти подсказки тоже, как и в задачке выше, должны привести к тому, что нужно слово «какао» записать в шестнадцатеричном виде. Но тут «есть один нюанс», даже два. Во-первых, «какао» по-английски вовсе не CACAO, а COCOA, т.е. должно получиться число `C0C0A_16` :) А во-вторых, чашечка с какао изображена в квадратной рамочке, то есть «в квадрате». И решение тут подразумевалось такое:

  • «Какао в квадрате» = `C0C0A_16 * C0C0A_16 = 91 2180 F064_16`

Разные слова из шестнадцатеричных цифр

Вообще шестнадцатеричные коды применяются в информатике и компьютерной технике очень часто. Их можно увидеть, просматривая содержимое исполняемых файлов, работая с цветами в вебе или графических программах, да много где ещё. Точно так же, как десятичную систему удобно применять для подсчётов в математике, шестнадцатеричную систему удобно применять именно на компьютерах. Все компьютеры работают на электричестве, а там всего два вида сигналов – высокий заряд и низкий; есть ток или нету. В общем, двоичная система. Она очень громоздка в своей записи, поэтому её и «сворачивают» до шестнадцатеричной, основанной на степени двойки.

Давайте подумаем, какие слова можно составить из шестнадцатеричных цифр. Вы уже видели, как получились C0FFEE и C0C0A. А можно ли составить ещё слова? А предложение из таких слов?

В шестнадцатеричной системе счисления есть следующие цифры: 0123456789ABCDEF. Составлять слова из десятичных цифр сложновато, букв вроде бы совсем мало. Но если привлечь технологию LEET, то нам будет доступно гораздо большее число «букв», потому что некоторые цифры напоминают некоторые буквы. Например, вот так: G=6=9, I=1, L=l=1, O=0, S=5, T=7, Z=2.

Итого имеем 13 букв, из них аж 4 гласные: ABCDEFGILOSTZ – довольно хороший наборчик. Например, из этого набора можно составить более 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, а какао таким #C0C0A. Не совсем цвета кофе и какао, конечно, но в этом и прелесть. Как вы заметили, слово может быть и короче шести символов.

Наверху на 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.

А вообще можно и нужно составлять не только английские, но и русские слова, для них можно применять такие правила перекодировки: АБВгдЕЗОСТЧ ↔ A6B29E30C74. Например, #4AEBO9 #BCE29A #B3A4ET = «чаевод всегда взачёт» :)

Хороший пример использования зашифрованных шестнадцатеричными цветами слов был в 10-й задаче веболомки WM.

Большие системы счисления

Как мы видели выше, недостаток букв сказывается на качестве получаемых слов. В 16-ричной системе было 16 цифр: 0123456789ABCDEF, из них только 6 полноценных букв, этого мало, приходится прибегать к разным обходным решениям. Но ведь ничто нам не мешает взять систему бОльшего порядка, чтобы в ней уместились все нужные нам буквы.

Возьмём для примера 36-ричную систему со следующим набором цифр:

  • 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ

У нас теперь есть полный алфавит и можно составлять вообще любые слова и загадки на их основе.

36-ричная система

Например, такая «простая» загадка:

  • `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`.

Многие кириллические буквы совпадают с латинскими, поэтому кодировать подобным образом можно и русские слова.

  • `M O C K B A_36 = 22*36^5 + 24*36^4 + 12*36^3 +`
  • `+ 20*36^2 + 11*36^1 + 10*36^0 =`
  • `= 1330255872 + 40310784 + 559872 + 25920 + 396 + 10 =`
  • `= 1371152854_10`

Всё действительно очень просто :)

А вот задачка наоборот:

  • `991 378 157_10 = ?_32`

Здесь уже 32-ричная система. Делим число на 32, пока делится, и затем записываем остатки в обратном порядке, заменяя их буквами из таблички выше.

  • `991378157 ÷ 32 = 30980567 (13` ост`) → D`
  • `30980567 ÷ 32 = 968142 (23` ост`) → N`
  • `968142 ÷ 32 = 30254 (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

Восьмеричная математика

Однажды в квесте от MAIL.RU, посвящённом дню программиста, мне встретилась вот такая интересная задачка:

  • `7+7=16`
  • `7×7=???`

Первая и правильная мысль была, что это в восьмеричной системе счисления. Открываем калькулятор, переводим в восьмеричную систему счисления, проверяем догадку. Действительно, 7+7=16, а 7×7=61. Кстати, задачка про кофе и следующая задачка для гиков подсмотрены в том же квесте.

Задачка для гиков

Вот ещё один хороший пример мозголомной задачки на большие системы счисления. Специально для гиков :)

`{(feed_a+cb0b6_b=?_(a+b)),(a*b=221):}`

Как решать? Вроде бы данных недостаточно, два уравнения, три неизвестных. А ведь всё просто. При недостатке данных занимаемся, как обычно перебором.

Произведение двух чисел = 221. Попробуем найти все такие числа, которые дают при умножении 221. У числа 221 всего два делителя – 13 и 17. Нам, получается, и перебирать-то особо нечего, всего два возможных варианта: либо 13*17, либо 17*13.

FEED не может быть в 13-ричной системе счисления (там набор цифр 0123456789ABC, а тут есть DEF, то есть должна быть как минимум 16-ричная система), значит FEED – число 17-ричной системы счисления, а CB0B6 – 13-ричной.

Приводим числа к одной системе (например, 10-тичной). `F E E D_17 = 77992_10`, `CB0B6_13 = 367048_10`. Складываем `77992_10 + 367048_10 = 445040_10`. Ответ должен быть в `13+17=30`-ричной системе. `445040_10 = G E E K_30`. Ответ: geek.

В решённом виде эта система выглядит так:

`{(F E E D_17+C B 0 B 6_13=G E E K_30),(17*13=221):}`

Интересно подобрать числа и основания так, чтобы все три слова были читаемыми. Но это, наверное, капец как сложно. Хотя, для компьютера и метода перебора ничего сложного нет, надо всего лишь написать нужную программку. Как-нибудь займусь этим. Или вы займитесь. Я же говорил, что задачка для гиков-математиков-программистов :)

Конвертер из любой системы в любую систему

Перевод систем счисления предоставлен сайтом calcus.ru

Ссылки


Инструменты страницы

Инструменты пользователя