Giới thiệu
Trong Android Studio và các IDE khác, có các mã hoàn thành để hỗ trợ chèn mã hiệu quả (đặc biệt là khi tên của các lớp hoặc phương thức quá dài), giống như tên trong hình bên dưới.
Có một số logic khác nhau được sử dụng giữa các IDE để xác định các lớp, phương thức và biến nào cần đề xuất, nhưng mặt khác là phổ biến: nhập các chữ cái ban đầu của mỗi từ và định danh khớp với các chữ cái ban đầu đó sẽ được đề xuất.
Thử thách
Trong thử thách này, hãy viết một chương trình hoặc hàm nhận hai chuỗi, cụ thể input
và identifier
, xác định xem các chuỗi có identifier
khớp với hay không input
.
Chúng tôi chia identifier
thành các từ trong đó:
- một chữ cái viết thường được theo sau bởi một chữ cái viết hoa (
"SplitHere" -> "Split", "Here"
), - một chữ cái viết hoa được theo sau bởi một chữ cái viết hoa và một chữ cái viết thường (
"SPLITHere" -> "SPLIT", "Here"
), hoặc - có một số hoặc một dấu gạch dưới
_
("SPLIT_HERE" -> "SPLIT", "HERE"
).
Nếu điều này vẫn chưa đủ rõ ràng, đây là regex đại diện cho điều kiện để phân chia : (?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|[_0-9]
. Sau đây là một vài ví dụ:
theWord_Example
, Trong đó có 3 chữ (the
,Word
,Example
) có thể được tìm thấy.THEWORD2EXAMPLE
, trong đó chỉ có thể tìm thấy 2 từ (THEWORD
,EXAMPLE
) (vìTHEWORD
là một chữ cái viết hoa và cũng vậyEXAMPLE
).THEWordEXAMPLE3
, Trong đó có 3 chữ (THE
,Word
,Example
) có thể được tìm thấy (Word
được coi là một từ riêng biệt ở đây).THEWORDEXAMPLEFOUR
, trong đó chỉTHEWORDEXAMPLEFOUR
có thể tìm thấy 1 từ ( ) (toàn bộ dòng chữ in hoa).
Đối với mục đích này ở đây, chúng tôi sử dụng một phiên bản đơn giản hóa. Trong thực tế logic phức tạp hơn nhiều. Trong phiên bản này chỉ có hai quy tắc:
Nếu chỉ
input
bao gồm các chữ cái viết thường, thì chỉidentifier
khớp vớiinput
nếu có sự phân táchinput
thành các chuỗi con, mà đối với mỗi chuỗi con có một từ trong chuỗiidentifier
bắt đầu với chuỗi con đó, theo thứ tự chính xác đó.Ví dụ đầu vào:
sbo
Trường hợp Truthy: , , (UPDATE)
SQLiteBindOrColumnIndexOutOfRangeException
SparseBooleanArray
StringIndexOutOfBoundException
Các trường hợp giả mạo:
SeekBar
(thiếuo
), ( không phải ở đầu từ)StatusBarNotification
o
Nếu
input
chứa các chữ cái viết hoa, thì một phân chia trêninput
phải được thực hiện trước mỗi chữ cái viết hoa khi áp dụng Quy tắc 1.Ví dụ đầu vào:
sbO
Trường hợp thật
SQLiteBindOrColumnIndexOutOfRangeException
Các trường hợp giả mạo: ( phải xuất hiện ở đầu từ), (sai thứ tự)
SparseBooleanArray
O
StringIndexOutOfBoundException
Tôi / O
Đầu vào : hai chuỗi, một cho input
và một cho identifier
. Bạn có thể giả định rằng regex [A-Za-z]+
khớp input
và regex [A-Za-z0-9_]
khớp identifier
.
Đầu ra : một trong những giá trị trung thực hoặc giả. Bạn có thể chọn giá trị nào để trả về là trung thực và giá trị giả, nhưng lựa chọn của bạn phải nhất quán trong tất cả các trường hợp. Ví dụ, bạn có thể trở lại 1/0
, true/false
, π/e
hoặc bất cứ điều gì, nhưng họ phải giữ nguyên trên tất cả các trường hợp.
Các trường hợp thử nghiệm
Mỗi dòng bao gồm hai chuỗi, cụ thể input
và identifier
tương ứng.
Trường hợp thật
"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"
Trường hợp giả
"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"
Tiêu chí chiến thắng
Đây là một môn đánh gôn , vì vậy mã ngắn nhất của mỗi ngôn ngữ sẽ thắng. Lỗ hổng mặc định không được phép.
"sqldata", "SQLData"
là sự thật.
"sbo" "StringIndexOutOfBoundException"
phù hợp *S*tringIndexOutOf*Bo*undException
?
"SQLData", "SQLData"
là sai?