罗马数字是一个简单的数字系统,具有以下属性:
I = 1, V = 5, X = 10, C = 100
)IV
、XC
)。每个这样的对被计算为两个值(例如IV = 5 - 1 = 4
)的向后差分。您的工作是编写一个函数/程序F
,它接受一个正整数n
并生成一个代码片段F(n)
(不一定用同一种语言)。输出的代码片段必须具有以下属性:
F(n)
作为一个完整的程序必须输出数字n
。F(a)+\!\!\!+\,F(b)
作为一个程序( +\!\!+
的意思是级联)必须输出a+b
,如果a≥b
,b−a
则不然。b−a
大小写优先的方式发出的任意数量的代码片段(请考虑一个带有+
s和-
s的算术表达式,但是-D39
的两边被翻转,其优先级高于+
)。-
s)。你的分数是F
的字节计数。以字节为单位的最短代码获胜。
如果F(10)
输出代码片段ABC
,而F(3)
输出代码片段xyz
:
ABC
应该输出10。xyz
应该输出3。ABCxyz
应该输出13。xyzABC
应该输出7。ABCABCABC
应该输出30。ABCABCxyzxyzABCxyzxyzABC
应该输出40,因为=> 10 + 10 +3+ (10-3) +3+ (10-3) = 40此外,如果F(8)
输出代码片段****
:
ABC****xyz
应该输出10 + 8 + 3 = 21
。****ABCxyz
应该输出(10-8) + 3 = 5
。xyz********ABC
应该输出(8-3) + (10-8) = 7
。xyz****ABC
,它包含三个连续严格递增的数字(3、8、10)。发布于 2021-03-09 11:17:27
n=>`t=this;s=~~t.s-(t.p<${n}&&2*p)+(p=${n}),{get x(){print(s)}}.x`
核心思想是将print()
放在getter函数后面。如果访问.x
属性,它将打印总s
。这被放置在生成的代码的末尾,以便在最后一次迭代中访问.x
,当连接时,它变成.xt=this
(不访问.x
)。
发布于 2021-03-09 18:29:43
n->"import java.util.*;import java.io.*;import java.util.jar.*;interface Main{Listl=new ArrayList();static void main(String[]a)throws Exception{var z=Main.class.getPackageName();for(var e:System.getProperty(\"java.class.path\").split(System.getProperty(\"path.separator\"))){if(!e.endsWith(\".jar\")){var b=new File(e+File.separatorChar+z);var d=b.listFiles();Arrays.sort(d);for(var f:d){var n=f.getName();if(n.endsWith(\".class\")){Class.forName(n.substring(0,n.length()-6));}}}}int s=0;for(int i=0;i0&&l.get(i)>l.get(i-1)?l.get(i-1)*2:0);System.out.print(s);}}\nclass _"+new java.util.Date().getTime()+"_"+System.nanoTime()+"{static{Main.l.add("+n+");}}//"
Main
接口有一个静态List
字段,所有生成的类都在它们的静态初始化器中添加一个整数。main方法尝试加载包中的所有类以运行它们的静态初始化器。F(a)
每次都会返回不同的值,因为它试图使用当前时间使类名唯一,因此不能通过使用变量来存储F(a)
的结果来缩短F(a) + F(a)
。
发布于 2021-03-10 19:03:03
import sys;print("""R=%s
class A():
def __del__(s):print(a)
if"a"in locals():
if"p"in locals()and p
代码的更易读版本:
import sys
print("""
number = %s
class PrintOnExit():
def __del__(self):
# This object will only be destroyed when the interpreter exits
print(result)
if "result" in locals():
if "previous" in locals() and previous < number:
result -= previous
result += number - previous
else:
result += number
if "print_on_destroy" not in locals():
print_on_destroy = PrintOnExit()
result = number
previous = number
""" % sys.argv[1])
```#qcStackCode#
https://codegolf.stackexchange.com/questions/220403
复制相似问题