为任何给定的Unicode字符序列(如字母)创建一个双向Gematria计算器。
Gematri-什么?
Gematria是一种为符号分配数值的系统,该系统由古希腊人开发并由古代犹太人采用。它采用类似于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。
我们需要知道两件事。
该系统最重要的功能之一是通过对单词的字母值求和来计算单词的“ Gematria值” 。(有人说单词或短语(当空间的值为零时)之间存在神秘的联系-它们共享相同的Gematria值)。
任何非负整数都可以用符号表示。例如(现在让我们继续使用英语字母),值32是LB(L = 30 + B = 2)。1024的值为ZTKD(800 + 200 + 20 + 4。请注意,ZSSKD也是1024,但这不是合法的表示形式,因为可以压缩)。
挑战
用您选择的语言编写一个程序/函数/代码段,首先用一个字母(参见下面的API)进行设置,然后接受一个参数。该自变量可以是整数,也可以是单词/短语。如果是Integer,则您的程序应输出/返回以字母符号表示的形式-最紧凑的形式(请参见上面的(2))。如果是单词或短语,则程序应输出/返回Gematria值(通过累加符号的值,不计算空格,请参见上面的(1))。
API
您的程序/函数应接受3个参数。您可以从STDIN中获取它们,或者作为函数参数,甚至可以假设它们是在函数调用之前以编程方式初始化的变量。
- 第一个参数-字母的第一个字符(Unicode中)。
- 第二个参数-字母的最后一个字符(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日UTC,获胜者将是一周内得分最高的答案。