pengantar
Di Android Studio dan IDE lain ada pelengkapan kode untuk membantu penyisipan kode yang efisien (terutama ketika nama-nama kelas atau metode sangat verbose), seperti yang ada pada gambar di bawah ini.
Ada beberapa logika berbeda yang digunakan antara IDE untuk menentukan kelas, metode, dan variabel apa yang disarankan, tetapi sebaliknya umum: mengetikkan huruf awal dari setiap kata, dan pengidentifikasi yang cocok dengan huruf-huruf awal tersebut akan disarankan.
Tantangan
Dalam tantangan ini, tulis sebuah program atau fungsi yang menerima dua string, yaitu inputdan identifier, tentukan apakah identifiercocok input.
Kami membagi identifierkata-kata di mana:
- huruf kecil diikuti oleh huruf besar (
"SplitHere" -> "Split", "Here"), - huruf besar diikuti oleh huruf besar dan kecil (
"SPLITHere" -> "SPLIT", "Here"), atau - ada angka atau garis bawah
_("SPLIT_HERE" -> "SPLIT", "HERE").
Jika ini masih tidak cukup jelas, di sini adalah regex mewakili kondisi perpecahan: (?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|[_0-9]. Berikut beberapa contoh:
theWord_Example, Di mana 3 kata (the,Word,Example) dapat ditemukan.THEWORD2EXAMPLE, di mana hanya 2 kata (THEWORD,EXAMPLE) dapat ditemukan (karenaTHEWORDmerupakan huruf besar dan begitu jugaEXAMPLE).THEWordEXAMPLE3, Di mana 3 kata (THE,Word,Example) dapat ditemukan (Worddianggap kata terpisah di sini).THEWORDEXAMPLEFOUR, di mana hanya 1 kata (THEWORDEXAMPLEFOUR) dapat ditemukan (seluruh huruf besar).
Untuk tujuan ini di sini kami menggunakan versi yang disederhanakan. Pada kenyataannya, logikanya jauh lebih kompleks. Dalam versi ini hanya ada dua aturan:
Jika
inputhanya terdiri dari huruf kecil, makaidentifiercocok denganinputhanya jika ada pemisahaninputmenjadi substring, bahwa untuk setiap substring ada kata dalamidentifierawal dengan substring itu, dalam urutan yang tepat.Input contoh:
sboKasus truthy: , , (UPDATE)
SQLiteBindOrColumnIndexOutOfRangeExceptionSparseBooleanArrayStringIndexOutOfBoundExceptionKasus palsu:
SeekBar(hilango), ( bukan di awal kata)StatusBarNotificationoJika
inputberisi huruf besar, maka perpecahan padainputharus dilakukan sebelum setiap huruf besar saat menerapkan Aturan 1.Input contoh:
sbOKasus kebenaran:
SQLiteBindOrColumnIndexOutOfRangeExceptionKasus palsu: ( harus muncul di awal kata), (urutan salah)
SparseBooleanArrayOStringIndexOutOfBoundException
I / O
Input : dua string, satu untuk inputdan satu untuk identifier. Anda dapat mengasumsikan bahwa regex [A-Za-z]+cocok inputdan regex [A-Za-z0-9_]cocok identifier.
Output : salah satu nilai truey atau falsy. Anda dapat memilih nilai apa yang akan dikembalikan sebagai benar dan salah, tetapi pilihan Anda harus konsisten di semua kasus. Misalnya Anda dapat kembali 1/0, true/false, π/eatau apa pun, tetapi mereka harus tetap sama di semua kasus.
Uji kasus
Setiap baris terdiri dari dua string, yaitu inputdan identifiermasing - masing.
Kasus kebenaran:
"sbo" "SparseBooleanArray"
"sbo" "StringIndexOutOfBoundException"
"sbo" "SQLiteBindOrColumnIndexOutOfRangeException"
"sbO" "SQLiteBindOrColumnIndexOutOfRangeException"
"Al" "ArrayList"
"AL" "ArrayList"
"Al" "ALARM_SERVICE"
"As" "ALARM_SERVICE"
"AS" "ALARM_SERVICE"
"SD" "SQLData"
"SqD" "SQLData"
"SqlD" "SQLData"
"SqDa" "SQLData"
"the" "theWord_Example"
"the" "THEWORD2EXAMPLE"
"the" "THEWordEXAMPLE3"
"the" "THEWORDEXAMPLEFOUR"
"thw" "theWord_Example"
"thw" "THEWordEXAMPLE3"
"te" "theWord_Example"
"te" "THEWORD2EXAMPLE"
"te" "THEWordEXAMPLE3"
Kasus palsu:
"sbo" "SeekBar"
"sbo" "StatusBarNotification"
"sbO" "StringIndexOutOfBoundException"
"sbO" "SparseBooleanArray"
"AL" "ALARM_SERVICE"
"ASE" "ALARM_SERVICE"
"SQD" "SQLData"
"SqLD" "SQLData"
"SLD" "SQLData"
"SQDt" "SQLData"
"SQDA" "SQLData"
"thw" "THEWORD2EXAMPLE"
"thw" "THEWORDEXAMPLEFOUR"
"te" "THEWORDEXAMPLEFOUR"
Kriteria Menang
Ini adalah kode-golf , sehingga kode terpendek dari setiap bahasa menang. Celah default tidak diizinkan.
"sqldata", "SQLData"itu benar.
"sbo" "StringIndexOutOfBoundException"cocok *S*tringIndexOutOf*Bo*undException?

"SQLData", "SQLData"adalah palsu?