ค้นหาตัวเลขที่ต่อเนื่องยาวนานที่สุด


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

หมายเหตุ:

  • จะมีอย่างน้อยหนึ่งหมายเลขในอินพุต
  • หมายเลขอินพุตสามารถมีเลขศูนย์นำหน้า
  • input และ output สามารถอยู่ในรูปแบบที่เหมาะสมใดดังนั้นตัวเลขอินพุตสามารถถูกใช้เป็นสตริงรายการของตัวเลข / ตัวอักษร ...
  • เอาต์พุตสามารถมีส่วนท้ายและ / หรือช่องว่างนำหน้าและบรรทัดใหม่ตราบใดที่พิมพ์ตัวเลข
  • นี่คือดังนั้นโปรแกรม / ฟังก์ชั่นที่สั้นที่สุดสำหรับแต่ละภาษาจะชนะ!

ที่เกี่ยวข้อง
Charlie

เพียงเพื่อให้แน่ใจว่ารายการตัวเองไม่สามารถห่อใช่ไหม? (ฉันเข้าใจผิดว่าการตัดหลักเป็นการห่อรายการ) ดังนั้นจึง[7,8,1,6]มีการใช้งาน[7,8]มากที่สุดแทนที่จะ[6,7,8]ใช่ใช่หรือไม่
Jonathan Allan

1
@JanathanAllan ใช่การวิ่งสูงสุดนั้น78ในกรณีนั้น
ชาร์ลี

คำตอบ:


4

เยลลี่ขนาด 18 ไบต์

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

ลองออนไลน์!

ใช้และส่งกลับเป็นรายการของตัวเลขเพื่อรักษาศูนย์นำหน้า


ปัญหาคล้ายกับระเบิด - ลองนี้ออกขนาด (ผมเชื่อว่ามันจะส่งกลับผลผิด - ผมเคยแนะนำว่ามันเป็นกรณีทดสอบเพียงเพื่อให้แน่ใจ)
โจนาธานอัลลัน

@Janathan ทั้งหมดฉันคิดว่านั่นเป็นผลลัพธ์ที่ถูกต้อง? (มี3210หมายเลขแรกคือ btw)
Erik the Outgolfer

อ๊ะโอ้นี่ขอโทษ!
Jonathan Allan

@JanathanAllan โอ้ฉันเห็นสิ่งที่คุณหมายถึง ... อาจเป็นเพราะ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ṀµÐṀḢ

ลิงก์ monadic ที่แสดงรายการของตัวเลขและส่งคืนค่าซ้ายสุดที่มีการรันสูงสุดตามที่อธิบายไว้

ลองออนไลน์! หรือดูชุดทดสอบ (ที่มีการประมวลผลเพื่อทำให้ I / O ดูเหมือนเป็นคำถาม)

อย่างไร?

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

นั่นจะนับศูนย์นำของการต่อยอย่างไรก็ตามฉันเห็นว่าเราอาจใช้รายการของตัวเลข ...
Jonathan Allan

ฉันคิดว่าคุณควรจะสนับสนุนศูนย์นำ
Erik the Outgolfer

ฉันสนับสนุนเลขศูนย์นำหน้า
Jonathan Allan

1
ฉันอ่านมันว่า "ไม่นับ ... "
Erik the Outgolfer

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

@Zarb โอ๊ะคุณพูดถูก กลับไปเป็นเวอร์ชั่นเก่านะ
ลินน์

1

Husk , 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)

ลองออนไลน์!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.