Dalam Coding Golf itu, Anda harus mengonversi satu konvensi pengkodean dengan TitleCase ke lower_case_with_underscores. Dan sebaliknya!
Spesifikasi
Ganti casing dengan cara berikut:
- Jika karakter garis bawah adalah pembatas, ubah casing menjadi Title Case tanpa pembatas.
- Jika ada beberapa kata tanpa pembatas, ubah casing menjadi huruf kecil dan tambahkan karakter garis bawah sebagai pembatas.
- Dalam hal hanya satu kata (atau satu karakter): ganti casing ke Title Case jika kata tersebut dimulai dengan huruf kecil; ganti casing ke huruf kecil jika kata dimulai dengan huruf besar.
Karakter yang diizinkan:
- A hingga Z
- a hingga z
- garis bawah (
_
).
Masukan dengan kata-kata cased campuran tidak diizinkan. Contoh kasus yang dilarang:
Coding_Convention_Conversion
a_BC
Contoh Kasus
Input | Expected Output
===========================================================
CodingConventionConversion | coding_convention_conversion
coding_convention_conversion | CodingConventionConversion
abc | Abc
Abc | abc
ABC | a_b_c
a_b_c | ABC
a | A
A | a
Aturan
- Itu diizinkan untuk digunakan
ToUpper
,ToLower
danToTitleCase
fungsi. - Menggunakan ekspresi reguler diperbolehkan.
- code-golf : kode terpendek dalam byte menang!
ToTitleCase
fungsi oke? Anda tidak menentukan, jadi saya anggap tidak apa-apa.Jawaban:
Pyth, 25 byte
29 33 35 40Disimpan 2 byte berkat @Dennis
Disimpan 4 byte berkat @FryAmTheEggman
Cobalah online
sumber
/z\_
menjadirIz0
. Saya juga percaya saya menemukan alternatif yang sama panjangnya dengan menambahkan program garis bawahtsXzrG1_Mcj\_G2
tsXzrG1*\_G
Jolf, 35 byte
Menghemat 1 byte berkat @ Cᴏɴᴏʀ O'Bʀɪᴇɴ . Ini dikodekan dalam ISO 8859-7.
Woohoo program Jolf pertamaku!
Penjelasan
Cobalah online
sumber
"(?=[A-Z])'_
. Tali ditutup secara otomatis.Retina , 37
Terima kasih kepada @ MartinBüttner karena telah menghemat 4 byte!
(Perhatikan baris tambahan.)
Cobalah online. Catatan ini termasuk tambahan
m`
untuk mengonfigurasi beberapa baris untuk memperlakukan setiap jalur input secara terpisah sehingga semua testcases dapat dijalankan dalam sekali jalan. Ini bukan persyaratan pertanyaan, jadi ini tidak dihitung dalam skor._
di awal input atau sebelum huruf besar. Semua kata sekarang_
dipisahkan, terlepas dari kasusnya._
pada saat awal input, atau ketika diikuti oleh huruf besar.sumber
?=
dan mengganti tahap itu dengan$1
(tidak mempengaruhi jumlah byte).GNU Sed, 46
Terima kasih kepada @TobySpeight untuk menghemat 2 byte!
Skor mencakup +1 untuk opsi
-E
(atau-r
) untuksed
.Cobalah online.
Sed sederhananya:
_
, diikuti dengan huruf kecil dengan huruf besar huruf itu. Theg
bendera untuks
Melakukan substitusi ini untuk setiap contoh ditemukant
melompat ke:
label yang tidak disebutkan namanya jika ada kecocokan untuk substitusi di atas. Label ini secara implisit di akhir._
huruf kecil dari huruf itu_
petunjuk di depan huruf pertama.s/^_//
menghapus itu.sumber
-E
bekerja di GNU sed 4.2.2 saya (Ubuntu 14.04.3), meskipun tidak ada di halaman manual. Saya membaca di suatu tempat [rujukan?]-E
Yaitu opsi Posix yang lebih baru yang secara resmi akan ditambahkan ke GNU Sed dalam rilis yang lebih baru, tetapi sudah ada di sana secara tidak resmi. Apapun,-r
lakukan hal yang benar jika-E
tidak berhasil untuk Anda./* Undocumented, for compatibility with BSD sed. */
case 'E':
case 'r':
.-E
sebagai sinonim untuk-r
. Saya tidak benar melewati program minimal misalnyased -E -e Q
JavaScript (ES6), 87 byte
Penjelasan
Tergantung pada bagian mana dari regex yang cocok, itu menggantikan pertandingan dengan kasus yang berlawanan.
Uji
sumber
Ruby,
1018775 byteSayangnya, ini melakukan hal yang persis sama dengan solusi Retina, karena metode itu ternyata lebih pendek dari apa pun yang saya dapatkan.
sumber
Python 3, 130 byte
Upaya cepat dan kotor menggunakan regex untuk membelah tutup. Kekuatan yang cukup kasar: jika ada yang bisa datang dengan pendekatan yang berbeda, saya yakin ini bisa dikalahkan.
sumber
PHP 160 byte
bukan yang terpendek tetapi untuk kelengkapan di sini solusi saya di PHP, $ s memiliki string untuk dikonversi:
sumber
Perl 6 ,
73 72 7168 bytePemakaian:
Penjelasan:
Anda mungkin bertanya-tanya mengapa saya menggunakan properti Unicode (
<:Lu>
,<:Ll>
) alih-alih hanya kelas karakter. Dalam Perl 6 mereka tidak lagi dieja[a-z]
mereka dieja<[a..z]>
yang 1,6 kali lebih besar. Tanda kurung[ … ]
digunakan untuk pengelompokan non-menangkap yang dieja seperti(?: … )
dalam Perl 5.sumber
Japt, 40 byte
Uji secara online!
Bagaimana itu bekerja
sumber
Perl 5, 42 byte
40 byte plus 2 untuk
-p
(terima kasih, dev-null )sumber
-E
sebagai ganti-e
.𝔼𝕊𝕄𝕚𝕟 3, 15 karakter / 32 byte (tidak kompetitif)
Try it here (Firefox only).
v3 dirilis setelah tantangan ini, dengan banyak perbaikan bug dan pembaruan perpustakaan.
Penjelasan
Ini hanya mashup builtin.
sumber
Jelly , 24 byte
Cobalah online!
sumber
Python 3 , 86 byte
Cobalah online!
Juga berfungsi di Python 2 .
Memanfaatkan fakta praktis bahwa nilai ascii untuk
_
(95) tepat di antara huruf besar (65-90) dan huruf kecil (97-122), yang memungkinkan perbandingan string yang mudah.sumber
Keempat (gforth) , 129 byte
Cobalah online!
Penjelasan Kode
sumber