查找最长的连续数字


15

简单的挑战:给定一系列正整数,找到数字中包含最长连续数字的数字。俩?允许运行中的数字环绕可能的值(0123456789)并向后运行。因此234589012和和5432109都是连续数字的有效游程(但3456765也不行,321090123因为游程必须始终在同一方向,尽管3456765可以将其视为两个游程:34567765)。如果是平局,则返回第一个。

测试用例:

Input:  [3274569283, 387652323, 23987654323648, 2345687913624]
Output: 23987654323648 
        (The run is 98765432; run length: 8)

Input:  [123012363672023, 098761766325432, 15890123456765]
Output: 15890123456765
        (The run is 8901234567; run length: 10)

Input:  [43, 19, 456]
Output: 456

Input:  [5, 9, 0]
Output: 5

Input:  [71232107, 7012347]
Output: 7012347

Input:  [1234, 32109876]
Output: 32109876

Input:  [9090, 123]
Output: 123

笔记:

  • 输入中至少会有一个数字。
  • 输入数字可以包含前导零。
  • 输入和输出可以采用任何合理的格式。因此输入数字可以当作字符串,数字/字符列表...
  • 只要打印数字,输出就可以包含尾部和/或前导空格和换行符。
  • 这是,所以每种语言中最短的程序/功能可能会获胜!


可以肯定的是,列表本身无法包装,对吗?(我误解了数字换行为列表换行),所以[7,8,1,6]最大运行次数[7,8]不是[6,7,8],是吗?
乔纳森·艾伦

1
@JonathanAllan是的,78在这种情况下,最大运行量是。
查理

Answers:


4

果冻,18字节

I9,-;N¤yŒgỊS€ṀµÐṀḢ

在线尝试!

取并返回为数字列表,以保留前导零。


类似的问题,以我的-尝试这个出来的大小(我相信它会返回错误的结果-我认为它作为一个测试案例只是要确定)。
乔纳森·艾伦

@JonathanAllan我认为这是正确的输出?(3210第一个数字是btw)
暴民埃里克(Erik the Outgolfer

啊哎呀,这个,不好意思!
乔纳森·艾伦

@JonathanAllan哦,我明白您的意思了……可能是因为A那里的原因。
暴民埃里克(Erik the Outgolfer)'17年


3

的JavaScript(ES6),104个 102 98字节

将输入作为数字列表。返回最好的一个。

a=>a.map(s=>s.map(n=>(i=(d=(x-(x=n)+11)%10)&&d-2?0:d-p?(p=d,1):i+1)>j&&(r=s,j=i),p=x=-10),j=-1)&&r

测试用例


3

果冻 18 16  15 字节

I%⁵Œg%8ċ€1ṀµÐṀḢ

一元链接,它获取一个数字列表,并返回最左边的数字,其中包含所述的最大游程。

在线尝试!或查看测试套件(进行处理以使I / O看起来像问题中的样子)。

怎么样?

I%⁵Œg%8ċ€1ṀµÐṀḢ - Link: list of lists of integers (digits) from [0-9]
           µÐṀ  - keep elements for which the link to the left is maximal:
I               -   incremental differences (i.e. [a2-a1, a3-a2, ...])
  ⁵             -   literal 10
 %              -   modulo by (i.e. [(a2-a1)%10, (a3-a2)%10, ...])
                -     this equates deltas of -9 and -1 with 1 and 9 respectively
   Œg           -   group runs of equal elements
     %8         -   modulo by 8; vectorised (9s become 1s, others unaffected)
       ċ€1      -   count number of 1s in €ach group
          Ṁ     -   maximum
              Ḣ - head (get the first one of those that were maximal)

V€不确定,您可能必须计算前导零。
暴民埃里克(Erik the Outgolfer)'17年

那确实算出了输入的前导零,但是我看到我们可能会列出数字列表……
Jonathan Allan

我认为您应该支持前导零。
暴民埃里克(Erik the Outgolfer)'17年

我确实支持前导零
乔纳森·艾伦

1
我读为“那不算数...”
Egg the Outgolfer '17

2

Python 2,118字节

列出数字列表a; 返回其列表之一。

lambda a:max(a,key=lambda l:len(max(re.findall('1+|9*',`[(x-y)%10for x,y in zip(l,l[1:])]`[1::3]),key=len)))
import re

在线尝试!


输入失败[[9,0,9,0],[1,2,3]]
Zgarb

@Zgarb糟糕,您是对的。回到旧版本,我去了。
林恩

1

外壳,20字节

←Ö¤<(→Of€1†%8gẊo%10-

获取并返回数字列表的列表。 在线尝试!

说明

←Ö¤<(→Of€1†%8gẊo%10-  Implicit input.
←                     Return first element of
 Ö                    the input sorted in a stable manner
   <                  in descending order
  ¤ (                 with respect to the following function:
                       Argument is list of digits, say [5,2,1,0,9,1,0].
                   -   Differences
               o%10    mod 10
              Ẋ        of all adjacent pairs: [7,9,9,9,2,1]
             g         Group adjacent equal elements: [[7],[9,9,9],[2],[1]]
          †%8          Vectorized mod 8: [[7],[1,1,1],[2],[1]]
       f€1             Keep those runs where 1 occurs: [[1,1,1],[1]]
      O                Sort in ascending order: [[1],[1,1,1]]
     →                 Take last element (gives [] on empty list): [1,1,1]
                       This is a list of 1s with length one less than
                       the longest run of consecutive digits.

1

MATLAB,130字节

接受输入到数组,列差的数组[X(2)-X(1),...,X(n)-X(n-1)],检查数组中最频繁的值(1升序-否则为1),获取最频繁值的索引或-9乘以最频繁值的索引(-9以升序出现,否则为9),找到连续的索引(即其差等于1)并将其求和请,因为已经晚了。输出最大。

a=input('')
t=[]
for i=1:numel(a)
b=diff(num2str(a(i))-'0')
c=mode(b)
t=[t sum(diff(find(b==c|b==-9*c))==1)]
end
[t,I]=max(t),a(I)

在线尝试!

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.