m | Y bR | ain为We | iRd。F(o)RT(h)E La | sT fi(v)e YE | ars O | R s | o,(I)在h(a)lf wh | En中具有C(u)T wO | rds (I)s(e)e Th | em。当我开始执行操作时,我付出了很大的努力-B(u)TI几乎不会(n)T d | o。N(o)w,我将其放在脑后,几乎没有(| n | d)它。但是,我认为这将是一个巨大的挑战。
定义
对于这个挑战,根据我对Sans-Serif字体宽度的判断,每个字母都会得到一个满分。您将使用此宽度将一个单词切成相等宽度的两半。该挑战将使用的字符是小写和大写字母,撇号和连字符。
Width Characters
1 i l I '
2 f j r t -
3 a b c d e g h k n o p q s u v x y z
4 m w A B C D E F G H J K L N O P Q R S T U V X Y Z
5 M W
对于我的解释和测试用例,|
表示可以将单词整齐地分成两半的位置。(
并)
在字母的两边表示该字母将被拆分为两半,以创建整齐的拆分。
输入值
输入将包含单个“单词”(不需要在字典中)。您可以在所需的任何文本输入中使用此单词(字符串,字符数组等)。该单词仅包含字母,'
和-
(请参见上表)。由于您将使用此词(请参见下文),因此输入的大小写由开发人员自行决定。如果需要,可以使用尾随换行符。
任务
排列所有形式的输入(所有可能的大写或小写位置的所有字母)。例如,对于input it's
,以下是所有排列:
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
要将单词的排列分为两半,单词一侧的点必须与单词另一侧的点相同。但是,如果一个字母卡在两个偶数部分之间,也可以将一个字母整齐地切成两半。
请注意,“一半”并不意味着您已移入字符串的一半。“半”表示两侧的点相等。
例子:
W
是5分。i
是1分。将排列Wiiiii
分为一半将导致W | iiiii
,在的每一面上有5点|
。
T
是3分。将排列TTTT
分为一半将导致TT | TT
,在的每一面上有6点|
。
w
是4分。a是3分。将排列waw
分为两半将w (a) w
得到,每边5.5点。来自的点a
分布在两侧,一a
分为二。
输出量
您的输出是输入的唯一排列数的整数,可以将输入整齐地分成两半。如果需要,可以使用尾随换行符。
测试用例
我将输出测试用例的输入的所有有效排列。请记住,这不属于您的规格。
在我的中间输出中,数字表示其上方字母的点值,因此输出更易于直观显示。
Input: a
( a )
3
( A )
4
Output: 2
Input: in
Output: 0
Input: ab
A | B
4 4
a | b
3 3
Output: 2
Input: abc
A ( B ) C
4 4 4
A ( b ) C
4 3 4
a ( B ) c
3 4 3
a ( b ) c
3 3 3
Output: 4
Input: will
W ( I ) L l
5 1 4 1
W ( I ) l L
5 1 1 4
W ( i ) L l
5 1 4 1
W ( i ) l L
5 1 1 4
w I | L l
4 1 4 1
w I | l L
4 1 1 4
w i | L l
4 1 4 1
w i | l L
4 1 1 4
Output: 8
Input: stephen
S T E ( P ) H E N
4 4 4 4 4 4 4
S T E ( p ) H E N
4 4 4 3 4 4 4
S T E | p h e n
4 4 4 3 3 3 3
S T e ( P ) H E n
4 4 3 4 4 4 3
S T e ( P ) H e N
4 4 3 4 4 3 4
S T e ( P ) h E N
4 4 3 4 3 4 4
S T e ( p ) H E n
4 4 3 3 4 4 3
S T e ( p ) H e N
4 4 3 3 4 3 4
S T e ( p ) h E N
4 4 3 3 3 4 4
S t E ( P ) H e n
4 2 4 4 4 3 3
S t E ( P ) h E n
4 2 4 4 3 4 3
S t E ( P ) h e N
4 2 4 4 3 3 4
S t E ( p ) H e n
4 2 4 3 4 3 3
S t E ( p ) h E n
4 2 4 3 3 4 3
S t E ( p ) h e N
4 2 4 3 3 3 4
S t e ( P ) h e n
4 2 3 4 3 3 3
S t e p | H E N
4 2 3 3 4 4 4
S t e ( p ) h e n
4 2 3 3 3 3 3
s T E ( P ) H E n
3 4 4 4 4 4 3
s T E ( P ) H e N
3 4 4 4 4 3 4
s T E ( P ) h E N
3 4 4 4 3 4 4
s T E ( p ) H E n
3 4 4 3 4 4 3
s T E ( p ) H e N
3 4 4 3 4 3 4
s T E ( p ) h E N
3 4 4 3 3 4 4
s T e ( P ) H e n
3 4 3 4 4 3 3
s T e ( P ) h E n
3 4 3 4 3 4 3
s T e ( P ) h e N
3 4 3 4 3 3 4
s T e ( p ) H e n
3 4 3 3 4 3 3
s T e ( p ) h E n
3 4 3 3 3 4 3
s T e ( p ) h e N
3 4 3 3 3 3 4
s t E ( P ) h e n
3 2 4 4 3 3 3
s t E p | H E N
3 2 4 3 4 4 4
s t E ( p ) h e n
3 2 4 3 3 3 3
s t e P | H E N
3 2 3 4 4 4 4
s t e p | H E n
3 2 3 3 4 4 3
s t e p | H e N
3 2 3 3 4 3 4
s t e p | h E N
3 2 3 3 3 4 4
Output: 37
Input: splitwords
S P L I T | W O r d s
4 4 4 1 4 5 4 2 3 3
<snip>
s p l i t w | o R d S
3 3 1 1 2 4 3 4 3 4
Output: 228
Input: 'a-r
' a ( - ) R
1 3 2 4
' a | - r
1 3 2 2
Output: 2
Input: '''''-
' ' ' ( ' ) ' -
1 1 1 1 1 2
Output: 1
胜利
这是代码高尔夫球,因此最短答案以字节为单位。您必须能够在合理的时间内输出所有测试用例(因此,所有输入最多10个字符)。不要人为地限制您的输入。
赏金
我不知道这是否有可能。但是,您是高尔夫球手-您将为代表做任何事情。我提供200 rep赏金(一旦满足此赏金条件,我将立即启动它,因为对我来说似乎基本上是不可能的),该程序可以antidisestablishmentarianism
在15秒钟内在普通计算机(又名我的)上输出正确的输出。请注意,不得以任何方式对该测试用例进行硬编码。
@DigitalTrauma压倒了我的赏金,不到两秒钟就到了。在这里查看他的答案。
antidisestablishmentarianism
(非高尔夫)是83307040
(并且匹配所有测试用例),但是在我的笔记本电脑上大约需要37秒(请注意,它是Python)。有人也有理由吗?