m | Y bR | ain adalah Kita | 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. Ketika saya mulai Melakukannya, itu untuk | usaha | TaL - B (u) TI hampir bisa (l) tidak N (o) T d | o itu. N (o) w, aku d | o itu di belakang kepalaku, a (n) d hampir tidak | | | | Namun, saya pikir ini akan membuat tantangan besar.
Definisi
Untuk tantangan ini, setiap huruf diberi skor poin, berdasarkan penilaian saya tentang lebarnya dalam font sans-serif. Anda akan menggunakan lebar ini untuk memotong kata menjadi dua bagian dengan lebar yang sama. Karakter yang akan digunakan tantangan ini adalah alfabet dalam huruf besar dan kecil, apostrof, dan tanda hubung.
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
Untuk penjelasan dan kasus pengujian saya, |
menunjukkan lokasi di mana sebuah kata dapat dibagi menjadi dua. (
dan )
di kedua sisi surat menunjukkan bahwa surat itu akan dibagi dua untuk membuat pemisahan bersih.
Memasukkan
Input akan terdiri dari satu "kata" (yang tidak harus ada dalam kamus). Anda dapat mengambil kata ini dalam input teks apa pun yang Anda inginkan (String, array char, dll.). Kata ini hanya akan berisi huruf '
,, dan -
(lihat tabel di atas). Karena apa yang akan Anda lakukan dengan kata ini (lihat di bawah), kasus input diserahkan kepada kebijaksanaan pengembang. Mengejar baris baru diizinkan jika perlu.
Tugas
Permutasi melalui semua bentuk input (semua huruf pada semua posisi huruf besar atau kecil yang mungkin). Misalnya, untuk input it's
, di bawah ini semua permutasi:
it's
it'S
iT's
iT'S
It's
It'S
IT's
IT'S
Untuk membagi permutasi kata menjadi dua, titik di satu sisi kata harus sama dengan titik di sisi lain kata. Namun, jika sebuah huruf tersangkut di antara dua bagian genap, Anda juga dapat memotong satu huruf menjadi dua.
Harap dicatat bahwa "setengah" tidak berarti bahwa Anda telah pindah ke tengah-tengah string. "Setengah" berarti bahwa poin di kedua sisi sama.
Contoh:
W
adalah 5 poin. i
adalah 1 poin. Membagi permutasi menjadi Wiiiii
setengah akan menghasilkan W | iiiii
, dengan 5 poin di setiap sisi |
.
T
adalah 3 poin. Membagi permutasi menjadi TTTT
setengah akan menghasilkan TT | TT
, dengan 6 poin di setiap sisi |
.
w
adalah 4 poin. a adalah 3 poin. Membagi permutasi menjadi waw
setengah akan menghasilkan w (a) w
, dengan 5,5 poin di setiap sisi. Poin dari a
didistribusikan ke kedua sisi, seperti a
yang terbelah dua.
Keluaran
Output Anda adalah bilangan bulat dari jumlah permutasi unik dari input yang dapat dibagi menjadi dua. Mengejar baris baru diizinkan jika perlu.
Uji Kasus
Saya akan mengeluarkan semua permutasi yang valid dari input untuk kasus uji. Ingatlah bahwa itu bukan bagian dari spesifikasi untuk Anda.
Dalam output antara saya, angka-angka menunjukkan nilai poin dari huruf di atas mereka, sehingga outputnya sedikit lebih mudah untuk divisualisasikan.
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
Kemenangan
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang. Anda harus dapat mengeluarkan semua kotak uji (jadi, semua masukan hingga 10 karakter) dalam jumlah waktu yang wajar. Jangan membatasi input Anda secara artifisial.
Karunia
Saya tidak tahu apakah ini ada kemungkinan. Namun, Anda adalah pegolf - Anda akan melakukan apa saja untuk perwakilan. Saya menawarkan 200 rep bounty (saya akan memulainya setelah kondisi bounty ini terpenuhi, karena tampaknya pada dasarnya tidak mungkin bagi saya) untuk sebuah program yang menghasilkan output yang benar antidisestablishmentarianism
dalam waktu kurang dari 15 detik pada komputer rata-rata (alias milik saya). Harap dicatat bahwa test case ini tidak boleh dikodekan dengan cara apa pun.
@DigitalTrauma menghancurkan karunia saya, datang di bawah dua detik. Lihatlah jawabannya di sini .
antidisestablishmentarianism
(non-golfy) adalah 83307040
(dan cocok dengan semua kasus uji) tetapi butuh ~ 37 detik di laptop saya (ingat itu Python). Adakah yang punya hitungan untuk itu?