Masukan Anda akan berupa kalimat, frasa, atau kata dalam bahasa Inggris. Itu hanya akan berisi a-zA-Z' -,.!?
. Tugas Anda adalah mengambil input, menghapus spasi, dan kemudian mendistribusikan kembali huruf besar sehingga huruf pada indeks yang ditulis dengan huruf kapital sebelumnya (dan hanya huruf pada indeks yang huruf besar sebelumnya) yang ditulis dengan huruf besar.
Misalnya, jika inputnya A Quick Brown Fox Jumped Over The Lazy Dog
, indeks (berbasis 0) huruf kapital adalah 0, 2, 8, 14, 18, 25, 30, 34, 39
. Berikutnya, menghapus spasi dari input: AQuickBrownFoxJumpedOverTheLazyDog
. Berikutnya, huruf kecil semua huruf, tapi huruf besar mereka di 0, 2, 8, 14, 18, 25, 30, 34, 39
: AqUickbrOwnfoxJumpEdovertHelazYdog
, yang merupakan output.
Memasukkan
Masukan Anda akan berupa kalimat, frasa, atau kata dalam bahasa Inggris. Itu hanya dapat berisi huruf kecil, huruf besar, tanda hubung, apostrof, koma, titik, tanda tanya, tanda seru, dan spasi.
Keluaran
Input dengan spasi dihapus, huruf kecil-d, dengan huruf pada indeks huruf kapital di input huruf besar-d.
CATATAN: Program Anda tidak dapat crash (kesalahan eksekusi berakhir seperti itu) dengan IndexOutOfRange atau kesalahan serupa.
Uji Kasus
Hi! Test!
Hi!tEst!
A Quick Brown Fox Jumped Over The Lazy Dog
AqUickbrOwnfoxJumpEdovertHelazYdog
testing TESTing TeStING testing testing TESTING
testingtESTIngteStInGTEstingtestingtestiNG
TESTING... ... ... success! EUREKA???!!! maybe, don't, NOOOOO
TESTING.........success!eureKA???!!!maybe,don't,nooooo
Enter PASSWORD ---------
Enterpassword---------
A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Z z
AabbCcddEeffGghhIijjKkllMmnnOoppQqrrSsttUuvvWwxxZz
TEST
teST
0, 2, 8, 14, 18, 23, 27, 32
' Mereka0, 2, 8, 14, 18, 25, 30, 34, 39
Jawaban:
Jelly ,
1413 byteCobalah online!
Bagaimana itu bekerja
sumber
C (gcc) ,
82797472696766 byteCobalah online!
sumber
Python 2 , 114 byte
Cobalah online!
Setara:
Python 2 , 114 byte
Cobalah online!
sumber
''.join([(X[i].lower,X[i].upper)[x[i].isupper()]()for i in range(len(X))])
untuk -5 byte.Python 3 ,
787572 byteTerima kasih kepada @xnor karena bermain golf 6 byte!
Cobalah online!
sumber
s
bukans[0]
?(c*2).title()
Anda bisa mendapatkan keduanya, meskipun diaktifkan.c>' '!=f()
setara dengan(c>' ') and (' '!=f())
.05AB1E ,
1514 byte-1 byte terima kasih kepada Emigna
Cobalah online!
sumber
Haskell ,
9895898881 byteTerima kasih kepada @name, @nimi, @Zgarb, dan @Laikoni untuk membantu mengurangi total 14 byte
Tidak Disatukan:
sumber
filter(>' ')
kurang dari satu bytelast(toLower:[toUpper|isUpper p])c
zipWith
harus menyimpan satu lagi byte:f s=zipWith(\p->last$toLower:[toUpper|isUpper p])s$filter(>' ')s
.V , 24 byte
Cobalah online!
Tantangan semacam inilah yang dibuat untuk V. :)
Penjelasan:
sumber
Python 2, 100 byte
sumber
Alice , 32 byte
Cobalah online!
Penjelasan
Ini adalah templat standar untuk program yang sepenuhnya berfungsi dalam mode ordinal. Tidak dibungkus, programnya adalah sebagai berikut:
sumber
JavaScript (ES6),
949185 byteCobalah
sumber
'@'<s[i]&s[i]<'['?
?Retina ,
7771 byteCobalah online! Tautan termasuk test suite. Penjelasan: Tahap pertama menduplikasi baris sedangkan tahap kedua menurunkan duplikat dan menghapus spasinya. Tahap ketiga kemudian loop melalui setiap huruf besar dari kanan ke kiri dan mencoba untuk menempatkan spasi sebelum karakter yang sesuai pada baris kedua. Baris pertama dihapus dan spasi digunakan untuk huruf besar karakter yang relevan dari hasilnya. Sunting: Disimpan 6 byte berkat @Kobi.
sumber
(.?)
dan$4
bagian - bagiannya diperlukan? Sepertinya memiliki grup opsional pada akhirnya tidak melakukan apa-apa.Perl,
9594 + 1 = 95 byteDenda +1 byte untuk -n
Simpan satu byte dengan ganti dari
s/\s//g
kes/ //g
Cobalah online!
Penjelasan:
Buat salinan string input.
Hapus semua spasi dan ubah string menjadi huruf kecil.
Kemudian mulailah mengulangi setiap huruf. Surat uji di posisi yang sama dalam string yang disimpan untuk huruf besar. Jika di atas - buat huruf saat ini ditangkap. Cetak surat
Perhatikan bahwa perl perlu dijalankan dengan saklar baris perintah "-n"
sumber
+1
byte untuk-n
bendera. Selain itu, ini terlihat bagus! Selamat datang di situs ini! :)MATL , 18 byte
Pendekatan yang sama seperti jawaban 05AB1E Riley .
Cobalah online!
sumber
Python 3 , 117 byte
Cobalah secara Online!
Ini cukup banyak kode golf pertama saya, jadi kemungkinan buruk, minus bantuan dari komentar di bawah ini!
PS Ya, bodoh bahwa mendefinisikan dan menambah
i
menyimpan byte lebih dari jangkauan (len (y)). Baiklah.sumber
return
.C # (.NET Core) ,
108101 byteCobalah online!
char
kelas memiliki metodeToUpper()
dan statisToLower()
.sumber
Arang , 33 byte
Cobalah online!
Karena saya masih tidak tahu bagaimana cara mengirimkan string dengan spasi putih sebagai parameter input tunggal ke dalam kode Charcoal, saya hanya menetapkan di header string tes ke variabel Charcoal yang mewakili apa yang akan menjadi input pertama (
θ
):Jadi kode memiliki jumlah byte yang sama seolah-olah string dilewatkan sebagai input pertama.
Anda dapat melihat di sini versi verbose kode.
sumber
PHP, 181 byte
Saya mencoba mendapatkan sejumlah kecil byte, ini adalah kode saya:
Cobalah online!
sumber
PREG_OFFSET_CAPTURE
Anda dapat menggunakan nilai256
,$argn
adalah variabel yang lebih pendekreadline()
untuk input dan saya pikirctype_upper
dan penggunaanlcfirst
danucfirst
akan menghemat banyak byte dengan satu loop dan penggunaan$$i
dan operator ternaryJava 8,
184177161 bytePasti bisa bermain golf lagi ..
- 16 byte berkat @ OlivierGrégoire dengan mengambil input sebagai
char[]
gantinyaString
.Penjelasan:
Coba di sini.
sumber
char[]
alih - alih String untuk yang ini, Anda akan menghemat banyak byte!String
, out =char[]
:-)Common Lisp, 104 byte
Cobalah online!
Singkat biasa untuk Common Lisp yang bertele-tele!
Kode sederhana:
sumber
Java (OpenJDK 8) ,
15011711397 byteCobalah online!
Sambil bermain golf lebih banyak, saya mencapai 102 byte:
Cobalah online!
Tapi aku ingat ini mulai terlihat seperti jawaban Dennis C, jadi aku hanya mem-porting-kan dan ... sihirnya terjadi. Keuntungan besar dari port adalah menghapus cabang dan pengulangan di dalamnya.
sumber
Hi! Test!
seharusnya menjadiHi!tEst!
, tetapi dengan solusi Anda, itu menjadiHi!Test
.Google Sheets, 213 byte
Input ada di sel
A1
dan rumusnya rusak seperti ini:ArrayFormula()
mari kita evaluasi setiap istilahROW()
secara independenJOIN()
menggabungkan semua hasil independen menjadi satu stringIF(REGEXMATCH(),UPPER(),LOWER()
adalah apa yang membuatnya bergantian menggunakan huruf besar atau kecil tergantung pada apa kasus itu pada posisi itu di inputROW(OFFSET())
mengembalikan array nilai1
keA1.length
yang dapat dimasukkan ke dalamMID()
fungsi sehingga kami dapat mengevaluasi setiap karakter secara bergantianHasil dari kasus uji: (Lebih mudah dibaca jika Anda mengklik versi yang lebih besar.)
sumber
Ruby , 80 byte
Cobalah online!
sumber
n.gsub(/./){}
bukann.size.times{};n
:n.gsub(/./){(?A..?Z)===a[i]?$&.upcase: $&}
.Perl, 92 byte
Penjelasan:
sumber
-n
tanda agar jawaban Anda valid. Beberapa hal bermain golf:s/ //g
sudah cukup (tidak perlu\s
),y/a-z/A-Z/
sama dengantr[a-z][A-Z]
, Anda bisa menggunakan-p
flag sehingga Anda tidak perlu yang terakhirprint
, Anda tidak perlu tanda kurung masuklc$&
.C, 103 byte
Cobalah online!
sumber
Python 3 ,
125, 124 byteCobalah online!
sumber
Python 2,
106105 byteSunting: simpan satu byte melalui
print ''.join
=>print''.join
.Formulir Lambda, 99 byte
sumber
SCALA, 128 karakter, 128 byte
Terima kasih atas tantangan ini. Cobalah online!
sumber
q / kdb +, 49 byte
Larutan:
Contoh:
Penjelasan:
Temukan indeks di mana input huruf besar dan kemudian terapkan fungsi
upper
pada indeks itu pada versi kecil dari string input. Perhatikan bahwa kami tidak dapat menerapkan fungsi di luar panjang string, jadi gunakan take (#
) untuk memotong string input hingga panjang huruf kecil, versi yang dihapus dengan spasi.Bonus:
Setelah membaca jawaban, saya pikir saya akan mencoba solusi di mana saya mengulangi input, sejauh ini saya hanya mengelola solusi 53 byte:
sumber
Swift 3.0, 199 byte
Cobalah secara Online!
sumber
Perl 5 , 40 byte
37 byte kode +
-F
bendera. (perhatikan bahwa pada versi Perl yang lama, Anda mungkin perlu menambahkan-an
flag)Cobalah online!
Penjelasan:
Terima kasih
-F
,@F
berisi daftar setiap karakter input.for/\S/g
iterates atas setiap karakter non-spasi input. Kami menggunakan$i
untuk menghitung di mana iterasi kami. Jika$F[$i++]
karakter huruf besar (/[A-Z]/
), maka kami mencetak karakter huruf besar saat ini (uc
), jika tidak, kami mencetak huruf kecil (lc
). Catat ituuc
danlc
kembalikan argumennya tidak berubah jika itu bukan surat.Versi sebelumnya (kurang golf: 47 byte):
Cobalah online!
sumber