소개
저는 PPCG에서 항상 발생하는 SBU (Short But Unique) 과제를 정말 좋아합니다. CUSRS는 문자열을 리팩토링하도록 설계된 시스템이며, CUSRS 함수는 2 개의 매개 변수를 사용하고 1 개의 문자열을 출력합니다.
도전
다음을 수행하기위한 프로그램, 함수, 람다 또는 허용되는 대안을 생성하십시오.
주어 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
-접미사를 찾을 때까지 문자열을 통해 포인터를 증가시킵니다. 문자열에서 접미사가 제거되고 포인터는 제거 된 텍스트의 왼쪽에 남습니다. 접미사가 없으면 포인터는 단순히 문자열 끝으로 진행하여 그대로 남아 있습니다.
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;
}
규칙
- 표준 허점 적용
- 가장 짧은 코드 (바이트)가 이깁니다
aaa -a합니까?
|aa파이프가 포인터입니다.
-접미사를 찾지 못하면 어떻게됩니까 ?