Đảo ngược phương thức Format.
Các Format
phương thức của lớp String (hoặc equivallent, chẳng hạn như sprintf
) có sẵn trong hầu hết các ngôn ngữ. Về cơ bản, nó có một chuỗi "Định dạng" có thể chứa các trình giữ chỗ với một số định dạng bổ sung và không có hoặc nhiều giá trị được chèn thay vì các trình giữ chỗ đó.
Nhiệm vụ của bạn là thực hiện chức năng nghịch đảo trong ngôn ngữ bạn chọn.
API
Tên phương thức nên là format1
hoặc deformat
.
Đầu vào : Tham số thứ nhất sẽ là chuỗi "Định dạng", giống như trong phương thức định dạng ban đầu. Tham số thứ 2 sẽ là chuỗi được phân tích cú pháp (xem ví dụ bên dưới). Không có thông số khác là cần thiết cũng không được phép.
Đầu ra : một mảng (hoặc tương đương với ngôn ngữ của sự lựa chọn của bạn) các giá trị được trích xuất tương ứng với các phần giữ chỗ trong định dạng.
Giữ chỗ là {0}
, {1}
, {2}
vv
Trong trường hợp định dạng xấu, bạn có thể đưa ra lỗi hoặc trả lại bất cứ thứ gì bạn thích.
Trong trường hợp đầu vào không hợp lệ, bạn có thể đưa ra lỗi hoặc trả lại bất cứ thứ gì bạn thích. Đầu vào không hợp lệ sao cho String.Format không thể tạo bằng chuỗi định dạng tương tự, ví dụ : '{0}{0}', 'AAB'
.
Ví dụ
deformat('{0} {1}', 'hello world') => ['hello', 'world']
deformat('http{0}://', 'https://') => ['s']
deformat('http{0}://', 'http://') => [''] // array of one item which is an empty string
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
Sự mơ hồ
Trong trường hợp mơ hồ, bạn có thể trả lại bất kỳ câu trả lời phù hợp. Ví dụ:
deformat('{0} {1}', 'Edsger W. Dijkstra')
// both ['Edsger', 'W. Dijkstra'] and ['Edsger W.', 'Dijkstra'] are applicable.
Một số quy tắc khác
- Để làm cho nó dễ dàng hơn, thực sự không cần phải hỗ trợ định dạng. Bạn có thể quên tất cả về các vấn đề số 0, dấu thập phân hoặc làm tròn hàng đầu. Chỉ cần tạo các giá trị dưới dạng chuỗi.
- Để làm cho nó không tầm thường, Biểu thức chính quy không được phép .
- Bạn không cần phải chăm sóc các dấu ngoặc nhọn trong đầu vào (tức là tham số đầu vào thứ 2 sẽ không chứa bất kỳ
{
s hoặc}
s nào).
Chiến thắng
Đây là môn đánh gôn ! (nên được đọc là "Đây là Sparta!") chức năng chính xác có độ dài chiến thắng ngắn nhất. Sơ hở tiêu chuẩn bị cấm.
['', 'AAAA']
,['A', 'AA']
,['AA', '']
deformat('{0}{1}{0}', 'ABBA') => ['', 'ABBA']
? Nếu vậy, có một giải pháp rẻ tiền trừ khi mỗi chuỗi xuất hiện ít nhất hai lần.
deformat('{0}_{1}_{0}', 'A_BB_A')
?
deformat('{0}{1}{0}', 'ABBA') => ['A', 'BB']
, nếu chúng ta được đưa radeformat('{0}{1}{0}', 'AAAA')
thì sao?