m | Y bR | ain ist We | iRd. F (o) RT (h) E La | sT fi (v) e JAHRE O | R s | o, (I) C (u) T wO | rds in h (a) lf wh | En (I) s (e) e | em. WENN ICH BEGANN, ES ZU TUN, UM EINE MENSCHLICHE ANSTREBUNG ZU MACHEN - B (u) T Ich konnte (l) nicht N (o) T d | o es. N (o) w, ich habe es in meinem Hinterkopf getan, und ich habe es kaum geglaubt, es nicht zu tun. Ich dachte jedoch, dass dies eine große Herausforderung sein würde.
Definitionen
Für diese Herausforderung erhält jeder Buchstabe eine Punktzahl, basierend auf meiner Einschätzung der Breite in einer serifenlosen Schrift. Mit dieser Breite schneiden Sie ein Wort in zwei gleich breite Hälften. Die Zeichen, die diese Herausforderung verwenden wird, sind das Alphabet in Groß- und Kleinbuchstaben, Apostroph und Bindestrich.
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
|Bezeichnet für meine Erklärungen und Testfälle die Stelle, an der ein Wort sauber in zwei Hälften geteilt werden kann. (und )auf jeder Seite eines Buchstabens geben Sie an, dass dieser Buchstabe in zwei Hälften geteilt wird, um eine saubere Trennung zu erzielen.
Eingang
Die Eingabe besteht aus einem einzelnen "Wort" (das nicht im Wörterbuch enthalten sein muss). Sie können dieses Wort in einer beliebigen Texteingabe verwenden (Zeichenfolge, Zeichen-Array usw.). Dieses Wort enthält nur die Buchstaben ', und -(siehe Tabelle oben). Aufgrund dessen, was Sie mit diesem Wort tun (siehe unten), liegt die Entscheidung über die Eingabe beim Entwickler. Nachgestellte Zeilenumbrüche sind bei Bedarf zulässig.
Die Aufgabe
Permutieren Sie durch alle Formen der Eingabe (alle Buchstaben an allen möglichen Groß- oder Kleinbuchstaben). Für die Eingabe it'ssind zum Beispiel alle folgenden Permutationen:
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
Um eine Permutation eines Wortes in zwei Hälften zu teilen, müssen die Punkte auf einer Seite des Wortes mit den Punkten auf der anderen Seite des Wortes übereinstimmen. Wenn ein Buchstabe jedoch zwischen zwei geraden Abschnitten steckt, können Sie einen Buchstaben auch sauber in zwei Hälften schneiden.
Bitte beachten Sie, dass "halb" nicht bedeutet, dass Sie sich auf halber Strecke in der Saite befinden. "Halb" bedeutet, dass die Punkte auf beiden Seiten gleich sind.
Beispiele:
Wbeträgt 5 Punkte. iist 1 Punkt. Wenn Sie die Permutation Wiiiiiin zwei Hälften teilen W | iiiii, erhalten Sie 5 Punkte auf jeder Seite des |.
Tbeträgt 3 Punkte. Wenn Sie die Permutation TTTTin zwei Hälften teilen TT | TT, erhalten Sie 6 Punkte auf jeder Seite des |.
wbeträgt 4 Punkte. a ist 3 Punkte. Wenn Sie die Permutation wawin zwei Hälften teilen w (a) w, erhalten Sie 5,5 Punkte auf jeder Seite. Die Punkte von awerden auf beide Seiten verteilt, da asie in zwei Hälften geteilt werden.
Ausgabe
Ihre Ausgabe ist eine ganze Zahl der Anzahl eindeutiger Permutationen der Eingabe, die sauber in zwei Hälften geteilt werden können. Nachgestellte Zeilenumbrüche sind bei Bedarf zulässig.
Testfälle
Ich werde alle gültigen Permutationen der Eingabe für die Testfälle ausgeben. Denken Sie daran, dass dies für Sie nicht Teil der Spezifikationen ist.
In meiner Zwischenausgabe geben die Zahlen den Punktwert des darüber liegenden Buchstabens an, sodass die Ausgabe etwas einfacher zu visualisieren ist.
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
Sieg
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes. Sie müssen in der Lage sein, alle Testfälle (also alle Eingaben mit bis zu 10 Zeichen) in angemessener Zeit auszugeben. Begrenzen Sie Ihre Eingabe nicht künstlich.
Kopfgeld
Ich weiß nicht, ob dies möglich ist. Sie sind jedoch Golfer - Sie werden alles für die Wiederholung tun. Ich biete ein Kopfgeld für 200 Wiederholungen (ich starte es, sobald diese Kopfgeldbedingung erfüllt ist, da es mir im Grunde unmöglich erscheint) für ein Programm an, das antidisestablishmentarianismauf einem durchschnittlichen Computer (auch bekannt als meiner) die korrekte Ausgabe für weniger als 15 Sekunden ausgibt . Bitte beachten Sie, dass dieser Testfall in keiner Weise fest codiert sein darf.
@DigitalTrauma zerquetschte mein Kopfgeld und kam in weniger als zwei Sekunden. Schauen Sie sich seine Antwort hier .
antidisestablishmentarianism(nicht-golfen) ist 83307040(und entspricht allen Testfällen), aber es dauert ~ 37 Sekunden auf meinem Laptop (wohlgemerkt, es ist Python). Hat jemand auch eine Zählung dafür?