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 Do |を始めたので、To | oK a meN | TaLの努力-B(u)TIはほとんどN(o)Tではありません。N(o)w、私は私の頭の後ろにあります、a(n)dはほとんどありません|それはありません。しかし、これは大きな挑戦だと思いました。
定義
このチャレンジでは、サンセリフ体のフォントでの幅の判断に基づいて、各文字にポイントスコアが与えられます。この幅を使用して、単語を等しい幅の2つの半分にカットします。このチャレンジが使用する文字は、大文字と小文字のアルファベット、アポストロフィ、およびハイフンです。
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
私の説明とテストケースで|
は、単語をきれいに半分に分割できる場所を示します。(
そして)
、文字の両側には、その文字が半分に分割されてきれいな分割が作成されることを示します。
入力
入力は単一の「単語」で構成されます(辞書にある必要はありません)。この単語は、任意のテキスト入力(文字列、文字配列など)で使用できます。この単語には、文字、、'
および-
(上の表を参照)のみが含まれます。この単語を使用して何をするか(以下を参照)のため、入力のケースは開発者の裁量に任されています。必要に応じて、末尾の改行を使用できます。
タスク
入力のすべての形式(すべての可能な大文字または小文字の位置にあるすべての文字)を置換します。たとえば、inputのit's
場合、以下はすべて順列です。
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
単語の順列を半分に分割するには、単語の片側のポイントが単語の反対側のポイントと同じでなければなりません。ただし、2つの偶数セクションの間に文字が挟まっている場合は、文字をきれいに半分に切ることもできます。
「半分」とは、文字列の途中まで移動したことを意味しないことに注意してください。「ハーフ」とは、両側のポイントが等しいことを意味します。
例:
W
5ポイントです。i
1ポイントです。順列Wiiiii
を半分に分割すると、のW | iiiii
各側に5つのポイントがあり|
ます。
T
3ポイントです。順列TTTT
を半分に分割するTT | TT
と、|
ます。
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
勝利
これはcode-golfであるため、バイト単位の最短回答が優先されます。すべてのテストケース(つまり、最大10文字のすべての入力)を妥当な時間で出力できる必要があります。入力を人為的に制限しないでください。
バウンティ
これが可能性の領域にあるかどうかはわかりません。しかし、あなたはゴルファーです-あなたは担当者のために何でもします。antidisestablishmentarianism
平均的なコンピューター(別名鉱山)で15秒以内に正しい出力を出力するプログラムに対して、200 repの報奨金を提供しています(この報奨金の条件が満たされると、私は基本的に不可能だと思います)。このテストケースは、いかなる方法でもハードコーディングしないでください。
antidisestablishmentarianism
(ゴルフ以外の)の最初のカウントは83307040
(およびすべてのテストケースに一致する)ですが、ラップトップで約37秒かかります(Pythonであることに注意してください)。誰もがそれをカウントしていますか?