introduction
Je suis un grand fan des défis SBU (Short But Unique) qui surgissent tout le temps sur PPCG. Le CUSRS est un système conçu pour refactoriser les chaînes, une fonction CUSRS prend 2 paramètres et génère 1 chaîne.
Défi
Produisez un programme, une fonction, un lambda ou une alternative acceptable pour effectuer les opérations suivantes:
Étant donné String input
et String refactor
(à titre d'exemples), refactoriser en input
utilisant refactor
comme suit:
La refactor
chaîne sera au format ((\+|\-)\w* *)+
(regex), par exemple:
+Code -Golf -lf +al
Chaque section est une action de refactorisation à effectuer input
. Chaque programme a également un pointeur.
+
Insère son suffixe (sans le signe plus) à l'emplacement actuel du pointeur dans la chaîne, puis réinitialise le pointeur à 0.
Chaque opération doit être appliquée à la input
chaîne et le résultat doit être renvoyé.
Exemple:
input:
Golf +Code //pointer location: 0
output:
CodeGolf //pointer location: 0
-
Incrémente le pointeur dans la chaîne jusqu'à ce qu'il trouve le suffixe. Le suffixe sera supprimé de la chaîne et le pointeur sera laissé sur le côté gauche du texte supprimé. Si aucun suffixe n'est trouvé, le pointeur progressera simplement jusqu'à la fin de la chaîne et y restera.
input:
Golf -lf //pointer location 0
output:
Go //pointer location 2
Exemples
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"
Exemple de code
L'exemple est Java, ce n'est pas du tout du golf.
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;
}
Règles
- Les échappatoires standard s'appliquent
- Le code le plus court, en octets, gagne
aaa -a
?
|aa
avec le tuyau étant le pointeur.
-
si le suffixe n'est pas trouvé?