风味文字
基于堆栈的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 *
等的无限随机流。