Birbirini izleyen en uzun basamak sayısını bulun


15

Basit meydan okuma: bir dizi pozitif tamsayı sayısı verildiğinde, basamakları arasında ardışık basamakların en uzun çalışmasını içeren sayıyı bulun. Numara? Çalışmalardaki basamakların olası değerlerin ( 0123456789) etrafına sarılmasına ve geriye doğru çalışmasına izin verilir . Hem Yani 2345, 89012ve 5432109ardışık rakam (ancak geçerli ishal olan 3456765ne de 321090123olsa koşmak, hep aynı yönde olması gerektiği gibi 3456765iki ishal olarak kabul edilebilir: 34567ve 765). Bağlar durumunda, ilkini iade edin.

Test senaryoları:

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

Notlar:

  • Girişte en az bir sayı olacaktır.
  • Giriş numaraları önde gelen sıfırlar içerebilir.
  • Giriş ve çıkış herhangi bir makul formatta olabilir . Böylece giriş numaraları dize, rakam / karakter listesi olarak alınabilir ...
  • Çıktı, sayı yazdırıldığı sürece izleyen ve / veya önde gelen boşluklar ve yeni satırlar içerebilir.
  • Bu , bu yüzden her dil için en kısa program / işlev kazanabilir!


Emin olmak gerekirse, listenin kendisi sarılmaz, değil mi? Böylece (ı liste sarma olarak basamaklı sarma yanlış) [7,8,1,6]bir maksimal ait tükendi [7,8]ziyade [6,7,8]evet?
— Jonathan Allan

1
@JonathanAllan evet, maksimum çalışma 78bu durumda.
— Charlie

Yanıtlar:


4

Jöle , 18 bayt

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

Çevrimiçi deneyin!

Baştaki sıfırları korumak için basamak listesi olarak alır ve geri döner.


Benim için benzer bir sorun - boyutu için bunu deneyin (yanlış sonucu döndürdüğüne inanıyorum - sadece emin olmak için bir test durumu olarak önerdim).
— Jonathan Allan

@JonathanAllan Bence bu doğru çıktı mı? ( 3210ilk sayı
— btw'de var

Ayy Ah bu , üzgünüm!
— Jonathan Allan

@JonathanAllan Ne demek istediğini anlıyorum ... muhtemelen içerideki yüzünden A.
— Outgolfer Erik

@JonathanAllan Düzeltildi.
— Outgolfer Erik

3

JavaScript (ES6), 104 102 98 bayt

Girdileri rakam listelerinin listesi olarak alır. En iyisini döndürür.

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

Test senaryoları


3

Jöle ,  18 16  15 bayt

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

Rakam listelerinin listesini alan ve en soldaki olanı açıklandığı gibi maksimum çalışma içeren dönen monadik bir bağlantı.

Çevrimiçi deneyin! veya bir test takımına bakın(G / Ç'nin söz konusu gibi görünmesini sağlamak için işlenir).

Nasıl?

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€Bundan emin değilseniz, baştaki sıfırları saymanız gerekebilir.
— Outgolfer Erik

Bu, sokma girişinin önde gelen sıfırlarını sayıyor, ancak görüyorum ki basamak listelerini alabiliriz ...
— Jonathan Allan

Bence önde gelen sıfırları desteklemelisin.
— Outgolfer Erik

Baştaki sıfırları destekliyorum
— Jonathan Allan

1
Bunu "Bu sayılmaz ..." olarak okudum
— Outgolfer Erik

2

Python 2 , 118 bayt

Rakam listelerinin listesini alır a; listelerinden birini döndürür.

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

Çevrimiçi deneyin!


Giriş başarısız [[9,0,9,0],[1,2,3]].
— Zgarb

@Zgarb Hata! Haklısın. Eski bir versiyona geri dönüyorum.
— Lynn

1

Kabuk , 20 bayt

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

Rakam listelerinin listesini alır ve döndürür. Çevrimiçi deneyin!

açıklama

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

Girdiyi diziye, dizi sütun farklılıklarını [X (2) -X (1), ..., X (n) -X (n-1)]) alın, dizideki en sık değeri (1 artan düzen - 1), en sık kullanılan değerin veya -9 en sık değerin (-9 artan sırada gerçekleşir, aksi halde 9 oluşur) için dizini alın, ardışık indeksleri bulun (yani farkı 1'e eşittir) ve toplayın lütfen, çünkü geç oldu. En büyük çıktıyı alın.

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)

Çevrimiçi deneyin!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.