教授的基地楼号转换器


12

这位坚果数学教授希望使用一种系统来对他们的所有研究进行编码,该系统可以欺骗甚至最灵活的竞争对手!

为此,教授决定不仅改变他们正在写的数字的基数,而且改变该数字中的每个数字,根据数字所处的位置(从右边开始,从1开始)。例如:

数字0有一位数字,因此以基数1:0表示

数字1的底数为10,但是在我们教授的系统中无效。第一位仅保留基数1的位数!这意味着必须将其撞到允许以2为底的第二位置:10

数字2要求至少以3为底数:100

但是现在可以通过更改第二位的数字来写数字3:110

和4这样:200

这里有一些更多的例子可以帮助您理解:

5:210

6:1000

7:1010

8:1100

9:1110

10:1200

11:1210

12:2000

13:2010

14:2100

15:2110

16:2200

17:2210

18:3000

使用这个系统,教授的笔记对除了他们之外的任何人都没有意义,他们最终可以掌控整个世界!!!晚上睡得好。

当然,编码方法必须尽可能模糊。


您的任务是编写10个代码段,每个代码段代表基数10的一位

0 1 2 3 4 5 6 7 8 9

当按要转换的数字的顺序组合时,将产生一个写在教授的医学编号系统中的数字(输出方法可以选择,但必须是人类可读的数字,仅使用数字0-9)

例如,如果我的片段是:

0 =猴子1 =示例,2 =代码,3 =高尔夫,9 =测试

然后

19 =示例测试-> 3010

20 = CODEMONKEY-> 3100

21 = CODEEXAMPLE-> 3110

22 = CODE-> 3200

23 = CODEGOLF-> 3210

不需要考虑输入的数字多于10位数字或负数,但是如果您想为其他数字编写代码,则会得到额外的荣誉。这是代码高尔夫,因此最短的答案(使用所有摘要的总字节总数)将获胜,并且不允许出现标准漏洞。

附录:在任何人开始以0为基数1中0的正确表示之前,我想提醒您,这位教授是坚果。忍受它。


1
注意:教授的系统也称为阶乘数系统
ETHproductions 2016年


@ETHproductions我从未说过教授的编码是好的
Joe Bloggs

@KritixiLithos谢谢你!我一直在寻找用作确认。
Joe Bloggs

4
欢迎来到PPCG,顺便说一句:-)
ETHproductions

Answers:


1

Mathematica(REPL环境),总共858个字节

这是数字9的86字节代码片段:

1;ValueQ@a||(a=0;b=3);a=10a+9;b++;FromDigits[a~IntegerDigits~MixedRadix@Range[b,1,-1]]

数字1到8的代码段相同,只是用适当的数字代替9之外。数字0的代码段相同,只是将+9其删除即可。

a~IntegerDigits~MixedRadix@Range[b,1,-1]计算的阶乘数系统数字的列表a,只要b至少与数字的数量一样大;FromDigits为了输出,将该数字列表转换为以10为基数的常规整数。(如果任何列表元素超过9,则会发生一些有趣的事情。)

在Mathematica的REPL环境中,可以使用分号终止计算,以抑制输出。因此,只会显示以分号分隔的链中的最后一个输出。我们递归地定义了a由代码片段指定的整数,并且还定义了b所需的阶乘系统位数的界限。ValueQ@a||(a=0;b=3)如果未初始化这些变量,则该命令将对其进行初始化(即,在第一个代码段中),否则将其保留;否则,将其保留。然后a=10a+9;b++执行递归。最后,最初1;是将代码片段粘合在一起:它将中间计算结果乘以1(无论如何我们从未见过)。


我喜欢分号滥用。
Joe Bloggs

0

Goruby,790 810 980

这是第二次尝试,基于这样一个事实,即基本上在任何外壳程序中,打印不带换行符(“ \ n”)的回车符(“ \ r”)都会覆盖先前打印的行,从而最终确保仅打印最后一位(即最终结果)显示。

这必须在shell中运行,例如ruby name_of_file.rb

它适用于长度不受限制的正数。

该代码是下面代码段的十份副本,X(在顶部)用0-9的数字代替,每个代码段一个。

->*t{n,d,o="X#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

也就是说,代表(例如)8的代码段看起来像:

->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}

挑战指出,片段需要进行“组合”以代表多位数的数字,因此,要将数字附加到数字上,只需将其放在数字末尾的方括号中即可。因此,数字103(十进制)将是:

->*t{n,d,o="1#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="0#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[->*t{n,d,o="8#{t}".toi,0,''
dw{n,r=n.dm d+=1;o.pr r.ts;n>0}
$>.fu
pr"\r",o
o}[]]]

你说的是数108
user75200
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.