Điều này được lấy cảm hứng từ một phần của Bài toán nhóm 6 của cuộc thi ARML # 6.
Đây là thách thức:
Bạn được cung cấp một "chuỗi ký tự đại diện", đó là một chuỗi các chữ số và một ký tự khác. Một chuỗi khớp với chuỗi ký tự đại diện này bằng mã giả sau:
w = wildcard
s = string
# s matches w iff
for all 0 >= i > wildcard.length, w[i] == '?' or s[i] == w[i]
Ở đâu '?' là một nhân vật của sự lựa chọn của bạn.
Về mặt regex, chỉ cần tưởng tượng '?'
để được '.'
.
Thách thức là tìm tất cả các số vuông (yêu cầu lên tới 1 triệu) có biểu diễn chuỗi thập phân khớp với chuỗi ký tự đại diện này. "Ký tự đại diện" có thể là bất kỳ ký tự ASCII nào bạn chọn, miễn là nó không phải là một chữ số, rõ ràng.
Ví dụ: 4096
khớp 4**6
và 4*9*
nhưng 4114
cũng không khớp.
Đầu vào
Đầu vào sẽ được đưa ra như một chuỗi khớp với biểu thức chính quy [0-9?]+
. Đây có thể là một chuỗi, một mảng ký tự hoặc một mảng byte của các ký tự trong ASCII.
Đầu ra
Đầu ra sẽ là một danh sách / tập hợp / mảng số bất kỳ bạn muốn phân tách thành các ô vuông hoàn hảo và khớp với chuỗi ký tự đại diện.
Ví dụ về các đầu vào hợp lệ:
1234567*90
1234567?90
1234567u90
['1', '2', '3', '4', '5', '6', '7', '*', '9', '0']
[49, 50, 51, 52, 53, 54, 55, 42, 57, 48]
[1, 2, 3, 4, 5, 6, 7, '*', 9, 0]
Ví dụ về đầu ra hợp lệ:
[1, 4, 9]
1 4 9
1, 4, 9
1-4-9
Vân vân.
Thông số kỹ thuật
- Bạn không được sử dụng nội dung để tìm danh sách các ô vuông trong một phạm vi nhất định
- Áp dụng sơ hở tiêu chuẩn
- Bạn phải có khả năng xử lý lên tới 1 000 000 (1 triệu)
- Nếu được cung cấp với đầu vào
1******
, nó là chính xác để in[1000000]
. Nó cũng đúng để in[1000000, 1002001, 1004004, 1006009, 1008016, 1010025, ...]
- Trình tự ký tự đại diện sẽ không bao giờ bắt đầu với ký tự đại diện; nghĩa là, chúng sẽ luôn khớp với các chuỗi có cùng độ dài.
Các trường hợp thử nghiệm
4**6 -> [4096, 4356]
1**1 -> [1521, 1681]
1** -> [100, 121, 144, 169, 196]
9****9 -> [908209, 915849, 927369, 935089, 946729, 954529, 966289, 974169, 986049, 994009]
9*9*** -> [919681, 929296]
1**0* -> [10000, 10201, 10404, 10609, 12100, 14400, 16900, 19600]
9***4 -> [91204, 94864, 97344]
Chiến thắng
Gửi ngắn nhất (hợp lệ) (làm việc) trước ngày 14 tháng 2, hòa vốn bằng cách giành chiến thắng sớm nhất.
25
một câu trả lời hợp lệ cho ***
nhưng không cho *2*
?
{4, "w", "w", 6}
(hoặc tốt hơn nữa {4, w, w, 6}
), chứ không phải là một mảng các ký tự, chẳng hạn như {"4", "w", "w", "6"}
?
?
là được lựa chọn bởi người trả lời.