对于PCG.SE上的这个challenge,需要编写一个返回/输出前N个素数的函数/程序。
但是,程序中不允许使用带有主要代码点的字符。
其中两个字符为5
和e
。任一字母的代码点都包含5
。因此,\u{codepoint}
对这两个字母不起作用。
使用转义符,除e
中的return
外,我可以删除代码中的所有主要字符。
我可以使用System.out
或FileDescriptor.out
,但都包含字母e
。
有没有办法在不使用e
或5
的情况下退货或退货?
这里是我的代码,我的代码包含字符转义:
int[]b(int b\u0029{
int c,d,f[]\u003d{}\u003b
for(f\u003dj\u0061v\u0061.util.Arr\u0061ys.copy\u004ff(f,b\u0029\u003bb-->0\u003b\u0029
for(d\u003d0,c\u003d2\u003bf[b]<1\u003bf[b]\u003dd<1?c:f[b],d\u003d0,c\u002b\u002b\u0029
for(int h:f\u0029
d\u003dh>0&&c\u002fh*h\u003d\u003dc?1:d\u003b
return f;
}
没有转义字符:
int[]b(int b){
int c,d,f[]={};
for(f=java.util.Arrays.copyOf(f,b);b-->0;)
for(d=0,c=2;f[b]<1;f[b]=d<1?c:f[b],d=0,c++)
for(int h:f)
d=h>0&&c/h*h==c?1:d;
return f;
}
答案 0 :(得分:23)
我找到了一种在不使用System.out
,FileDescriptor.out
或return
的情况下输出素数的方法。我的方法不使用&#34; prime&#34;字符。
这非常棘手,因为e
遍布Java包名,类名和方法名。此外,必须禁止S
,因为它在Unicode中的编号为83
,83
为素数。它的Unicode转义\u0053
包含5
,其Unicode字符53
也是素数。以下是我们在这些规则下不能使用Unicode转义的所有字符:
%
(37为素数,\u0025
有5
)5
(53为素数,\u0035
有5
)S
(83为素数,\u0053
有5
)Y
(89为素数,\u0059
有5
)e
(101为素数,\u0065
有5
)这消除了:
toString
,fromString
,parseInt
,valueOf
和values
。java.beans
,java.net
,java.lang.reflect
个套件Class.forName
new
运算符。Logger
的{{1}}类的框架。以下是我们可以使用Unicode转义符的字符:
e
(41为素数,允许)
)\u0029
(43为素数,允许+
)\u002b
(47为素数,允许/
)\u002f
(59为素数,允许;
)\u003b
(61为素数,允许=
)\u003d
(67为素数,允许C
)\u0043
(71为素数,允许G
)\u0047
(73为素数,允许I
)\u0049
(79为素数,允许O
)\u004f
(97为素数,允许a
)\u0061
(107为素数,允许k
)\u006b
(113是素数,q
是允许的)尝试生成其消息包含所需输出的异常是满足Java要求的唯一方法。我们不能使用已检查的异常,因为我可以找到的所有已检查异常在其名称中使用\u0071
,在e
之前的每个超类中使用Throwable
。我将被要求使用包含throws
的异常名称的e
子句。我无法extend
任何课程,因为extends
包含e
s。
留下未经检查的例外情况。最有可能的用途是IllegalArgumentException
不是由此代码直接创建的,而是通过调用内置的函数来抛出IllegalArgumentException
。
Enum
包含valueOf
之外,e
会有所帮助。javax.crypto.Mac.getInstance
有一个e
;无论如何它都会抛出一个检查过的异常。javax.naming.ldap.Rdn.unescapeValue("\\b" + stringFormOfOutput)
通过例外输出了该列表,但该方法有一个e
。java.util.UUID.fromString
通过例外输出了该列表,但该方法有一个S
。 This method会抛出DataBindingException
which is unchecked。
javax.xml.bind.JAXB.unmarshal(stringFormOfOutput, Long.class)
通过DataBindingException
输出了该列表,但没有e
。现在我们所要做的就是将int[]
转换为String
。通过将数组连接到""
进行字符串转换不起作用,因为arrays, as objects in Java, don't override toString()
。由于Arrays.toString
,<{1}}已经过时了。
我们可以使用S
从数据中获取Arrays.asList
。但Arrays.asList(f)
gives a List<int[]>
, not a List<Integer>
,使问题复杂化。将List
的类型更改为f
无法正常工作,其中包含Integer[]
。将e
的类型更改为f
有效。
将数组转换为Long[]
如下。
String
代替Long c,d,f[]...
""+Arrays.asList(f)
语句,制作方法return
,然后致电void
。 unmarshal
的使用意味着需要进行一些其他调整,例如使用Long
文字和long
数组使用零而不是默认fill
。
null
逃离&#34; prime&#34;字符:
void b(int b){
Long c,d,f[]={};
for(f=java.util.Arrays.copyOf(f,b),Arrays.fill(f,0L);b-->0;)
for(d=0L,c=2L;f[b]<1;f[b]=d<1?c:f[b],d=0L,c++)
for(long h:f)
d=h>0&&c/h*h==c?1:d;
javax.xml.bind.JAXB.unmarshal(""+Arrays.asList(f),Long.class);
}
这是一个丑陋的代码,它可能不会赢得任何代码打高尔夫的比赛,但这是我能用Java想到满足要求的唯一方式。
使用void b(int b\u0029{
Lon\u0067 c,d,f[]\u003d{}\u003b
for(f\u003dj\u0061v\u0061.util.Arr\u0061ys.copy\u004ff(f,b\u0029,Arr\u0061ys.fill(f,0L\u0029\u003bb-->0\u003b\u0029
for(d\u003d0L,c\u003d2L\u003bf[b]<1\u003bf[b]\u003dd<1?c:f[b],d\u003d0L,c\u002b\u002b\u0029
for(lon\u0067 h:f\u0029
d\u003dh>0&&c\u002fh*h\u003d\u003dc?1:d\u003b
j\u0061v\u0061x.x\u006dl.bind.JAXB.un\u006d\u0061rsh\u0061l(""\u002bArr\u0061ys.\u0061sList(f\u0029, Lon\u0067.cl\u0061ss\u0029\u003b
}
作为参数调用此b
方法会产生以下输出,其中10
是前10个素数:
[29, 23, 19, 17, 13, 11, 7, 5, 3, 2]
但是Exception in thread "main" javax.xml.bind.DataBindingException: javax.xml.bind.UnmarshalException
- with linked exception:
[java.io.FileNotFoundException: C:\dev\src\misc\[29, 23, 19, 17, 13, 11, 7, 5, 3, 2] (The system cannot find the file specified)]
at javax.xml.bind.JAXB.unmarshal(JAXB.java:208)
at Main.b(Main.java:34)
at Main.main(Main.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[java.io.FileNotFoundException: C:\dev\src\misc\[29, 23, 19, 17, 13, 11, 7, 5, 3, 2] (The system cannot find the file specified)]
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:206)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:181)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:235)
at javax.xml.bind.JAXB.unmarshal(JAXB.java:205)
... 7 more
Caused by: java.io.FileNotFoundException: C:\dev\src\misc\[29, 23, 19, 17, 13, 11, 7, 5, 3, 2] (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:97)
at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:609)
at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:799)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203)
... 10 more
呢?有一个看似不可避免的public static void main(String[] args)
。制作S
b
并使用静态初始化程序调用{{1}},以消除static
及其b
要求。
main
输出现在包含String[]
,但输出的其余部分完好无损; st\u0061tic
{
b(10\u0029\u003b
}
st\u0061tic void b(int b\u0029{
// ...
被链接。
ExceptionInInitializerError