Introducción
Soy un gran admirador de los desafíos SBU (Short But Unique) que surgen en PPCG todo el tiempo. El CUSRS es un sistema diseñado para refactorizar cadenas, una función CUSRS toma 2 parámetros y genera 1 cadena.
Desafío
Produzca un programa, función, lambda o alternativa aceptable para hacer lo siguiente:
Dado String input
y String refactor
(como ejemplos), refactorizar input
usando refactor
lo siguiente:
La refactor
cadena tendrá el formato de ((\+|\-)\w* *)+
(regex), por ejemplo:
+Code -Golf -lf +al
Cada sección es una acción de refactorización para realizar input
. Cada programa también tiene un puntero.
+
Insertará su sufijo (sin el signo más) en la ubicación actual de los punteros en la Cadena y luego restablecerá el puntero a 0.
Cada operación debe aplicarse a la input
cadena y el resultado debe devolverse.
Ejemplo:
input:
Golf +Code //pointer location: 0
output:
CodeGolf //pointer location: 0
-
Incrementará el puntero a través de la cadena hasta que encuentre el sufijo. El sufijo se eliminará de la cadena y el puntero se dejará en el lado izquierdo del texto eliminado. Si no se encuentra ningún sufijo, el puntero simplemente avanzará hasta el final de la Cadena y se quedará allí.
input:
Golf -lf //pointer location 0
output:
Go //pointer location 2
Ejemplos
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"
Código de ejemplo
El ejemplo es Java, no es golf en absoluto.
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;
}
Reglas
- Se aplican lagunas estándar
- El código más corto, en bytes, gana
aaa -a
?
|aa
con la tubería como puntero.
-
si no se encuentra el sufijo?