m | Y bR | ain est 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 J'ai commencé à le faire, ça pour | oK un effort meN | TaL - B (u) TI presque cou (l) pas N (o) T d | o it. N (o) w, je l'ai | à l'arrière de ma tête, un (n) d à peine év | en pas | iCe. Cependant, je pensais que cela ferait un grand défi.
Définitions
Pour ce défi, chaque lettre reçoit un score de points, basé sur mon jugement de sa largeur dans une police sans empattement. Vous utiliserez cette largeur pour couper un mot en deux moitiés de largeur égale. Les caractères que ce défi utilisera sont l'alphabet en minuscules et en majuscules, l'apostrophe et le tiret.
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
Pour mes explications et cas de test, |
désigne l'emplacement dans lequel un mot peut être proprement divisé en deux. (
et )
de chaque côté d'une lettre indiquent que cette lettre sera divisée en deux pour créer une division nette.
Contribution
L'entrée consistera en un seul "mot" (qui ne doit pas nécessairement figurer dans le dictionnaire). Vous pouvez prendre ce mot dans la saisie de texte que vous souhaitez (chaîne, tableau de caractères, etc.). Ce mot ne contiendra que les lettres,, '
et -
(voir le tableau ci-dessus). En raison de ce que vous ferez avec ce mot (voir ci-dessous), le cas de la saisie est laissé à la discrétion du développeur. Les nouvelles lignes de fin sont autorisées si nécessaire.
La tâche
Permutez à travers toutes les formes de saisie (toutes les lettres à toutes les positions majuscules ou minuscules possibles). Par exemple, pour l'entrée it's
, ce qui suit est toutes les permutations:
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
Pour diviser une permutation d'un mot en deux, les points d'un côté du mot doivent être les mêmes que les points de l'autre côté du mot. Cependant, si une lettre est coincée entre deux sections paires, vous pouvez également couper une lettre proprement en deux.
Veuillez noter que «moitié» ne signifie pas que vous vous êtes déplacé à mi-chemin dans la chaîne. "Moitié" signifie que les points des deux côtés sont égaux.
Exemples:
W
est de 5 points. i
est de 1 point. Diviser la permutation Wiiiii
en deux se traduira par W | iiiii
, avec 5 points de chaque côté de la |
.
T
est de 3 points. La division de la permutation TTTT
en deux se traduira par TT | TT
, avec 6 points de chaque côté de la |
.
w
est de 4 points. a est de 3 points. Diviser la permutation waw
en deux se traduira par w (a) w
, avec 5,5 points de chaque côté. Les points de a
sont distribués des deux côtés, comme il a
est divisé en deux.
Production
Votre sortie est un entier du nombre de permutations uniques de l'entrée qui peuvent être proprement divisées en deux. Les nouvelles lignes de fin sont autorisées si nécessaire.
Cas de test
Je produirai toutes les permutations valides de l'entrée pour les cas de test. N'oubliez pas que cela ne fait pas partie des spécifications pour vous.
Dans ma sortie intermédiaire, les chiffres indiquent la valeur en points de la lettre au-dessus d'eux, donc la sortie est un peu plus facile à visualiser.
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
La victoire
C'est le code-golf , donc la réponse la plus courte en octets l'emporte. Vous devez être en mesure de produire tous les cas de test (donc, toutes les entrées jusqu'à 10 caractères) dans un délai raisonnable. Ne limitez pas artificiellement votre entrée.
Prime
Je ne sais pas si cela est possible. Cependant, vous êtes des golfeurs - vous ferez tout pour le représentant. J'offre une prime de 200 répétitions (je vais la démarrer une fois que cette condition de prime est remplie, car cela me semble fondamentalement impossible) pour un programme qui génère la sortie correcte pendant antidisestablishmentarianism
moins de 15 secondes sur un ordinateur moyen (aka le mien). Veuillez noter que ce cas de test ne doit en aucun cas être codé en dur.
@DigitalTrauma a écrasé ma prime, arrivant bien en moins de deux secondes. Découvrez sa réponse ici .
antidisestablishmentarianism
(non-golfy) est 83307040
(et correspond à tous les cas de test) mais cela prend ~ 37 secondes sur mon ordinateur portable (attention, c'est Python). Quelqu'un a-t-il également un compte?