Java 7中,376个 428 426 428字节
import java.util.*;class M{public static void main(String[]a){String s="import java.util.*;class M{public static void main(String[]a){String s=%c%s%1$c,x=s=s.format(s,34,s);for(List l=Arrays.asList(x.split(%1$c%1$c));x.equals(s);s=s.join(%1$c%1$c,l))Collections.shuffle(l);System.out.print(s);}}",x=s=s.format(s,34,s);for(List l=Arrays.asList(x.split(""));x.equals(s);s=s.join("",l))Collections.shuffle(l);System.out.print(s);}}
+52和+2个字节,用于两个错误修复。.我没有(正确地)检查是否随机生成的String等于原始源代码。考虑到涉及的角色数量,这种机会天文数字很小,但是无论是否符合挑战规则,我都必须对其进行验证。
我在Java中的第一个奎因答案。在
这里尝试。
您可以删除两者Collections.shuffle(l)
并!
在两者前面添加x.equals(s)
以验证输出确实等于程序:
在此处尝试。
说明:
- 该
String s
包含未格式化的源代码。
%s
用于将String本身输入s.format(...)
。
%c
,%1$c
以及34
用于格式化双引号。
s.format(s,34,s)
放在一起
代码的这一部分负责输出随机字谜:
// Strings `s` and `x` now both contain the source-code:
x=s=s.format(s,34,s);
// Create a list with the characters of this source-code-String and loop
for(List l=Arrays.asList(x.split(""));
// as long as String `x` equals String `s`
x.equals(s);
// Shuffle the list, and set it to `s` in every iteration of the loop:
s=s.join("",l))Collections.shuffle(l);
// End of loop (implicit / single-line body)
// And then print the random anagram to STDOUT:
System.out.print(x);