Tìm các chữ số liên tiếp dài nhất


15

Thử thách đơn giản: đưa ra một loạt các số nguyên dương, tìm số chứa trong số các chữ số của nó các chữ số liên tiếp dài nhất. Bí quyết? Nó được phép cho các chữ số trong các lần chạy để bao quanh các giá trị có thể ( 0123456789) và chạy ngược lại. Vì vậy, cả hai 2345, 890125432109đang chạy hợp lệ của chữ số liên tiếp (nhưng không phải 3456765và cũng không 321090123như thời gian phải luôn theo cùng một hướng, mặc dù3456765 có thể được coi là hai chạy: 34567765). Trong trường hợp quan hệ, trả lại cái đầu tiên.

Các trường hợp thử nghiệm:

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

Ghi chú:

  • Sẽ có ít nhất một số trong đầu vào.
  • Số đầu vào có thể chứa các số 0 đứng đầu.
  • Đầu vào và đầu ra có thể ở bất kỳ định dạng hợp lý . Vì vậy, số đầu vào có thể được lấy dưới dạng chuỗi, danh sách các chữ số / ký tự ...
  • Đầu ra có thể chứa dấu và / hoặc khoảng trắng hàng đầu và dòng mới miễn là số được in.
  • Đây là , vì vậy có thể chương trình / chức năng ngắn nhất cho mỗi ngôn ngữ sẽ giành chiến thắng!


Chỉ để chắc chắn, danh sách không thể bao bọc, phải không? (Tôi đã hiểu nhầm gói chữ số là gói danh sách) vì vậy [7,8,1,6]có một bước chạy tối đa [7,8]hơn là [6,7,8], có?
Jonathan Allan

1
@Jonathan ALLan có, chạy tối đa là 78trong trường hợp đó.
Charlie

Câu trả lời:


4

Thạch , 18 byte

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

Hãy thử trực tuyến!

Lấy và trả về dưới dạng danh sách các chữ số để bảo toàn các số 0 đứng đầu.


Vấn đề tương tự như tôi - cố gắng này ra cho kích thước (tôi tin rằng nó sẽ trả về kết quả sai - Tôi đã đề nghị nó như là một trường hợp thử nghiệm chỉ để đảm bảo).
Jonathan Allan

@Jonathan ALLan Tôi nghĩ đó là đầu ra đúng? (có 3210số btw đầu tiên)
Erik the Outgolfer

Ah oops, cái này , xin lỗi!
Jonathan Allan

@Jonathan ALLan Tôi hiểu ý của bạn ... có lẽ là do Acó trong đó.
Erik the Outgolfer

@Jonathan ALLan Đã sửa.
Erik the Outgolfer

3

JavaScript (ES6), 104 102 98 byte

Lấy đầu vào là một danh sách các danh sách các chữ số. Trả về cái tốt nhất

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

Các trường hợp thử nghiệm


3

Thạch ,  18 16  15 byte

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

Một liên kết đơn âm lấy một danh sách các danh sách các chữ số và trả về một liên kết ngoài cùng bên trái có chứa một lần chạy tối đa như được mô tả.

Hãy thử trực tuyến! hoặc xem một bộ thử nghiệm (với việc xử lý để làm cho I / O trông giống như trong câu hỏi).

Làm sao?

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€không chắc chắn về điều đó, bạn có thể phải đếm số 0 hàng đầu.
Erik the Outgolfer

Điều đó không tính các số 0 đứng đầu của đầu vào sting, tuy nhiên tôi thấy chúng ta có thể lấy danh sách các danh sách các chữ số ...
Jonathan Allan

Tôi nghĩ bạn nên hỗ trợ các số 0 hàng đầu.
Erik the Outgolfer

Tôi hỗ trợ các số không hàng đầu
Jonathan Allan

1
Tôi đọc nó là "Điều đó không được tính ..."
Erik the Outgolfer

2

Python 2 , 118 byte

Đưa ra một danh sách các danh sách các chữ số a; trả về một trong những danh sách của nó

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

Hãy thử trực tuyến!


Thất bại trong đầu vào [[9,0,9,0],[1,2,3]].
Zgarb

@Zgarb Rất tiếc, bạn đã đúng. Quay lại với một phiên bản cũ tôi đi.
Lynn

1

Husk , 20 byte

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

Lấy và trả về một danh sách các danh sách các chữ số. Hãy thử trực tuyến!

Giải trình

←Ö¤<(→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 byte

Đưa đầu vào vào mảng, mảng chênh lệch cột [X (2) -X (1), ..., X (n) -X (n-1)], kiểm tra giá trị thường xuyên nhất trong mảng (thứ tự tăng dần 1 - 1 cách khác), lấy chỉ số cho giá trị thường xuyên nhất hoặc -9 nhân với giá trị thường xuyên nhất (-9 xảy ra theo thứ tự tăng dần, 9 nếu không), tìm các chỉ số liên tiếp (nghĩa là có chênh lệch bằng 1) và tính tổng làm ơn, vì đã muộn Sản lượng lớn nhất.

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)

Hãy thử trực tuyến!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.