迭代简单指令集的所有可能性

时间:2017-09-24 21:00:01

标签: c# algorithm combinatorics

说我有一个非常简单的指令集模型:

opcode 0, arg1[0-1]
ocode 1, arg1[0-2], arg2[0-1]

所以我正在寻找的是用它来构建无限复杂程序的方法。

第一个项目是:

0,0

next is,
0,1

then
0,0
1,0,0

then
0,0
1,1,0

etc

这样,给定由以下定义的任意指令集:

class Instruction
{
   public int opcode;
   public int[] argLimits; //the maximum value of each argument, and number of arguments
}
Instruction[] allInstructions;

可以根据之前的程序生成下一个程序。 例如:ExecutableInstruction[] GetNextProgram(ExecutableInstruction[] previous, Instruction[] instructionSet);

参数的值限制始终为[0-n] 参数都是必需的 - 如果操作码需要3个参数,则它们都是必需的。

我知道当参数的数量固定时如何做这种事情,但是当每个操作码可以有N个参数时,每个操作码的每个参数可以是0-n值,我不知道从哪里开始

1 个答案:

答案 0 :(得分:3)

列举您的指示以及所有可能的参数值,例如:

A: 0,0
B: 0,1
C: 1,0,0
D: 1,0,1
E: 1,0,2
F: 1,1,0
G: 1,1,1
H: 1,1,2
I: 1,2,0
J: 1,2,1
K: 1,2,2

现在任何程序都是A-K字母表上的任意单词。我希望你知道如何继续。