前書き
私は、常に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
パイプがポインターになります。
-
接尾語が見つからない場合は?