深奥的语言与 5 个运算符

Esoteric language with 5 operators

我需要实现一种像(?)语言这样的 Brainfuck 语言

该语言有 5 个命令。

最初,

int x=1; at start of the execution of the algorithm

每个命令在 C 语言中执行以下操作。

"+": x+=1;

"-": x-=1;

">": x= x*2;

"<" : x= x/2;

"!" : printf("%c",x);

输入是ASCII码在0到127之间的字符序列。

output 应该是上述命令的序列,以便程序打印与 input

相同的字符序列

注意输出的长度应该最小化。

For example

input: ABC

Output: >>>>>>+!+!+!

explanation: ASCII code for A B C are 65 66 67 receptively

x=1 so x is doubled 6 times to get to 64. Then increment and print 3 times to print all ABC.

This is minimal compared to increasing x 64 times to get to x=65

我需要实现这种语言。

但我一直在思考一种算法,该算法在移动到输入中的下一个字符时找到命令序列。

例如,当x=8需要移动到12时,将x减少两次然后乘以2比加4次更快。当数字足够大时,算法的决定变得非常复杂。

我正在考虑递归也许是为了找到路径?最少命令数。

有什么提示或有没有我可以参考的这种深奥语言的名称?

找到从一个值 x 到另一个值的最小步数的一种方法是使用修改后的 Dijkstra's algorithm.

归结为要维护一个要探索的号码列表,该列表将被初始化为您的起始号码。当你探索一个数字时,你会采取所有可能的步骤,即 +-><,跟踪结果(以及你是如何到达那里的),直到您到达目的地。

这会找到一条从你的起始号码到目的地号码的路径,并且保证是最短的。