在被低估的蒸汽朋克小说《差异引擎》中,相当于电影院的房屋提供了由砖块显示的像素化运动图像,可以通过机械方式翻转。协调这些磁贴的运动的控制引擎是一台大型噪音机,由一副打孔卡控制。
您的任务是模拟这样的引擎并显示输入文件指定的像素化动画。输入由固定宽度格式的行组成,但是您可以假定任何方便的行尾指示。格式为:
SSSSYYxxXXOA
SSSS: 4 digit sequence no. may be padded by blanks or all blank
YY: the y coordinate affected by this line (descending, top is 0, bottom is m-1)
xx: the starting x coordinate
XX: the ending x coordinate
O: hexadecimal opcode
A: argument (0 or 1)
输入是明确排序的(如果您将一副纸牌放在地板上,这部分我将非常感谢)。这意味着程序必须使用序列字段作为排序键对输入行执行稳定的排序。具有相同序号的行必须保持其原始相对顺序。(如果您将实际的行号附加到键上,则它应该与不稳定的排序一起使用。)空白序列字段应解释为小于任何数字(ascii排序序列)。
一条语句行只能影响一个y坐标,但可以指定x值的连续范围。结束的x值可以留为空白,或者可以与初始值相同,以便影响单个像素。
操作码是一个十六进制数字,它指定用作光栅的通用二进制功能代码。参数是0或1。执行的栅格操作是
pixel = pixel OP argument infix expression
--or--
OP(pixel, argument) function call expression
因此,像素的原始值在UBF表中输入为X,语句中的参数值输入为Y。此函数的结果是像素的新值。并且对语句中指定的从xx,YY到XX,YY的每个x,y对执行此操作。xx和XX指定的范围包括两个端点。所以
0000 0 010F1
应该在第0行上设置像素0、1、2、3、4、5、6、7、8、9、10。
输出尺寸(m x n)至少应为20 x 20,但如果需要,可以更大。但是谷物应该显示出来,您知道吗?应该被像素化了。图形和ASCII美术输出都是可以接受的。
例如,如果我们要制作像素化图形的图像:
# #
###
##
####
#
#### ####
# #
###
# #
# #
如果我们使用像XOR这样的位翻转操作来绘制他,则无论屏幕是黑色还是白色,都可以绘制和擦除它。
00020261
0 6 661
1 3 561
2 3 461
3 3 661
4 4 461
5 0 361
5 5 861
6 3 361
6 5 561
8 3 561
9 3 361
9 5 561
10 3 361
10 5 561
复制此序列将使图形出现和消失。
通过在序列字段中指定不同的“镜头”,可以无序组成较大的动画。
100 016F0
101 016F0
102 016F0
103 016F0
104 016F0
105 016F0
106 016F0
107 016F0
108 016F0
109 016F0
110 016F0
111 016F0
112 016F0
113 016F0
114 016F0
115 016F0
200020261
2 0 6 661
2 1 3 561
2 2 3 461
2 3 3 661
2 4 4 461
2 5 0 361
2 5 5 861
2 6 3 361
2 6 5 561
2 8 3 561
2 9 3 361
2 9 5 561
210 3 361
210 5 561
00020261
0 6 661
1 3 561
2 3 461
3 3 661
4 4 461
5 0 361
5 5 861
6 3 361
6 5 561
8 3 561
9 3 361
9 5 561
10 3 361
10 5 561
300020261
3 0 6 661
3 1 3 561
3 2 3 461
3 3 3 661
3 4 4 461
3 5 0 361
3 5 5 861
3 6 3 361
3 6 5 561
3 8 3 561
3 9 3 361
3 9 5 561
310 3 361
310 5 561
00020261
0 6 661
1 3 561
2 3 461
3 3 661
4 4 461
5 0 361
5 5 861
6 3 361
6 5 561
8 3 561
9 3 361
9 5 561
10 3 361
10 5 561
生产:
这是代码高尔夫球,因此最短的程序(按字节计数)获胜。如果引擎发出喀嗒声,则奖励(-50)。
x
总是包容性的?