#P2634. Nullary Computer

Nullary Computer

问题描述

Brian Huck 发明了一种新型节能计算机。对于当前基于 CMOS 的处理器,每次位从 0 变为 1 或反向变化时都会损耗一定电量。为避免这一问题,Brian 的新型零核处理器仅存储零。所有数字均以零进制形式存储,如右侧所示:

十进制 零进制
0
1 00
2 000
3 0000
4 00000
5 000000
...

其初始的 64 尼特(nit)型号包含 26 个寄存器,每个寄存器最多存储 64 尼特,若尝试存储超过 64 尼特则会导致运行时错误。此外还有一个标志寄存器,其中要么存储 0,要么为空。指令集如下:

表 1:NC 指令集

指令 解释及 C 语言模拟方式
A 向寄存器 A 的值添加一个 0(其他大写字母同理)。a++a++
a 首先清空标志寄存器。若可能,从寄存器 A 移除一个 0 并放入标志寄存器(其他小写字母同理)。flag=0;if(a>0)flag=1;a;flag = 0; if(a>0) { flag=1; a--; }
( 若标志寄存器为空,跳转到匹配的 ));否则清空标志寄存器。while(flag)while(flag){flag=0;....flag=0; ....
) 跳转到匹配的 ((...... }

除指令外,零进制程序中仅允许空白字符。

样例程序

Brian 提供了一些程序以展示该计算机的简洁与优雅:

  • b(b)a(Ba)b(b)a(Ba):将寄存器 AA 的值移动到寄存器 BB(先清空 B,再反复从 A 取一个 0 放入 B)。
  • $XXXa(GIa)i(g(FYg)y(Gy)f(Zb(z)z (i(YBi)y(Iy))f)Zb(zb)z(xz)i)x$:若寄存器 AA00 的个数为质数,则设置标志寄存器。

任务要求

你需要为 Brian 的零核原型计算机(NCPC)编写一个排序程序。NCPC 的内存有限,因此程序长度不得超过 5432 条指令,且对于任意输入,运行时间不得超过 5×1065×10⁶ 步(每执行一条指令计为一步)。

输入说明

待排序的数字存储在最初的 2424 个寄存器AX A-X 中,剩余两个寄存器(YYZZ)为空。

输出说明

排序后的数字应按升序存储在寄存器 AXA-X 中,YYZZ 需保持为空。

输入样例

A 0  
B 000000000  
C 000000  
D 0000  
E 00000000  
F 0000000  
G 0000  
H 000000  
I 000000000  
J 000  
K  
L  
M  
N  
O  
P  
Q  
R  
S  
T  
U  
V  
W  
X 0  
Y  
Z  

输出样例

A  
B  
C  
D  
E  
F  
G  
H  
I  
J  
K  
L  
M  
N 0  
O 0  
P 000  
Q 0000  
R 0000  
S 000000  
T 000000  
U 0000000  
V 00000000  
W 000000000  
X 000000000  
Y  
Z  

最终要求

输出一段 Java、C、C++ 或 Pascal 源代码,用于生成符合要求的零进制程序。

题目来源

Nordic 2005