Temukan angka terpanjang berturut-turut

15

Tantangan sederhana: diberi serangkaian angka bilangan bulat positif, temukan angka yang berisi di antara digit-digitnya, angka terpanjang dari berturut-turut. Trik-nya? Diijinkan untuk digit dalam proses untuk membungkus nilai yang mungkin ( 0123456789) dan untuk berlari mundur. Jadi keduanya 2345, 89012dan 5432109berjalan yang valid dari angka berurutan (tetapi tidak 3456765atau tidak 321090123karena lari harus selalu dalam arah yang sama, meskipun 3456765dapat dianggap sebagai dua berjalan: 34567dan 765). Dalam kasus ikatan, kembalikan yang pertama.

Kasus uji:

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

Catatan:

  • Setidaknya akan ada satu nomor dalam input.
  • Nomor input dapat berisi angka nol di depan.
  • Input dan output dapat dalam format apa pun yang masuk akal . Jadi angka input dapat diambil sebagai string, daftar digit / karakter ...
  • Output dapat berisi trailing dan / atau spasi putih dan baris baru selama nomor tersebut dicetak.
  • Ini adalah , jadi semoga program / fungsi terpendek untuk setiap bahasa menang!
Charlie
sumber
Terkait .
Charlie
Hanya untuk memastikan, daftar itu sendiri tidak dapat dibungkus, bukan? (Saya salah paham pembungkus digit sebagai pembungkus daftar), jadi [7,8,1,6]jalankan maksimal [7,8]bukan [6,7,8], ya?
Jonathan Allan
1
@ Jonathan Allan ya, proses maksimal 78dalam hal ini.
Charlie

Jawaban:

4

Jelly , 18 byte

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

Cobalah online!

Mengambil dan kembali sebagai daftar angka untuk mempertahankan nol terkemuka.

Erik the Outgolfer
sumber
Masalah serupa dengan saya - coba ini untuk ukuran (saya percaya ini mengembalikan hasil yang salah - saya sudah menyarankan itu sebagai kasus uji hanya untuk memastikan).
Jonathan Allan
@ Jonathan Allan Saya pikir itu output yang tepat? (ada 3210di btw nomor pertama)
Erik the Outgolfer
Ah oops, ini , maaf!
Jonathan Allan
@ JonathanAllan Oh saya mengerti maksud Anda ... mungkin karena Aada di sana.
Erik the Outgolfer
@ Jonathan Allan Diperbaiki.
Erik the Outgolfer
3

JavaScript (ES6), 104 102 98 byte

Mengambil input sebagai daftar daftar digit. Mengembalikan yang terbaik.

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

Uji kasus

Arnauld
sumber
3

Jelly ,  18 16  15 byte

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

Tautan monadik yang mengambil daftar daftar digit, dan mengembalikan yang paling kiri yang berisi proses maksimal seperti yang dijelaskan.

Cobalah online! atau lihat a test suite (dengan pemrosesan untuk membuat I / O terlihat seperti itu dalam pertanyaan).

Bagaimana?

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)
Jonathan Allan
sumber
V€tidak yakin tentang itu, Anda mungkin harus menghitung nol terkemuka.
Erik the Outgolfer
Itu tidak menghitung angka nol dari input sengatan, namun saya melihat kita dapat mengambil daftar daftar angka ...
Jonathan Allan
Saya pikir Anda harus mendukung nol terkemuka.
Erik the Outgolfer
Saya mendukung angka nol di depan
Jonathan Allan
1
Saya membacanya sebagai "Itu tidak masuk hitungan ..."
Erik the Outgolfer
2

Python 2 , 118 byte

Mengambil daftar daftar digit a; mengembalikan salah satu daftar.

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

Cobalah online!

Lynn
sumber
Gagal input [[9,0,9,0],[1,2,3]].
Zgarb
@ Zgarb Ups, kau benar. Kembali ke versi lama saya pergi.
Lynn
1

Sekam , 20 byte

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

Mengambil dan mengembalikan daftar daftar digit. Cobalah online!

Penjelasan

←Ö¤<(→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.
Zgarb
sumber
1

MATLAB, 130 byte

Ambil input ke array, array perbedaan kolom [X (2) -X (1), ..., X (n) -X (n-1)], periksa nilai yang paling sering dalam array (1 urutan naik - 1 sebaliknya), dapatkan indeks untuk nilai yang paling sering atau -9 dikalikan dengan nilai yang paling sering (-9 terjadi dalam urutan naik, 9 sebaliknya), cari indeks berurutan (yaitu selisihnya sama dengan 1) dan jumlahkan tolong, karena sudah terlambat. Keluaran terbesar.

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)

Cobalah online!

J Doe
sumber