扩展速记递增整数序列


18

给定以简写递增整数序列格式输入的数字列表,请完整输出该序列。

速记递增整数序列格式的工作原理是找到每个数字n ,其位数比前面的数字m少。以dn中的位数,将m的最后d位替换为n的所有数字 。这是一个示例输入:

123 45 6 7 89 200

应用替换规则,我们首先将45变成145,因为45 <123:

123 145 6 7 89 200

重复应用相同的规则,将变为:

123 145 146 7 89 200
123 145 146 147 89 200
123 145 146 147 189 200

现在对序列进行了排序(没有适用规则的数字),因此这是最终输出。

您可能会认为

  • 尽可能使用速记符号。例如,输入将为 12 3,永不12 13

  • 数字永远不会减少,而保持相同的数字位数。例如,输入永远不会是333 222

  • 应用简写规则将永远不会导致该数字仍然小于序列中的前一个数字。例如,输入永远不会是 123 12

  • 数字将始终为正整数,并且永远不包含前导0(如果使用字符串格式)。

  • 完整的扩展序列将永远不会包含重复的数字。(但是,速记顺序可能;例如10 1 20 1-> 10 11 20 21。)

  • 输入中至少有一个数字。

输入和输出可以是数字/字符串的列表/数组,也可以是单个字符串,其元素之间用任何非数字分隔。

由于这是,因此以字节为单位的最短代码将获胜。

测试用例,输入和输出交替出现:

1 2 3 10 1 2 20 5 100 200 10 3 5 26 9 99 999 9999
1 2 3 10 11 12 20 25 100 200 210 213 215 226 229 299 999 9999
223 1184 334 441 5 927 2073 589 3022 82 390 5 9
223 1184 1334 1441 1445 1927 2073 2589 3022 3082 3390 3395 3399
5 10 5 20 5 30 5 40 5 50 5
5 10 15 20 25 30 35 40 45 50 55
7 8 9 70 80 90 700 800 900 7000 8000 9000
7 8 9 70 80 90 700 800 900 7000 8000 9000
42
42

挑战是相当古老的,但是a)输入可以为空吗?b)输入内容只能包含一个数字吗?
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer我继续说,输入中将有≥1个数字。
Doorknob

Answers:


7

果冻,7个字节

DUṛ"\UḌ

在线尝试!验证所有测试用例

怎么运行的

DUṛ"\UḌ  Main link. Input: A (list of integers)

D        Convert each integer to a list of its base 10 digits.
 U       Reverse each digit list.
    \    Do a cumulative reduce, applying the dyadic link to the left:
   "       For each pair of corresponding digits:
  ṛ          Select the right one.
           Vectorization leaves digits that do not have a counterpart untouched.
     U   Reverse the resulting digit arrays.
      Ḍ  Convert from base 10 to integer.

5

Javascript,45 42个字节

感谢@Neil关闭3个字节。

a=>a.map(x=>z=z.slice(0,-x.length)+x,z='')

上面的函数需要一个字符串数组。


1
使用z=z.slice(0,-x.length)+x,z=''(或您选择的变量名称)保存4个字节。
尼尔

@尼尔 好一个!我知道应该有办法做到
删除了

(很抱歉,您误记了保存。)而且,由于不需要比原来s=>s.split` `.map(短2个字节(这次我再次检查了)的字符串版本,因此不需要s=>s.replace(/\d+/g,
尼尔

@尼尔 有效点。我只是把它留在那里,因为回答时我的第一个目标是……但你是对的
删除

1

视网膜,45字节

+`(?=(?<1>\d)+)(?<=(\d)(?(1)x)(?<-1>\d)+ )
$1

使用平衡组来计算花费很多的数字。尚未找到更好的方法,但我对此感兴趣。

在这里在线尝试。


0

Gema,35个字符

<D>=@set{p;@fill-right{${p;};$0}}$p

输入:数字之间用数字分隔的字符串,输出字符串。

样品运行:

bash-4.3$ gema '<D>=@set{p;@fill-right{${p;};$0}}$p' <<< '123 45 6 7 89 200'
123 145 146 147 189 200

0

Ruby,39个字符

->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}

输入:字符串数组,输出:字符串数组。

样品运行:

2.1.5 :001 > ->a{l='';a.map{|c|l=l[0..-c.size-1]+c}}[%w{123 45 6 7 89 200}]
 => ["123", "145", "146", "147", "189", "200"] 

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.