CJam,50个字节
r{i",ÙZ°^ªýx´|"257b27b=A+Ab}%2ew::.-::z2fb:+
请注意,该代码包含不可打印的字符。
在CJam解释器中在线尝试。如果永久链接不起作用,请复制此粘贴中的代码。
背景
我们开始将位置0到9分配给顶行的字母,将10到18分配给主行的字母,将20到26分配给底行的字母。
所有26个字母的位置按字母顺序排列
[10 24 22 12 2 13 14 15 7 16 17 18 26 25 8 9 0 3 11 4 6 23 1 21 5 20]
这是一个长度为26的数组。由于数组在CJam中环绕,并且字母h的代码点为104 = 4×26,所以我们将数组向左旋转7个单位,以便每个字母的位置都可以通过其位置来访问。代码点。
[15 7 16 17 18 26 25 8 9 0 3 11 4 6 23 1 21 5 20 10 24 22 12 2 13 14]
现在,我们通过考虑数组的元素以27为底的数字对数组进行编码,并将所得整数转换为257。
[6 153 44 8 217 90 176 156 94 24 170 253 147 120 180 124]
通过用相应的Unicode字符替换每个整数,我们从源代码中获取字符串。
怎么运行的
r e# Read a whitespace separated token from STDIN.
{ e# For each character:
i e# Push its code point.
",ÙZ°^ªýx´|" e# Push that string.
257b27b e# Convert from base 257 to base 27.
A+Ab e# Add 10 and convert to base 10.
e# Examples: 7 -> [1 7], 24 -> [3 4]
}% e#
2ew e# Push all overlapping slices of length 2.
::.- e# Subtract the corresponding components of the pairs in each slice.
::z e# Apply absolute value to the results.
2fb e# Convert each to integer (base 2).
e# Example: [2 5] -> 2 × 2 + 5 = 9
:+ e# Add the distances.