Java - 1331 byte, 618 byte và 504 byte
Đây là java. Điều thú vị là nó khá dễ đọc và linh hoạt. Bạn có thể thử nghiệm để thay đổi SHIFT
biến thành 0 và nó sẽ là một quine. Bạn có thể thay đổi nó thành bất kỳ giá trị nào bạn muốn, bao gồm các giá trị âm và nó sẽ thay đổi mã cho phù hợp.
public class Quinex {
private static final int SHIFT = 1;
private static String next(String now, boolean mangles) {
String sb = "";
for (char c : now.toCharArray()) {
if (!mangles && c == 87) {
sb += next(String.valueOf(SHIFT), true);
} else {
sb += (char) ((mangles ? c : c == 94 ? 10 : c == 64 ? 34 : c) + SHIFT);
}
}
return sb;
}
public static void main(String... args) {
System.out.println(next(TEXT, false) + next(TEXT, true) + new String(new char[] { 34, 59, 10, 125 }));
}
private static final String TEXT = "public class Quinex {^^ private static final int SHIFT = W;^^ private static String next(String now, boolean mangles) {^ String sb = @@;^ for (char c : now.toCharArray()) {^ if (!mangles && c == 87) {^ sb += next(String.valueOf(SHIFT), true);^ } else {^ sb += (char) ((mangles ? c : c == 94 ? 10 : c == 64 ? 34 : c) + SHIFT);^ }^ }^ return sb;^ }^^ public static void main(String... args) {^ System.out.println(next(TEXT, false) + next(TEXT, true) + new String(new char[] { 34, 59, 10, 125 }));^ }^^ private static final String TEXT = @";
}
Tuy nhiên, nhược điểm duy nhất trong lớp trước là ngắt dòng, không được cho phép trong thông số câu hỏi (nằm ngoài phạm vi 32 đến 125). Vì vậy, tôi đưa ra ở đây một phiên bản chơi golf không có ngắt dòng (và không có các quirks để xử lý chúng). Bạn có thể chỉnh sửa giá trị của S
biến để thay đổi ca. Cái này có 618 byte:
class Q{static String g(String p,int m){int S=1;String u="";for(char c:p.toCharArray()){if(m==0&&c==87){u+=g(String.valueOf(S),1);}else{u+=(char)((m>0?c:c==64?34:c)+S);}}return u;}public static void main(String[]y){System.out.println(g(T,0)+g(T,1)+new String(new char[]{34,59,125}));}static final String T="class Q{static String g(String p,int m){int S=W;String u=@@;for(char c:p.toCharArray()){if(m==0&&c==87){u+=g(String.valueOf(S),1);}else{u+=(char)((m>0?c:c==64?34:c)+S);}}return u;}public static void main(String[]y){System.out.println(g(T,0)+g(T,1)+new String(new char[]{34,59,125}));}static final String T=@";}
Chắc chắn, nếu chúng ta bỏ sự điều chỉnh tốt của phần bù và mã hóa cứng giá trị của ca, chúng ta có thể thực hiện một phiên bản hoàn toàn được đánh gôn với 504 byte:
class Q{static String g(String p,int m){String u="";for(char c:p.toCharArray()){u+=(char)((m>0?c:c==64?34:c)+1);}return u;}public static void main(String[]y){System.out.println(g(T,0)+g(T,1)+new String(new char[]{34,59,125}));}static final String T="class Q{static String g(String p,int m){String u=@@;for(char c:p.toCharArray()){u+=(char)((m>0?c:c==64?34:c)+1);}return u;}public static void main(String[]y){System.out.println(g(T,0)+g(T,1)+new String(new char[]{34,59,125}));}static final String T=@";}