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.