m | Y bR | ain есть We | iRd. F (o) RT (h) E La | sT fi (v) e YE | ars O | R s | o, (I) ha | ve C (u) T wO | rds в h (a) lf wh | En (I) s (e) e Th | em. Я начал это делать, чтобы сделать все возможное - B (U) TI почти не (L) не N (O) T D | O это. N (o) w, я делаю это в затылке, a (n) d вряд ли когда-нибудь не будет | iCe это. Тем не менее, я думал, что это будет большой вызов.
Определения
Для этой задачи каждой букве присваивается балл, исходя из моего суждения о ее ширине шрифтом без засечек. Вы будете использовать эту ширину, чтобы разрезать слово на две половины одинаковой ширины. Символы, которые будут использовать в этом задании, - это алфавит в нижнем и верхнем регистре, апостроф и дефис.
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
Для моих объяснений и контрольных примеров, |
обозначает место, в котором слово может быть чисто разделено пополам. (
и )
по обе стороны от буквы указывают, что эта буква будет разделена пополам, чтобы создать чистое разделение.
вход
Ввод будет состоять из одного «слова» (которое не обязательно должно быть в словаре). Вы можете использовать это слово при любом вводе текста (строка, массив символов и т. Д.). Это слово будет содержать только буквы '
, и -
(см. Таблицу выше). Из-за того, что вы будете делать с этим словом (см. Ниже), случай ввода оставлен на усмотрение разработчика. Замыкающие переводы допускаются при необходимости.
Задание
Перестановка через все формы ввода (все буквы во всех возможных прописных или строчных буквах). Например, для ввода 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 балла. а 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 представителей (я начну его, как только это условие будет выполнено, поскольку оно кажется мне в принципе невозможным), для программы, которая выводит правильный вывод antidisestablishmentarianism
менее чем за 15 секунд на среднем компьютере (так же, как у меня). Обратите внимание, что этот контрольный пример не должен быть жестко закодирован.
@DigitalTrauma сокрушил мою награду, прибыв намного меньше двух секунд. Проверьте его ответ здесь .
antidisestablishmentarianism
(не для гольфа) - 83307040
(и соответствует всем тестовым случаям), но на моем ноутбуке это занимает ~ 37 секунд (учтите, что это Python). У кого-нибудь также есть счет для этого?