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 input
và String refactor
(như ví dụ), tái cấu trúc input
bằng cách sử dụng refactor
như sau:
Các refactor
chuỗ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 input
Chuỗ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 -a
gì?
|aa
với đường ống là con trỏ.
-
hậu tố không được tìm thấy?