Giới thiệu
Tôi là một fan hâm mộ lớn thực sự của các thách thức SBU (ngắn nhưng độc đáo) luôn luôn xuất hiện trên PPCG. CUSRS là một hệ thống được thiết kế để cấu trúc lại chuỗi, hàm CUSRS có 2 tham số và xuất ra 1 Chuỗi.
Thử thách
Sản xuất một chương trình, chức năng, lambda hoặc thay thế chấp nhận được để làm như sau:
Cho String inputvà String refactor(như ví dụ), tái cấu trúc inputbằng cách sử dụng refactornhư sau:
Các refactorchuỗi sẽ được ở định dạng ((\+|\-)\w* *)+(regex), ví dụ:
+Code -Golf -lf +al
Mỗi phần là một hành động tái cấu trúc để thực hiện trên input. Mỗi chương trình cũng có một con trỏ.
+ Sẽ chèn hậu tố của nó (không có dấu cộng) tại vị trí con trỏ hiện tại trong Chuỗi và sau đó đặt lại con trỏ về 0.
Mỗi thao tác nên được áp dụng cho inputChuỗi và kết quả sẽ được trả về.
Thí dụ:
input:
Golf +Code //pointer location: 0
output:
CodeGolf //pointer location: 0
-Sẽ tăng con trỏ qua Chuỗi cho đến khi tìm thấy hậu tố. Hậu tố sẽ bị xóa khỏi Chuỗi và con trỏ sẽ ở bên trái của văn bản bị xóa. Nếu không tìm thấy hậu tố, con trỏ sẽ đơn giản tiến đến cuối Chuỗi và được để ở đó.
input:
Golf -lf //pointer location 0
output:
Go //pointer location 2
Ví dụ
input:
"Simple" "-impl +nip -e +er"
output:
"Sniper"
input:
"Function" "-F +Conj"
output:
"Conjunction"
input:
"Goal" "+Code -al +lf"
output:
"CodeGolf"
input:
"Chocolate" "Chocolate"
output:
"Chocolate" //Nothing happens...
input:
"Hello" "-lo+p +Please" //Spaces are irrelevant
output:
"PleaseHelp"
input:
"Mississippi" "-s-s-i-ppi+ng" //Operations can be in any order
output:
"Missing"
input:
"abcb" "-c -b +d"
output:
"abd"
input:
"1+1=2" "-1+22-=2+=23"
outut:
"22+1=23"
Mã ví dụ
Ví dụ là Java, nó hoàn toàn không được chơi gôn.
public static String refactor(String input, String swap) {
int pointer = 0;
String[] commands = swap.replace(" ", "").split("(?=[-+])");
for (String s : commands) {
if (s.startsWith("+")) {
input = input.substring(0, pointer) + s.substring(1) + input.substring(pointer, input.length());
pointer = 0;
} else {
if (s.startsWith("-")) {
String remove = s.substring(1);
for (int i = pointer; i < input.length(); i++) {
if (input.substring(i, i + remove.length() > input.length() ? input.length() : i + remove.length()).equals(remove)) {
pointer = i;
input = input.substring(0, i) + input.substring(i + remove.length(), input.length());
break;
}
}
}
}
}
return input;
}
Quy tắc
- Áp dụng sơ hở tiêu chuẩn
- Mã ngắn nhất, tính bằng byte, thắng
aaa -agì?
|aavới đường ống là con trỏ.
-hậu tố không được tìm thấy?