Создайте двунаправленный калькулятор Gematria для любой заданной последовательности символов Юникода в качестве алфавита.
Gematri-Что?
Гематрия - это система присвоения числовых значений символам, разработанная древними греками и принятая древними евреями. Это похоже на ASCII или Unicode, это просто нелинейно ... См. Следующую таблицу (полная таблица доступна по ссылке выше):
Index Letter Letter name Value
--------------------------
0 א "Alef" 1
1 ב "Bet" 2
...
8 ט "Tet" 9
9 י "Yud" 10
10 כ "Kaf" 20
...
17 צ "Tsady" 90
18 ' "Kuf" 100
19 ר "Resh" 200
...
Названия букв не важны, только их индекс в «массиве» алфавита и соответствующее числовое значение. Еврейский алфавит состоит только из 22 букв (не считая «последних» букв), поэтому максимально доступное значение составляет 400.
Если мы заимствуем эту систему для английского алфавита (AZ), мы получим A = 1, B = 2 ... L = 30 ... U = 300 ... Z = 800.
Две вещи, которые мы должны знать.
Одной из наиболее важных функций в этой системе является вычисление «значения гематрии» слова путем суммирования значений его букв. (Некоторые говорят, что между словами или фразами существует мистическая связь (когда значение пробела равно нулю), которые имеют одинаковое значение Гематрии).
Любое неотрицательное целое число может быть представлено в символах. Например (и давайте пока остановимся на английском алфавите), значение 32 - это LB (L = 30 + B = 2). Значение 1024 - это ZTKD (800 + 200 + 20 + 4. Обратите внимание, что ZSSKD также является 1024, но это не является юридическим представлением, поскольку оно может быть сжато).
Соревнование
Напишите программу / функцию / фрагмент кода на выбранном вами языке, который сначала настраивается с помощью алфавита (см. API ниже), а затем принимает аргумент. Этим аргументом может быть целое число или слово / фраза. Если это целое число - ваша программа должна вывести / вернуть свое представление в символах алфавита - наиболее компактное (см. (2) выше). Если это слово или фраза, ваша программа должна вывести / вернуть значение Gematria (суммируя значения символов, не считая пробелы, см. (1) выше).
API
Ваша программа / функция должна принимать 3 аргумента. Вы можете получить их из STDIN или в качестве аргументов функции, вы даже можете предположить, что они являются переменными, которые программно инициализируются до вызова вашей функции.
- Первый аргумент - первый символ (в Unicode) алфавита.
- Второй аргумент - последний символ (в Юникоде) алфавита.
- Третий аргумент - целое число, представляемое в символах, ИЛИ фраза, созданная данным алфавитом.
Выходное / возвращаемое значение: в зависимости от третьего аргумента, как описано выше.
Предположения
- Первые два аргумента всегда будут иметь длину один символ, а второй всегда будет больше первого.
- Последовательность (от первого до последнего включительно) никогда не будет включать ни одно из значений 30-39 (которые представляют цифры 0-9), в противном случае третий аргумент будет неоднозначным. РЕДАКТИРОВАТЬ: он также не будет содержать пробел, так как во фразах пробелы считаются нулями.
- Третий аргумент, если это фраза, может содержать только пробелы и буквы данного алфавита. Пустая строка не является допустимым вводом (можно предположить, что он не пустой). Если это целое число, вы можете предположить, что это положительное целое число.
Примеры
Input Output
A Z CODE GOLF 175
a s 512 sssssjb
A B 7 BBBA
≐ ⊐ ≤≫ ≥ 1700
счет
Score = upvotes - length/100.0
Ваш код должен быть коротким, но, что более важно, популярным. Отрицательные оценки также могут играть вместе. Победителем станет ответ с наибольшим количеством очков через неделю, 2014-11-29 19:20:00 UTC.