我喜欢BATCH,尽管它由于缺乏非整数支持而令人震惊地缺乏功能性命令。为什么?因为这有效:
SET var=SET
%var% i=0
这将评估为:
SET var=SET
SET i=0
太棒了,不是吗?我以前在BATCH程序中使用过此技术,因为它可以节省字节!
您应该接受的挑战是,以这种方式“高尔夫” BATCH程序。您将通过包含SET
会评估程序部分内容的语句来减少输入BATCH程序的字节大小,并且不得以其他任何方式修改程序。(例如,这不允许将变量名称重命名为更短的名称。请记住,BATCH(从变量开始)是不区分大小写的。)您的得分计算如下:
score = # of characters in your program + 5*(net result bytes in test cases below)
我保留添加更多测试用例的权利,以阻止为测试用例优化程序的工作。
对于这一挑战的缘故,你的SET
语句不能包含控制字符(|
,<
,>
,%
)或换行。除了在set语句内移动代码段外,您不能修改代码。(也就是说,您可能不会删除不必要的空格,将其替换EQU
为==
,等等。)我们假设行以结束\n
。
测试用例
每个测试用例都在单独的代码块中,并且每个测试用例都是独立的,这意味着您仅应假设其中给出了内容。(即,如果您SET d=SET
在一个程序中,该语句将不会自动提供给任何其他程序)。每个示例结果都可以在每个测试用例之后找到。测试用例之间有界线。
@回声关闭 SET增量= 10 :环 IF%increment%EQU 0 GOTO结束 回声%increment% SET / A%increment%-= 1 GOTO循环 :结束 出口
@回声关闭 SET / p INPUT =在此处输入输入: SET R =%1 回声此处输入的最后一个字符:%R:〜-1%
@回声关闭 SET增量= 10 :e 转到 回声f :F 转到g 回声 :G 转到h 回声 :H 转到我 回声 :一世 转到j 回声 :j 如果3 == 4(ECHO 4)否则(ECHO 5) 如果5 == 3(GOTO l)否则(GOTO k) :k 回声完成。 回声出局! 出口 :l 转到g
回声你好,你好,你好,你好,你好,你好,你好,你好!,你好,你好!
输出示例:
@回声关闭 SET增量= 10 :环 IF%increment%EQU 0 GOTO结束 回声%increment% SET / A%increment%-= 1 GOTO循环 :结束 出口(保存了0个字节)
@回声关闭 SET%i%=在此处输入: SET / p INPUT =输入%i% SET R =%1 ECHO%i %% R:〜-1%的最后一个字符(获得3个字节)
@回声关闭 SET增量= 10 设置g = GOTO 设置e = Echo :e %g%f %e%f :F %g%g %例如 :G %g%h %e%h :H %g%i %e%i :一世 %g%j %e%j :j 如果3 == 4(%e%4)ELSE(%e%5) 如果5 == 3(%g%l)ELSE(%g%k) :k %e%完成。 %e%抢购!! 出口 :l %g%g(节省了10个字符)
SET%h%= ello, 回声H%h%H%h%H%h%h%h%h%h%H%h%Hello !, h%h%ello !, Lello。(已保存1个字符)
2
缩短批次以获得乐趣和利润!
—
Alex Carlsen
您需要更多规格。当然
—
user202729
AAA %increment%
→ set a=increment¶AAA %%a%%
是无效的,而AAA %1 BBB %2
→ set a= BBB ¶AAA %1%a%%2
是有效的。(iirc)因此,您需要对其进行形式化。(¶
代表换行符)
我们是否需要处理已启用延迟扩展,百分号转义或/ if语句的多行代码?根据最后一个测试用例(由于打开回声会产生额外的输出,而在
—
很有可能
@
之前没有SET
),高尔夫程序是否接受了无关的输出?
Tcl又来了
—
Ven
尽管由于?
—
阿达姆