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 in h (a) lf wh | En (I) s (e) e Th | em. Wh | EN Я почав це робити, це Для того, щоб докласти зусиль - B (u) TI майже cou (l) dn N (o) T d | o це. N (o) w, я d | o це в потилиці, a (n) d навряд чи ev | en не | iCe це. Однак я подумав, що це може зробити велике завдання.
Визначення
Для цього завдання кожному листу дається бальна оцінка, виходячи з моєї оцінки його ширини шрифтом 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
Для моїх пояснень та тестових випадків |позначає місце, в якому слово можна чисто розділити навпіл. (і )по обидва боки листа вказують, що цей лист розділиться навпіл, щоб створити чистий розкол.
Вхідні дані
Введення складається з одного "слова" (яке не обов'язково містити в словнику). Ви можете взяти це слово в будь-якому іншому текстовому введенні (String, масив char тощо). Це слово буде містити лише літери ', та -(див. Вище в таблиці). Через те, що ви зробите з цим словом (див. Нижче), випадок введення залишається на розсуд розробника. За необхідності дозволено відстежувати нові рядки.
Завдання
Перестановка через усі форми вводу (усі літери у всіх можливих верхньому чи нижньому регістрі). Наприклад, для введення 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 повторень (я розпочну його після того, як ця умова баунті буде виконана, як це мені здається в принципі неможливим) для програми, яка antidisestablishmentarianismна середньому комп’ютері видає правильний вихід протягом менше 15 секунд (він же мій). Зверніть увагу, що цей тестовий випадок не повинен бути жодним чином кодованим.
@DigitalTrauma розчавив мою щедрість, пройшовши трохи менше двох секунд. Перевірте його відповідь тут .
antidisestablishmentarianism(non-golfy) - це 83307040(і відповідає всім тестовим випадкам), але це займає ~ 37 секунд на моєму ноутбуці (врахуйте, що це Python). У когось теж є рахунок?