Tantangan:
Diberikan string split pada posisi tertentu dan huruf besar karakter pertama dari kata yang diberikan. Memanfaatkan huruf pertama kata pertama jika dan hanya jika sudah dikapitalisasi
Memasukkan :
String s
dan karakter c
.
Ouput:
String dengan setiap kemunculan c
diganti dengan karakter pertama dikapitalisasi
Contoh:
STRING(s) CHARACTER(c) RESULT
Hello_world _ HelloWorld
me,no,like , meNoLike
you-got-it - youGotIt
Am^I^clear ^ AmIClear
go!full!caps ! goFullCaps
weird&but&tRue & weirdButTRue
ProbleM1fixed1no 1 ProbleMFixedNo
!prob!!lem!s!Olved!! ! ProbLemSOlved
Catatan :
- Masukan yang diberikan akan selalu valid. yaitu: Yang pertama akan selalu berupa string dengan setidaknya satu instance karakter untuk diganti pada. Yang kedua akan selalu menjadi karakter tunggal.
- Panjang string input akan lebih besar 4.
Akan ada setidaknya satu kemunculan karakter untuk dipisah.
Input dijamin hanya mengandung huruf dan pemisah (Terima kasih @Arnauld)
- Pemisah adalah segala sesuatu yang bukan alfabet (az / AZ) (disarankan oleh @Dennis)
Kriteria pemenang:
Ini adalah kode-golf sehingga kode terpendek dalam byte untuk setiap bahasa menang.
- Terima kasih kepada @JonathanAllan karena menunjukkan dua kesalahan.
1
). Coba pikirkan bagaimana solusi mungkin gagal, dan buat uji kasus untuk situasi seperti itu. Beberapa contoh: Surat sebagai pemisah, pemisah menjadi karakter terakhir, pemisah berurutan dan sebagainya. Tidak perlu memiliki banyak test case yang tidak menguji hal yang berbeda..
, saya bisa membayangkan beberapa fungsi pemisah string berjuang dengan yang itu.Jawaban:
Python 3 , 63 byte
Cobalah online!
sumber
C (gcc) ,
615355 byte-8 byte terima kasih kepada Dennis!
Cobalah online!
sumber
*s==c?*++s&=95:0;
daripadaif(*s==c)*++s&=95;
JavaScript (ES6),
5856 byteDisimpan 2 byte berkat @ l4m2 / @Downgoat
Mengambil input dalam sintaks currying
(s)(c)
.Cobalah online!
Berkomentar
sumber
s=>c=>s.replace(RegExp(c+".","g"),m=>m[1].toUpperCase())
, karena tidak berfungsi untuk karakter regex khusus!prob!!lem!s!Olved!!
+
sebelum.
di RegEx akan menyiasatinya.Perl 6
-p
, 19 byteCobalah online!
sumber
sed 4.2.2 (-r), 21
Saya mencoba
\W
bukan[^a-z]
, tapi sayangnya itu tidak cocok_
.Cobalah online!
sumber
sed 4.2.2 (-r), 21 bytes
.Jelly , 8 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Oktaf ,
83,66, 64 byteDisimpan 2 byte berkat Luis Mendo.
upper
bukannyatoupper
.Cobalah online!
Wow, itu mungkin bagian kode Octave yang paling berantakan yang pernah saya tulis! Ini menggunakan dua trik yang diposting dalam pertanyaan kiat ini , yaitu daftar Argumen, dan array sel.
Penjelasan:
Input daftar argumen:
k
di sini karakter pertamas
setelah setiap pemisahc
, dikonversi ke huruf besar. Indeks setiap karakter dengan huruf kapital disimpan dii
.Badan susunan sel:
Kami membuat array sel dengan dua elemen, yang pertama adalah kita mengatakan bahwa semua karakter ke-i harus diganti dengan mitranya di
k
, dan yang lainnya dengans
, yang sekarang sudah diperbarui. Kami mengindeks ini menggunakan{2}
sehingga kami hanya mendapatkan keseluruhan, string yang dimodifikasi kembali. Ini diumpankan kestrsplit
, yang membaginya menjadi sel-sel di karakter pemisah. Kami mengonversinya menjadi daftar yang dipisahkan koma menggunakan{:}
, dan menggabungkannya kembali ke string menggunakan tanda kurung[]
.Maaf jika itu tidak masuk akal bagi Anda ... Ini hampir tidak masuk akal bagi saya: P
sumber
Retina 0.8.2 , 20 byte
Cobalah online! Hanya mengambil string, pemisah opsional. Semua karakter non-alfabet dihapus tetapi setiap karakter alfabet berikut ini ditulis dengan huruf besar. Versi 34 byte sebelumnya menerima input sewenang-wenang:
Cobalah online! Tautan termasuk test suite. Asumsikan input terdiri dari string dan karakter yang disatukan. Penjelasan: Tahap pertama mentransliterasikan semua karakter segera setelah kemunculan karakter akhir dari huruf kecil ke huruf besar dan tahap kedua kemudian menghapus semua kemunculan karakter akhir.
Untuk kedua solusi, menggunakan kecocokan dari kanan ke kiri dan bukan
+
juga berfungsi.sumber
[^a-z]
alih-alih pencarian yang ditampilkan Coba online!APL (Dyalog Classic) , 22 byte
Cobalah online!
sumber
Röda ,
5754 byte-3 byte terima kasih kepada dukun Sapi
Cobalah online!
Penjelasan:
sumber
\E
dari regex, dan_[0:1]
→_[:1]
V , 6
7byte1 byte disimpan dengan tidak menggunakan argumen
Cobalah online!
Program menerima teks sebagai input dan char sebagai argumen.
Hexdump:
Ini adalah substitusi sederhana. Terkompresi, sepertinya yang berikut ini
Melakukan substitusi global di mana
\A
, karakter non-alfabet, diikuti oleh karakter(.)
diganti dengan\u
kelompok tangkapan pertama huruf besar\1
sumber
c
karakter regex khususScala, 83 byte
Cobalah online!
Penjelasan:
sumber
Merah , 87 byte
Cobalah online!
sumber
05AB1E , 9 byte
Cobalah online!
Penjelasan
sumber
PHP,
9183 byteJalankan dengan
-r
. Apakah 2 byte lebih pendek menggunakan split daripada meledak, tetapi uji ^ gagal karena regex.-8 Terima kasih kepada Med
sumber
{
dan}
dari for loop, itu hanya akan memperlakukan pernyataan berikutnya sebagai body of condition.$a=explode($argv[2],$argv[1]);echo array_shift($a);foreach($a as$i)echo ucfirst($i);
Groovy, 43 byte,
45 byteCobalah online . Test suite termasuk mengecualikan item terakhir karena tidak memiliki karakter pemisah
c
.sumber
Pergi,
1389287 byteTurun 46 byte berkat @Dennis 'kasus judul ide.
Cobalah online!
sumber
Sekam , 10 byte
Cobalah online!
Penjelasan
sumber
F # (Mono) , 122 byte
Cobalah online!
sumber
Java 10, 141 byte
Cobalah online.
Penjelasan:
sumber
R , 87 byte
Cobalah online!
Gunakan trik ini ini tidak bisa dijalankan dengan baik di TIO jadi saya mensimulasikannya.
Kita perlu
T
kalau tidak salah satu kasus uji gagal.sumber
Stax , 11 byte
Jalankan dan debug itu
Penjelasan
Ada beberapa bagian yang ingin saya perbaiki. Saya bisa menurunkannya menjadi sekitar 8 byte, tetapi gagal pada test case terakhir>. <
sumber
Ruby
-pl
, 36 byteCobalah online!
Hanya mengambil string tanpa argumen kedua. Menggunakan metode versi blok
gsub!
karena dengangsub! x,y
sintaksis umum$1
tidak mudah diisi dengan data yang cocok.|$
di regex diperlukan untuk test case dengan separator pada akhirnya.sumber
Python 3 , 77 byte
Cobalah online!
Ini mengasumsikan bahwa string adalah ASCII disandikan dan mengasumsikan bahwa
s
danc
adalah variabel yang dimuat mengandung input.Solusi ini bekerja pada kenyataan bahwa dalam pengkodean ASCII, huruf kecil diposisikan 32 entri setelah huruf kapital
Sunting: Saya baru menyadari bahwa ini juga menggunakan huruf besar karakter pertama dalam string, yang seharusnya tidak. tapi saya cukup bangga dengan omong kosong saya, jadi saya akan meninggalkan ini jika diizinkan
sumber
s
seharusnya?A string s and a character c.