m | Y bR | ain to 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 Zacząłem Robić to, to | Ok O MeN | TaL wysiłek - B (u) TI prawie cou (l) nie nie N (o) T d | o it. N (o) w, I d | o to z tyłu głowy, a (n) d ledwie nie | en nie | iCe it. Myślałem jednak, że to będzie duże wyzwanie.
Definicje
Za to wyzwanie każda litera otrzymuje punktową ocenę opartą na mojej ocenie jej szerokości czcionką bezszeryfową. Użyjesz tej szerokości, aby pokroić słowo na dwie połowy o jednakowej szerokości. Znaki, których użyje to wyzwanie, to alfabet pisany małymi i dużymi literami, apostrof i łącznik.
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
Dla moich wyjaśnień i przypadków testowych |oznacza miejsce, w którym słowo może być czysto podzielone na pół. (i) po obu stronach litery wskazuj, że ta litera zostanie podzielona na pół, aby utworzyć czysty podział.
Wejście
Dane wejściowe będą składać się z jednego „słowa” (które nie musi znajdować się w słowniku). Możesz wziąć to słowo w dowolny sposób, jaki chcesz wprowadzić (ciąg znaków, tablica znaków itp.). To słowo będzie zawierać tylko litery 'i- (patrz powyższa tabela). Ze względu na to, co zrobisz z tym słowem (patrz poniżej), przypadek wprowadzenia danych zależy od autora. W razie potrzeby dozwolone są końcowe znaki nowej linii.
Zadanie
Permutuj przez wszystkie formy wprowadzania (wszystkie litery we wszystkich możliwych pozycjach wielkich i małych liter). Na przykład dla danych wejściowych it'sponiżej podano wszystkie permutacje:
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
Aby podzielić permutację słowa na pół, punkty po jednej stronie słowa muszą być takie same jak punkty po drugiej stronie słowa. Jeśli jednak list utknie pomiędzy dwiema równymi sekcjami, możesz go również przeciąć na pół.
Pamiętaj, że „połowa” nie oznacza, że przeszedłeś w połowie do łańcucha. „Połowa” oznacza, że punkty po obu stronach są równe.
Przykłady:
Wwynosi 5 punktów. iwynosi 1 punkt. Podział permutacji Wiiiiina pół spowoduje W | iiiii5 punktów z każdej strony |.
Twynosi 3 punkty. Podział permutacji TTTTna pół spowoduje TT | TT6 punktów po każdej stronie |.
wwynosi 4 punkty. a to 3 punkty. Podział permutacji wawna pół da w (a) w5,5 punktów z każdej strony. Punkty z asą rozdzielane na obie strony, podobnie jak apodzielone na pół.
Wynik
Dane wyjściowe są liczbą całkowitą liczby unikatowych kombinacji danych wejściowych, które można jednoznacznie podzielić na pół. W razie potrzeby dozwolone są końcowe znaki nowej linii.
Przypadki testowe
Będę wyprowadzać wszystkie prawidłowe permutacje danych wejściowych dla przypadków testowych. Pamiętaj, że to nie jest część specyfikacji dla Ciebie.
Na moim pośrednim wyjściu liczby wskazują wartość punktową litery nad nimi, więc wynik jest nieco łatwiejszy do zwizualizowania.
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
Zwycięstwo
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach. Musisz być w stanie wydrukować wszystkie przypadki testowe (czyli wszystkie dane wejściowe do 10 znaków) w rozsądnym czasie. Nie ograniczaj sztucznie wkładu.
Hojność
Nie wiem, czy jest to możliwe. Jesteś jednak golfistą - zrobisz wszystko dla przedstawiciela. Oferuję nagrodę za 200 powtórzeń (rozpocznę ją, gdy ten warunek nagrody zostanie spełniony, ponieważ wydaje mi się to w zasadzie niemożliwe) za program, który generuje prawidłowe wyjście antidisestablishmentarianismw czasie krótszym niż 15 sekund na przeciętnym komputerze (czyli moim). Należy pamiętać, że ten przypadek testowy nie może być w żaden sposób zakodowany na stałe.
@DigitalTrauma zmiażdżył moją nagrodę, dochodząc znacznie poniżej dwóch sekund. Sprawdź jego odpowiedź tutaj .
antidisestablishmentarianism(bez golfa) to 83307040(i dopasowanie wszystkich przypadków testowych), ale na moim laptopie zajmuje ~ 37 sekund (nieważne, że jest to Python). Czy ktoś też ma na to wpływ?