Знайдіть найдовший цикл послідовних цифр


15

Просте завдання: задавши ряд натуральних цілих чисел, знайдіть число, яке містить серед його цифр найдовший цикл послідовних цифр. Трюк? Дозволяється, щоб цифри в прогонах оберталися навколо можливих значень ( 0123456789) і рухалися назад. Таким чином, обидва 2345, 89012і 5432109є дійсними пробігами послідовних цифр (але ні, 3456765ні 321090123тому, що пробіг повинен бути завжди в одному напрямку, хоча 3456765може розглядатися як два прогони: 34567і 765). У випадку зв’язків поверніть перший.

Тестові приклади:

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в цьому випадку.
Чарлі

Відповіді:


4

Желе , 18 байт

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

Спробуйте в Інтернеті!

Бере та повертає як список цифр, щоб зберегти первісні нулі.


Подібна проблема, як у мене - спробуйте це для розміру (я вважаю, що це повертає неправильний результат - я запропонував це як тестовий випадок, щоб бути впевненим).
Джонатан Аллан

@JonathanAllan Я думаю, що це правильний вихід? (є 3210в першому номері btw)
Ерік Вигнавець

Ах ой, це , вибачте!
Джонатан Аллан

@JonathanAllan О, я бачу, що ви маєте на увазі ... це, мабуть, через те, що Aтам.
Erik the Outgolfer

@JonathanAllan Виправлено.
Erik the Outgolfer

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%⁵Œ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

Я підтримую ведучі нулі
Джонатан Аллан

1
Я читав це як "Це не
рахується

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 На жаль, ви праві. Назад до старої версії я переходжу.
Лінн

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)

Спробуйте в Інтернеті!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.