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 Ho iniziato a farlo | it To it | oK a meN | TaL effort - B (u) TI quasi cou (l) d't N (o) T d | o it. N (o) w, lo d | o nella parte posteriore della mia testa, a (n) d difficilmente ev | en not | iCe. Tuttavia, ho pensato che questo avrebbe potuto essere una grande sfida.
definizioni
Per questa sfida, ad ogni lettera viene assegnato un punteggio, basato sul mio giudizio sulla sua larghezza in un carattere sans-serif. Utilizzerai questa larghezza per tagliare una parola in due metà di uguale larghezza. I personaggi che questa sfida utilizzerà saranno l'alfabeto in lettere minuscole e maiuscole, apostrofo e trattino.
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
Per le mie spiegazioni e casi di test, |
indica la posizione in cui una parola può essere divisa in modo netto a metà. (
e )
su entrambi i lati di una lettera indicano che quella lettera verrà divisa a metà per creare una divisione netta.
Ingresso
L'input consisterà in una singola "parola" (che non è richiesta per essere nel dizionario). Puoi prendere questa parola in qualsiasi input di testo desideri (String, char array, ecc.). Questa parola conterrà solo lettere '
e -
(vedere la tabella sopra). A causa di ciò che farai con questa parola (vedi sotto), il caso di input è lasciato alla discrezione dello sviluppatore. Trascinamento di nuove righe consentite, se necessario.
L'obiettivo
Permuta attraverso tutte le forme dell'input (tutte le lettere in tutte le possibili posizioni maiuscole o minuscole). Ad esempio, per l'input it's
, di seguito sono riportate tutte le permutazioni:
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
Per dividere una permutazione di una parola a metà, i punti su un lato della parola devono essere uguali ai punti dell'altro lato della parola. Tuttavia, se una lettera è incastrata tra due sezioni pari, puoi anche tagliare una lettera in modo pulito a metà.
Nota che "metà" non significa che ti sei spostato a metà della stringa. "Metà" significa che i punti su entrambi i lati sono uguali.
Esempi:
W
è di 5 punti. i
è 1 punto. Dividendo la permutazione Wiiiii
a metà si otterrà W | iiiii
, con 5 punti su ciascun lato del |
.
T
è di 3 punti. Dividendo la permutazione TTTT
a metà si otterrà TT | TT
, con 6 punti su ciascun lato del |
.
w
è di 4 punti. a è 3 punti. Dividendo la permutazione waw
a metà si otterrà w (a) w
, con 5,5 punti su ciascun lato. I punti da a
sono distribuiti su entrambi i lati, poiché a
è diviso a metà.
Produzione
L'output è un numero intero del numero di permutazioni univoche dell'input che può essere diviso in modo netto a metà. Trailing newline consentito se necessario.
Casi test
Fornirò tutte le permutazioni valide dell'input per i casi di test. Ricorda che non fa parte delle specifiche per te.
Nel mio output intermedio, i numeri indicano il valore in punti della lettera sopra di loro, quindi l'output è un po 'più facile da visualizzare.
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
Vittoria
Questo è code-golf , quindi vince la risposta più breve in byte. Devi essere in grado di emettere tutti i casi di test (quindi tutti gli input fino a 10 caratteri) in un ragionevole lasso di tempo. Non limitare artificialmente i tuoi input.
generosità
Non so se questo sia nel regno delle possibilità. Tuttavia, siete golfisti: farete qualsiasi cosa per i rappresentanti. Offro una ricompensa di 200 ripetizioni (la avvierò una volta soddisfatta questa condizione di ricompensa, poiché mi sembra sostanzialmente impossibile) per un programma che emette l'output corretto per antidisestablishmentarianism
meno di 15 secondi su un computer medio (aka mio). Si noti che questo caso di test non deve essere codificato in alcun modo.
@DigitalTrauma ha schiacciato la mia taglia, arrivando ben meno di due secondi. Controlla la sua risposta qui .
antidisestablishmentarianism
(non golfoso) è 83307040
(e corrisponde a tutti i casi di test) ma ci vogliono circa 37 secondi sul mio laptop (attenzione, è Python). Qualcuno ha anche un conto per questo?