风味文字
基于堆栈的esolang 欠载有一些有趣的联系,函数式编程。其中之一是对数值数据类型的处理-像lambda演算一样,您可以通过执行N次操作的函数来表示自然数N。
为简单起见,我们仅考虑以下Underload命令子集:
:-此命令复制堆栈上的顶层项目。*-此命令将堆栈中的前两个项目合并为一个项目。
我们将一个Underload数字N定义为一个字符串,当执行该字符串时:,*它消耗堆栈中的最高位项目,并产生N个该项目的副本,并将它们连接在一起。一些例子:
- 没有欠载数字0,-1、1 / 2,π。
- 空字符串
是欠载数字1,因为它使堆栈保持不变。 :*是欠载数字2,因为它复制了最上面的项目,然后将这两个副本连接在一起成为一个项目:(A):*=(A)(A)*=(AA)。::**是Underload数字3:(A)::**=(A)(A):**=(A)(AA)*=(AAA)。:::***是欠载数字4。:*:*也是欠载数字4:(A):*:*=(AA):*=(AA)(AA)*=(AAAA)。
通常,您会发现,如果M和N分别是欠载数字M和N,则:N*数字N + 1和MN数字M×N。
挑战
您的任务是编写最短的程序(在STDIN上接受输入)或函数(通过参数接受输入),以产生最短的欠载数字表示形式,作为字符串输入。也就是说,如果输入的正自然数N> 1,则必须生成一个负数N,其字符长度小于或等于其他所有负数N的长度。
输入和输出示例:(“输入- OUTPUT”)
- 1-
。 - 2-
:*。 - 5-
::*:**(2×2 + 1)。 - 7-
::*::***(2×3 + 1)或:::**:**(3×2 + 1)。 - 33-
::*:*:*:*:**(2×2×2×2×2 + 1)。 - 49-
::*:*:*:*::***(16×3 + 1,长度14),但不是::*::***::*::***(7×7,长度16)。
如果输入的不是自然数,则可以自由返回错误,产生不确定的行为,甚至无法终止。对于您提交的找到答案的方法的说明,不胜感激。
适用标准漏洞限制:没有额外的输入,没有Web请求,输出/返回值必须正好是答案,而不是:and *等的无限随机流。