介绍
我是SBU(简短而独特)挑战赛的忠实拥护者,这种挑战一直都在PPCG上出现。CUSRS是一个旨在重构字符串的系统,CUSRS函数采用2个参数并输出1个String。
挑战
产生程序,函数,lambda或可接受的替代方法以执行以下操作:
鉴于String input
和String refactor
(作为例子),重构input
使用refactor
如下:
的refactor
字符串将在格式((\+|\-)\w* *)+
(正则表达式),例如:
+Code -Golf -lf +al
每个部分都是要在上执行的重构操作input
。每个程序也都有一个指针。
+
将在字符串的指针当前位置插入后缀(不带加号),然后将指针重置为0。
每个操作都应应用于input
字符串,并应返回结果。
例:
input:
Golf +Code //pointer location: 0
output:
CodeGolf //pointer location: 0
-
将通过字符串增加指针,直到找到后缀。后缀将从字符串中删除,而指针将留在删除的文本的左侧。如果找不到后缀,则指针将简单地前进到String的末尾并留在此处。
input:
Golf -lf //pointer location 0
output:
Go //pointer location 2
例子
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"
范例程式码
这个例子是Java,一点儿也没有。
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;
}
规则
- 适用标准漏洞
- 以字节为单位的最短代码获胜
1
相关
—
Emigna
输出应该是什么
—
ETHproductions's
aaa -a
?
|aa
用管道作为指针。
@Emigna在看问题时,我相信我的实现会大不相同。
—
肖恩·怀尔德
以会发生什么
—
Zgarb
-
,如果后缀是没有发现?