m | Y bR | ain Biz | iRd. F (o) RT (h) E La | sT fi (v) e YE | ars O | R s | o, (I) ha | ve C (u) T wO | r (h (a) lf wh | tr içinde (I) s (e) e Th | em. Wh | EN Başladım, | Yaptım | MÜCADELE ÇALIŞMASI - B (u) TI neredeyse cou (l) değil N (o) T d | o. N (o) w, başımın arkasına koydum, a (n) pek zor değil | iCe. Ancak, bu wo büyük bir meydan okuma olabilir düşündüm.
Tanımlar
Bu meydan okuma için, her harfe bir sans-serif yazı tipindeki genişliğini değerlendirdiğimden bir puan verilir. Bu genişliği, bir sözcüğü eşit genişlikte iki yarıya kesmek için kullanacaksınız. Bu zorluğun kullanacağı karakterler küçük ve büyük harf, kesme işareti ve kısa çizgi şeklindedir.
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
Açıklamalarım ve test |
senaryolarım için , bir kelimenin temiz bir şekilde ikiye bölünebileceği konumu belirtir. (
ve )
bir mektubun her iki tarafında, temiz bir bölme oluşturmak için bu harfin ikiye bölüneceğini belirtir.
Giriş
Giriş tek bir "kelimeden" oluşur (sözlükte olması gerekmez). Bu kelimeyi istediğiniz metin girişinde (Dize, karakter dizisi vb.) Alabilirsiniz. Bu sözcük yalnızca '
,, ve harflerini içerir -
(yukarıdaki tabloya bakın). Bu sözcükle ne yapacağınız nedeniyle (aşağıya bakın), giriş durumu geliştiricinin takdirine bırakılmıştır. Gerekirse sondaki yeni satırlara izin verilir.
Görev
Girişin tüm formlarına izin verin (olası tüm büyük veya küçük harflerdeki tüm harfler). Örneğin, girdi için it's
, aşağıdaki tüm permütasyonlardır:
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
Bir sözcüğün permütasyonunu ikiye bölmek için, kelimenin bir tarafındaki noktalar, kelimenin diğer tarafındaki noktalarla aynı olmalıdır. Ancak, bir harf iki çift bölüm arasında sıkışmışsa, bir harfi temiz bir şekilde ikiye kesebilirsiniz.
"Yarım" ifadesinin, dizenin yarısına geçtiğiniz anlamına gelmediğini lütfen unutmayın. "Yarım", her iki taraftaki noktaların eşit olduğu anlamına gelir.
Örnekler:
W
5 puandır. i
1 puan. Permütasyonun ikiye bölünmesi, her iki tarafında 5 puan ile Wiiiii
sonuçlanacaktır .W | iiiii
|
T
3 puandır. Permütasyonun ikiye bölünmesi, her iki tarafında 6 puan ile TTTT
sonuçlanacaktır .TT | TT
|
w
4 puandır. a 3 puandır. Permütasyonun ikiye bölünmesi, her iki tarafta 5.5 puan ile waw
sonuçlanacaktır w (a) w
. 'Dan alınan noktalar , ikiye bölünmüş a
olarak her iki tarafa da dağıtılır a
.
Çıktı
Çıktınız, girdinin temiz bir şekilde ikiye bölünebilen benzersiz permütasyon sayısının bir tamsayısıdır. Gerekirse sondaki yeni satırlara izin verilir.
Test Durumları
Test senaryoları için girdinin tüm geçerli permütasyonlarını çıktılayacağım. Bunun sizin için özelliklerin bir parçası olmadığını unutmayın.
Ara çıkışımda, sayılar üstlerindeki harfin puan değerini gösterir, bu nedenle çıktının görselleştirilmesi biraz daha kolaydır.
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
Zafer
Bu kod golf , bayt en kısa cevap kazanır. Tüm test senaryolarını (10 karaktere kadar olan tüm girişleri) makul bir sürede verebilmeniz gerekir. Girişinizi yapay olarak sınırlamayın.
Ödül
Bunun olasılık alanında olup olmadığını bilmiyorum. Ancak, golfçüsünüz - temsilcisi için her şeyi yapacaksınız. antidisestablishmentarianism
Ortalama bir bilgisayarda (aka benimki) 15 saniyenin altında doğru çıktı veren bir program için 200 rep lütuf (temelde benim için imkansız göründüğü için bu lütuf durumu yerine getirildikten sonra başlatacağım) sunuyorum . Bu test senaryosunun hiçbir şekilde sabit kodlanmaması gerektiğini lütfen unutmayın.
@ DigitalTrauma ödülümü ezdi, iki saniyenin altında geliyor. Cevabını buradan kontrol edin .
antidisestablishmentarianism
(Golf olmayan) için ilk sayım 83307040
(ve tüm test senaryolarını eşleştirerek) ancak dizüstü bilgisayarımda ~ 37 saniye sürüyor (Python olduğunu unutmayın). Herkes bunun için bir sayım var mı?