#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 移除一个 0 并放入标志寄存器(其他小写字母同理)。 |
( | 若标志寄存器为空,跳转到匹配的 ;否则清空标志寄存器。{ |
) | 跳转到匹配的 。} |
除指令外,零进制程序中仅允许空白字符。
样例程序
Brian 提供了一些程序以展示该计算机的简洁与优雅:
- :将寄存器 的值移动到寄存器 (先清空 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$:若寄存器 中 的个数为质数,则设置标志寄存器。
任务要求
你需要为 Brian 的零核原型计算机(NCPC)编写一个排序程序。NCPC 的内存有限,因此程序长度不得超过 5432 条指令,且对于任意输入,运行时间不得超过 步(每执行一条指令计为一步)。
输入说明
待排序的数字存储在最初的 个寄存器中,剩余两个寄存器( 和 )为空。
输出说明
排序后的数字应按升序存储在寄存器 中, 和 需保持为空。
输入样例
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
。