我和我的朋友有我们用文字玩的游戏。这是一个有趣的消遣,它涉及单词中的“删除”字母,直到没有剩余为止。我真的很讨厌他比我快很多,所以实施它并让我最终击败他是您的工作。显然,由于我必须使程序尽可能容易地隐藏,因此它必须尽可能小。
这个游戏如何运作?
游戏是一个非常简单的算法。它减少了字母字符串,直到无法进一步减少为止,从而使其成为一种哈希。我们人类所做的实际游戏很难实现,但可以简化为以下算法:
首先将字母对折,然后将两部分对齐,如下所示:
a b c d e f g h i j k l m
z y x w v u t s r p q o n
然后,从中间开始,将正整数分配给上半部,将负整数分配给下半部:
a b c d e f g h i j k l m
13 12 11 10 9 8 7 6 5 4 3 2 1
z y x w v u t s r p q o n
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
然后,您将您的字符串(我们将使用hello world
)并忽略任何非字母字符,将其翻译为:
h e l l o w o r l d
6 9 2 2 -2 -10 -2 -5 2 10
然后,您求和字母值。在前面的图中排列的那些(例如d
和w
,l
和o
)将被抵消,而其他的将相加。
sum(6 9 2 2 -2 -10 -2 -5 2 10 )=12
12是的数字b
,因此的哈希hello world
是b
对于完全抵消的单词(例如love
),您输出“ 0字符”:-
。注意,在输入中,-
仍将被忽略。仅在输出中重要。
如果数字的幅度大于13,那么你就开始对翻倍a
的和z
是你基本上是采取尽可能多a
的或z
的配入数量,并采取一切留到像这样的最后一封信:
code golf: 43.
适合3 a
,剩余4:
aaa 4: j
result: aaaj
提示:这部分是基本上divmod
不同的是其四舍五入朝向零,而不是-infinity
(例如-43将成为3 z
的与和-4
其是p
如此zzzp
)。
注意:如果a
或z
完全适合,则破折号不会出现,仅当它恰好是时才行0
。
说明:
例子:
hello world --> b
love --> -
this is an example --> aak
hello *&*(&(*&%& world --> b
good bye --> ae
root users --> zzs
love
是空的...