การทำซ้ำที่ยาวที่สุดของตัวเลขหลักเดียว


17

ท้าทาย:

รับจำนวนเต็มบวกเอาท์พุทการเรียงลำดับเลขหลักเดียวที่ยาวที่สุดที่เกิดขึ้นอย่างน้อยสองครั้งและมีขอบเขตของตัวเลขอื่น (หรือจุดเริ่มต้น / สิ้นสุดของจำนวนเต็ม)

ตัวอย่าง:

อินพุต: 7888885466662716666
การเรียงลำดับที่ยาวที่สุดของหลักเดียวคือ88888( 7[88888]5466662716666) ที่มีความยาว 5 อย่างไรก็ตามการเรียงลำดับนี้จะเกิดขึ้นเพียงครั้งเดียวในจำนวนเต็ม
แต่ผลลัพธ์ของอินพุต7888885466662716666ควรเป็น6666( 78888854[6666]271[6666]) เนื่องจากเกิดขึ้น (อย่างน้อย) สองครั้ง

กฏท้าทาย:

  • ความยาวขององค์ประกอบจะมีความสำคัญมากกว่าจำนวนครั้งที่มันเกิดขึ้น (เช่นมีอินพุต8888858888866656665666เราเอาต์พุต88888( [88888]5[88888]66656665666; ความยาว 5 เกิดขึ้นสองครั้ง) และไม่ใช่666( 88888588888[666]5[666]5[666]; ความยาว 3 เกิดขึ้นสามครั้ง)
  • หากความยาวของหลายองค์ประกอบเท่ากันเราจะแสดงผลลัพธ์ที่มีการนับเหตุการณ์มากที่สุด เช่นกับอินพุท3331113331119111เราเอาท์พุท111( 333[111]333[111]9[111]; ความยาว 3, เกิดขึ้นสามครั้ง), และไม่ใช่333( [333]111[333]1119111; ความยาว 3 ด้วย, แต่เกิดขึ้นสองครั้ง)
  • หากจำนวนการเกิดและความยาวของหลายองค์ประกอบเท่ากันคุณสามารถส่งออกอย่างใดอย่างหนึ่งของพวกเขาหรือทั้งหมด (ในลำดับใด ๆ ) เช่นอินพุต777333777333, เอาต์พุตที่เป็นไปได้คือ: 777; 333; [777, 333]; [333, 777]หรือ
  • ลำดับจะต้องมีขอบเขตของตัวเลขอื่น ๆ (หรือจุดเริ่มต้น / สิ้นสุดของจำนวนเต็ม) นั่นคือการป้อนข้อมูล122222233433ผลลัพธ์คือ33( 1222222[33]4[33]; ความยาว 2, เกิดขึ้นสองครั้ง) และไม่ใช่222( 1[222][222]33433, ความยาว 3, เกิดขึ้นสองครั้งโดยที่ไม่ถูกต้องทั้งคู่)
    • สิ่งนี้ใช้กับตัวเลขทั้งหมดที่นับรวมกับตัวนับเหตุการณ์ นั่นคือการป้อนข้อมูล811774177781382ผลลัพธ์คือ8( [8]117741777[8]13[8]2; ความยาว 1, เกิดขึ้นสามครั้ง) และไม่ใช่77( 811[77]41[77]781382/ 811[77]417[77]81382; ความยาว 2, เกิดขึ้นสองครั้งด้วยหนึ่งครั้งไม่ถูกต้อง) หรือ1( 8[1][1]774[1]7778[1]382; ความยาว 1, เกิดขึ้นสี่ครั้งโดยมีสองครั้งไม่ถูกต้อง)
  • คุณสามารถสมมติว่าการป้อนข้อมูลจะไม่มีตัวเลขใด ๆ0(มันจะตรงกับ[1-9]+) (นี่คือเพื่อหลีกเลี่ยงการจัดการกับกรณีทดสอบเช่น10002000ที่ควรส่งออก000ซึ่งภาษาส่วนใหญ่จะส่งออก0โดยค่าเริ่มต้น)
  • คุณสามารถสมมติว่าอินพุตจะมีเอาต์พุตที่ถูกต้องอย่างน้อยหนึ่งรายการเสมอ
  • I / O มีความยืดหยุ่น สามารถเป็นรายการ / อาร์เรย์ / สตรีมของตัวเลข / ไบต์ / ตัวอักษรหรือเป็นสตริงแทนที่จะเป็นจำนวนเต็มเดียว

กฎทั่วไป:

  • นี่คือดังนั้นคำตอบที่สั้นที่สุดในหน่วยไบต์ชนะ
    อย่าปล่อยให้ภาษาโค้ดกอล์ฟกีดกันคุณจากการโพสต์คำตอบด้วยภาษาที่ไม่ได้เข้ารหัส พยายามหาคำตอบสั้น ๆ ที่เป็นไปได้สำหรับภาษาโปรแกรม 'ใด ๆ '
  • กฎมาตรฐานจะใช้สำหรับคำตอบของคุณดังนั้นคุณจึงได้รับอนุญาตให้ใช้ STDIN / STDOUT ฟังก์ชั่น / วิธีการที่มีพารามิเตอร์ที่เหมาะสมและชนิดผลตอบแทนโปรแกรมเต็มรูปแบบ การโทรของคุณ
  • ช่องโหว่เริ่มต้นเป็นสิ่งต้องห้าม
  • หากเป็นไปได้โปรดเพิ่มลิงค์พร้อมทดสอบรหัสของคุณ
  • นอกจากนี้ขอแนะนำให้เพิ่มคำอธิบายสำหรับคำตอบของคุณ

กรณีทดสอบ:

Input:  7888885466662716666 / [7,8,8,8,8,8,5,4,6,6,6,6,2,7,1,6,6,6,6]
Output: 6666                / [6,6,6,6]

Input:  3331113331119111 / [3,3,3,1,1,1,3,3,3,1,1,1,9,1,1,1]
Output: 111              / [1,1,1]

Input:            777333777333                   / [7,7,7,3,3,3,7,7,7,3,3,3]
Possible outputs: 777; 333; [777,333]; [333;777] / [7,7,7]; [3,3,3]; [[7,7,7],[3,3,3]]; [[3,3,3],[7,7,7]]

Input:  122222233433 / [1,2,2,2,2,2,2,3,3,4,3,3]
Output: 33           / [3,3]

Input:  811774177781382 / [8,1,1,7,7,4,1,7,7,7,8,1,3,8,2] 
Output: 8               / [8]

Input:  555153333551 / [5,5,5,1,5,3,3,3,3,5,5,1] 
Output: 1            / [1]

Input:            12321              / [1,2,3,2,1]
Possible outputs: 1; 2; [1,2]; [2,1] / [1]; [2]; [[1],[2]]; [[2],[1]]

Input:  944949949494999494 / [9,4,4,9,4,9,9,4,9,4,9,4,9,9,9,4,9,4]
Output: 4                  / [4]

Input:  8888858888866656665666 / [8,8,8,8,8,5,8,8,8,8,8,6,6,6,5,6,6,6,5,6,6,6]
Output: 88888                  / [8,8,8,8,8]

Input:  1112221112221111               / [1,1,1,2,2,2,1,1,1,2,2,2,1,1,1,1]
Output: 111; 222; [111,222]; [222,111] / [1,1,1]; [2,2,2]; [[1,1,1],[2,2,2]]; [[2,2,2],[1,1,1]]

Input:  911133111339339339339339 / [9,1,1,1,3,3,1,1,1,3,3,9,3,3,9,3,3,9,3,3,9,3,3,9]
Output: 111                      / [1,1,1]

1
8888858888866656665666กรณีทดสอบที่แนะนำ: หากฉันตีความความท้าทายอย่างถูกต้องทั้งโซลูชั่น Brachylog และ 05AB1E ล้มเหลว
Mr. Xcoder

@ Mr.Xcoder เพิ่มแล้วขอบคุณ
Kevin Cruijssen

@Annauld อืมมันจะเป็นหนึ่งในผู้ชนะต่อไปในความคิดของฉันเพราะมันเกิดขึ้นหลายครั้ง222เมื่อถูก จำกัด ด้วยจำนวนเต็มอื่น ๆ 1111ผมคิดว่าเราก็ไม่ควรนับการเกิดที่เป็นย่อยของ ดีกว่ารอ OP แม้ว่าแน่นอน
Mr. Xcoder

2
@Arnauld สำหรับ1112221112221111เหล่านี้เป็น subsequences 1111 (1)และจำนวนของพวกเขา111 (2), 222 (2), เนื่องจากเราเพียง 111แต่เอาท์พุทลำดับที่เกิดขึ้นอย่างน้อยสองครั้งที่ส่งออกสามารถเป็นหนึ่งใน: 222, [111,222], [222,111], (ดูกฎสี่สำหรับข้อมูลเพิ่มเติม.) โดยทั่วไป1111เท่านั้นที่เคยจะนับเป็น1111และไม่เป็น1และ111หรือและ11 11ฉันจะเพิ่มกรณีทดสอบของคุณ แต่ส่งออกเป็นอย่างใดอย่างหนึ่งหรือทั้งสองและ111 222
Kevin Cruijssen

คำตอบ:


6

05AB1E , 14 ไบต์

γТ1›ÏD€gZQÏ.M

ลองออนไลน์!

คำอธิบาย

γ                # group consecutive equal elements
 Т              # count the occurrence of each group among the list of groups
   1›Ï           # keep only groups with a count greater than 1
      D€gZQÏ     # keep only those with a length equal to the greatest length
            .M   # get the most common item

@ ไรลีย์: น่าเสียดายที่จะได้รับองค์ประกอบแรกซึ่งไม่จำเป็นต้องเป็นองค์ประกอบที่พบบ่อยที่สุด
Emigna

อ๊ะ .. ฉันพลาดกระสุนดังกล่าว
Riley

5

เยลลี่ 12 ไบต์

Œgœ-Q$LÐṀÆṃ'

ลองออนไลน์!

รุ่นก่อนหน้า - 14 ไบต์

ŒgŒQ¬TịƲLÐṀÆṃ'

ลองออนไลน์!

มันทำงานอย่างไร?

Œgœ-Q$LÐṀÆṃ' – Full program. Receives a list of digits as input.
Œg           – Group equal adjacent values.
  œ-Q$       – Multiset difference with itself deduplicate.
      LÐṀ    – Keep those that are maximal by length.
         Æṃ' – Mode. Returns the most common element(s).
-------------------------------------------------------------------------
ŒgŒQ¬TịƲLÐṀÆṃ' – Full program. Receives a list of digits as input.
Œg             – Group equal adjacent values.
  ŒQ           – Distinct sieve. Replace the first occurrences of each value by 1.
                 and the rest by 0. [1,2,3,2,3,2,5]ŒQ -> [1,1,1,0,0,0,1]       
    ¬T         – Negate and find the truthy indices.
      ịƲ       – Then index in the initial list of groups.
               – This discards the groups that only occur once.
        LÐṀ    – Find all those which are maximal by length.
           Æṃ' – And take the mode.

5

JavaScript (ES6), 79 73 68 ไบต์

รับอินพุตเป็นสตริง ส่งคืนจำนวนเต็ม

s=>[...s,r=q=0].map(o=d=>q=s^d?o[!o[q]|r[q.length]?q:r=q]=s=d:q+d)|r

ลองออนไลน์!

แสดงความคิดเห็น

s =>                      // s = input string, also used as the current digit
  [ ...s,                 // split s into a list of digit characters
    r =                   // r is the final result
    q =                   // q is the current digit sequence
    0                     // append a final dummy entry to force the processing of the last
  ]                       // sequence
  .map(o =                // o is an object used to keep track of encountered sequences
       d =>               // for each digit d in the array defined above:
    q =                   //   update q:
      s ^ d ?             //     if d is not equal to the current digit:
        o[                //       this statement will ultimately update o[q]
          !o[q] |         //         if q has not been previously seen
          r[q.length] ?   //         or the best result is longer than q:
            q             //           leave r unchanged
          :               //         else:
            r = q         //           set r to q
        ] = s = d         //       reset q to d, set the current digit to d
                          //       and mark q as encountered by setting o[q]
      :                   //     else:
        q + d             //       append d to q
  ) | r                   // end of map(); return r, coerced to an integer

บางทีฉันกำลังพูดบางสิ่งที่ไม่ถูกต้องที่นี่ แต่เนื่องจาก...sแปลงอินพุตเป็นรายการของตัวละครหลักมันไม่สั้นไปกว่าที่จะรับอินพุตเป็นรายการของตัวละครหลักเพื่อเริ่มต้นแทนที่จะเป็นสตริงใช่ไหม ฉันอนุญาตให้ยืดหยุ่น I / O (แต่ฉันสมมติว่ามันรบกวนส่วนอื่นของรหัสของคุณ?)
Kevin Cruijssen

2
@KevinCruijssen ปัญหาคือฉันต้องการการวนซ้ำเป็นพิเศษเพื่อประมวลผลลำดับสุดท้าย ดังนั้นฉันต้องทำ[...s,0]แม้ว่าsจะมีรายการอยู่แล้ว
Arnauld

4

เรติน่า 56 ไบต์

L`(.)\1*
O`
L$m`^(.+)(¶\1)+$
$#2;$1
N`
.+;

N$`
$.&
-1G`

ลองออนไลน์! ลิงค์รวมถึงกรณีทดสอบ คำอธิบาย:

L`(.)\1*

รายการทั้งหมดที่วนซ้ำหลักที่สุด

O`

เรียงลำดับรายการตามลำดับ

L$m`^(.+)(¶\1)+$
$#2;$1

แสดงรายการทุกองค์ประกอบที่มี "นับ" ของพวกเขา

N`

เรียงลำดับจากน้อยไปมาก

.+;

ลบการนับ

N$`
$.&

เรียงตามความยาวจากน้อยไปมาก (ในกรณีที่ความยาวเท่ากันลำดับก่อนหน้านี้เนื่องจากการนับจะถูกเก็บไว้)

-1G`

เก็บค่าสุดท้ายเช่นยาวที่สุด


4

R , 102 ไบต์

function(i)rep(names(sort(-(x=(x=table(rle(i)))[rowSums(x>1)>0,,drop=F])[m<-max(rownames(x)),])[1]),m)

ลองออนไลน์!

เนื่องจากยังไม่มีคำตอบ R ฉันจึงตัดสินใจลองและดี ... มันไม่ง่ายเลย ฉันไม่รู้จริงๆว่ามันเป็นวิธีการที่ดีหรือไม่

อินพุตและเอาต์พุตเวกเตอร์ของอักขระ


เกือบ 100 ไบต์นั้นค่อนข้างดีสำหรับ R กับความท้าทายนี้
ngm



3

Powershell, 101 ไบต์

($args|sls '(.)\1*'-a|%{$_.Matches}|group|?{$_.Count-1}|sort @{e={$_.Name.Length,$_.Count}})[-1].Name

สคริปต์ทดสอบที่อธิบายอย่างชัดเจน:

$f = {

(
    $args|          # for each argument (stings)
    sls '(.)\1*'-a| # searches all
    %{$_.Matches}|  # regex matches
    group|          # group it (Note: Count of each group > 0 by design)
    ?{$_.Count-1}|  # passthru groups with Count not equal 1
    sort @{         # sort all groups by 2 values
        e={$_.Name.Length,$_.Count}
    }
)[-1].Name          # returns name of last group (group with max values)

}

@(
    ,('7888885466662716666', '6666')
    ,('3331113331119111', '111')
    ,('777333777333', '777','333')
    ,('122222233433', '33')
    ,('811774177781382', '8')
    ,('555153333551','1')
    ,('12321', '1','2')
    ,('944949949494999494','4')
    ,('8888858888866656665666','88888')
    ,('1112221112221111','111','222')
) | % {
    $s,$e = $_
    $r = &$f $s
    "$($r-in$e): $r"
}

เอาท์พุท:

True: 6666
True: 111
True: 777
True: 33
True: 8
True: 1
True: 1
True: 4
True: 88888
True: 111


3

Haskell, 72 ไบต์

import Data.Lists
g!x|y<-countElem x g=(y>1,1<$x,y)
(argmax=<<(!)).group

มันทำงานอย่างไร

(argmax=<<(!)).group       -- expands to: f i = argmax (group i !) (group i)
    group                  -- split the input list into subsequences of equal digits
                           -- e.g. "1112211" -> ["111","22","11"]

                           -- find the element of this list where the function !
                           -- returns the maximum value. First parameter to !
                           -- is the grouped input list, second parameter the
                           -- the element to look at 

g!x|
    y<-countElem x g       -- let y be the number of occurrences of x in g
  = (  ,   ,  )            -- return a triple of
     y>1                   -- a boolean y>1  (remember: True > False)  
        1<$x               -- length of x (to be exact: all elements in x
                           -- replaced by 1. This sorts the same way as the
                           -- length of x)
             y             -- y
                           -- a triples sorts lexicographical

คุณไม่จำเป็นต้องใช้รายการ Haskell +เป็นภาษาเพราะ Data.Lists ไม่ได้เป็นส่วนหนึ่งของฐาน?
ბიმო

@BWO: ไม่รู้ ฉันมักจะใช้ "Haskell" แบบธรรมดาเสมอแม้กระทั่งเมื่อฉันนำเข้าไลบรารีที่แปลกใหม่ (เช่นGlossสำหรับเอาต์พุตกราฟิกหรือMatrix) ฉันใช้ "Haskell + some" ถ้าฉันไม่ต้องการรวมจำนวนไบต์สำหรับการนำเข้า ฉันคิดว่าเรามีหัวข้อนี้ในเมตาดาต้า แต่ฉันไม่สามารถหาได้อีกต่อไป หากฉันจำได้อย่างถูกต้องเราไม่มีคำจำกัดความทั่วไปของ "ห้องสมุดมาตรฐาน" ข้อมูลอ้างอิงของ Haskell ควรเป็นอย่างไร รายงาน Haskell ซึ่งเป็นฐานของ GHC, Haskell Plattform มีอย่างอื่นอีกไหม?
nimi

IMO ควรเป็นเช่นเดียวกับ C / JavaScript / .. ว่า (หากเป็นเรื่องสำคัญ) เราจำเป็นต้องใช้Haskell (GHC)หรือHaskell (Hugs)เป็นต้นเนื่องจากการใช้งานจะระบุภาษาใน PPCG ดังนั้นสำหรับGHCคำตอบที่จะรวมฐานและสำหรับทุกคนอื่น ๆ ฉันจะไม่ทราบ: D
ბიმო

คุณอาจมีลิงค์ของ TIO เพื่อให้สามารถทดสอบได้หรือไม่ หรือData.Listsห้องสมุดไม่มีอยู่ใน TIO หรือคอมไพเลอร์ออนไลน์อื่นของ Haskell
Kevin Cruijssen

1
@KevinCruijssen: ใช่Data.ListsTIO หายไป คุณสามารถทดสอบกับรุ่นนี้
nimi

3

R , 85 ไบต์

function(x,R=rle(x),a=ave(R$v,R,FUN=length))rep(R$v[o<-order(a<2,-R$l,-a)[1]],R$l[o])

ลองออนไลน์!

  • อินพุต:เวกเตอร์ของตัวเลขจำนวนเต็มคั่นเช่นc(1,8,8...)

  • เอาท์พุท:เวกเตอร์ของตัวเลขจำนวนเต็มคั่น

รหัสที่ไม่ได้ควบคุมพร้อมคำอธิบาย:

function(x){                # x is a vector of digits : e.g. c(1,1,8,8,1,1)

R = rle(x)                  # Get the sequences of consecutive repeating digits
                            # doing run length encoding on x, i.e. : R is a list
                            # with the digits (R$values) and the number of their
                            # consecutive occurrencies (R$lengths)
                            # N.B. you can use R$v for R$values and R$l for R$lenghts

a=ave(R$v,R,FUN=length)     # Group R$v by R$l AND R$v, count the occurrencies 
                            # for each group and "unroll" the value of each 
                            # group to the original R$v length.
                            # Here basically we count the occurrencies of the same 
                            # sequence.

o<-order(a<2,-R$l,-a)[1]    # Get the indexes used to order by a < 2 then by -R$l and
                            # finally by -a; store the first index in "o".
                            # Here basically we use order to select the first sequence 
                            # repeated at least twice, in case of ties the sequence 
                            # with the greatest length and in case of ties the most 
                            # repeated sequence.

rep(R$v[o],R$v[o])          # Using the index "o", we reconstruct the sequence repeating
                            # R$l[o] times R$v[o]
}

รุ่นทางเลือกที่ยอมรับเวกเตอร์ของจำนวนเต็มหรือตัวเลขตัวอักษร:

R , 88 ไบต์

function(x,R=rle(x),a=ave(R$v,R,FUN=length))rep(R$v[o<-tail(order(a>1,R$l,a),1)],R$l[o])

ลองออนไลน์!

  • อินพุต:เวกเตอร์ของอักขระหรือตัวเลขที่แยกกันเช่นc("1","8","8"...)หรือc(1,8,8...)

  • เอาท์พุท:เวกเตอร์ของอักขระที่แยกถ้าอินพุตเป็นเวกเตอร์ของอักขระเวกเตอร์ของตัวเลขหากอินพุตเป็นเวกเตอร์ของตัวเลข


คุณสามารถเพิ่มคำอธิบายได้ไหม? ฉันไม่เข้าใจว่ามันทำงานอย่างไร
JayCe

@JayCe: เสร็จแล้ว! (ฉันได้เพิ่มรายละเอียดที่คุณรู้จักดีแล้วสำหรับผู้ใช้ที่ไม่ใช่ R))
digEmAll

TY! มันสมเหตุสมผลแล้ว
JayCe

2

สีแดง , 256 250 ไบต์

func[s][p: func[b][sort parse b[collect[any keep[copy a skip thru any a]]]]first
last sort/compare collect[foreach d p p s[if 1 < k: length? to-block d[keep/only
reduce[form unique d k]]]]func[x y][(reduce[length? x/1 x/2])< reduce[length? y/1 y/2]]]

ลองออนไลน์!

จริง ๆ แล้ววิธีแก้ปัญหาที่ยาวนานจริงๆในครั้งนี้ ... (ถอนหายใจ)

รับอินพุตเป็นสตริง

คำอธิบาย:

f: func [ s ] [
    p: func [ b ] [                        ; groups and sorts the adjacent repeating items
        sort parse b [ 
            collect [                      
                any keep[
                    copy a skip thru any a ; gather any item, optionally followed by itself  
                ]
            ]
        ]
    ]
    t: copy []
    foreach d p p s [                     ; p p s transforms the input string into a block of sorted blocks of repeating digits
        if 1 < k: length? to-block d [    ; filters only the blocks that occur more than once
            insert/only t reduce [ form unique d k ] ; stores the digits and the number of occurences
                                          ; "8888858888866656665666" -> [["5" 3] ["666" 3] ["88888" 2]]
        ]
    ]
    first last sort/compare t func [ x y ] ; takes the first element (the digits) of the last block of the sorted block of items
        [ (reduce [ length? x/1 x/2 ]) < reduce [ length? y/1 y/2 ] ] ; direct comparison of the blocks
]

2

Java (JDK 10) , 213 ไบต์

s->{int l=99,X[][]=new int[10][l],d,D=0,m=0,M=0;for(var x:s.split("(?<=(.))(?!\\1)"))X[x.charAt(0)-48][x.length()]++;for(;M<1&&l-->1;)for(d=0;d++<9;)if((m=X[d][l])>1&m>M){M=m;D=d;}for(;l-->0;)System.out.print(D);}

ลองออนไลน์!

คำอธิบาย (ล้าสมัย)

s->{                                    // Lambda for Consumer<String>
 int l=99,                              //  Length of token, max is 99.
     X[][]=new int[10][l],              //  Array containing the occurrences per token
     d,                                 //  digit value
     D=0,                               //  digit holder for best sequence candidate
     m=0,                               //  holder of the current candidate
     M=0;                               //  best candidate for the current length of token.
 for(var x:s.split("(?<=(.))(?!\\1)"))  //  Tokenize the string into digit-repeating sequences
  X[x.charAt(0)-48][x.length()]++;      //   Add one occurrence for the token
 for(;M<1&&l-->1;)                      //  While no value has been found and for each length, descending. Do not decrease length if a value has been found.
  for(d=0;d++<9;)                       //   for each digit
   if((m=X[d][l])>1&m>M){               //    if the current occurrence count is at least 2 and that count is the current greatest for the length
    M=m;D=d;                            //     mark it as the current best
   }                                    //
 for(;l-->0;)System.out.print(D);       //  Output the best-fitting subsequence.
}                                       // 

เครดิต

  • -9 ไบต์และข้อผิดพลาดที่ต้องขอบคุณKevin Cruijssen

1
ฉันกลัวว่าจะมีข้อบกพร่องเล็ก ๆ น้อย ๆ ในการj*o>Mตรวจสอบของคุณ length * occurrence-countถ้าผมเข้าใจอย่างถูกต้องก็จะใช้เวลาสูงสุด แต่สำหรับกรณีทดสอบเช่น1113311133933933933933เช่น111จะเป็น (3 * 2 = 6) และ33จะเป็น (2 * 6 = 12) ดังนั้นมันจะออกมา33ด้วยเหตุการณ์ที่เกิดขึ้นสูงสุดแทนที่จะ111เป็นเหตุการณ์ที่เกิดขึ้นยาวนานที่สุดอย่างน้อยสองครั้ง นอกจากนี้ยังvar r="";for(;O-->0;)r+=D;return r;สามารถเล่นกอล์ฟfor(;O-->0;)System.out.print(D);ใน Java 10 หรือสั้นกว่าใน Java 11:return(D+"").repeat(O);11:
Kevin Cruijssen

@KevinCruijssen ฉันคิดว่าฉันซ่อมมันแล้ว
Olivier Grégoire

1
นั่นดูดีกว่าและเป็นวิธีที่ดีในการเล่นไบต์ในเวลาเดียวกัน คุณแค่ลืมอัปเดตคำอธิบายของคุณ และคุณก็สามารถกอล์ฟ 1 ไบต์เพิ่มเติมที่เปลี่ยนแปลงไปint X[][]=new int[10][99],d,l=99, int l=99,X[][]=new int[10][l],d,
Kevin Cruijssen

1
@KevinCruijssen ขอบคุณ! ฉันยังแข็งแรงเล่นกอล์ฟหนึ่งไบต์มากขึ้นโดยการเขียนแทนd++<9 ++d<10ขออภัยสำหรับส่วนที่เหลือ: ฉันค่อนข้างเหนื่อยวันนี้ = _ =
Olivier Grégoire

2

Ruby , 68 67 ไบต์

->a{(b=a.chunk &:+@).max_by{|x|[(c=b.count x)<2?0:x[1].size,c]}[1]}

ลองออนไลน์!

อินพุตและเอาต์พุตอาร์เรย์ของ chars

วิธีนี้ค่อนข้างตรงไปตรงมา: เราระบุจำนวนหลักต่อเนื่อง (chunkโดยใช้+ฟังก์ชันเอกนารีเป็นตัวตน) และรับค่าสูงสุด - อันดับแรกตามขนาดของการรัน (รีเซ็ตเป็นศูนย์หากจำนวนการเกิดของมันคือ <2) จากนั้นนับเอง .


2

PCRE, 152 ไบต์

(\d)(?<!(?=\1)..)(?=(\1*)(?!\1).*(?!\1).\1\2(?!\1))(?!(?:(?=\2((\3?+)(\d)(\5*)))){1,592}?(?=\2\3.*(?!\5).\5\6(?!\5))(?:\1(?=\1*\4\5(\7?+\5)))*+(?!\1))\2

ดูการทำงานใน: https://regex101.com/r/0U0dEp/1 (ดูที่การแข่งขันนัดแรกในแต่ละกรณีทดสอบ)

นี่เป็นเพียงเพื่อความสนุกเนื่องจาก regex ไม่ใช่ภาษาโปรแกรมจริงในตัวของมันเองและโซลูชันมีข้อ จำกัด : P

เนื่องจากกลุ่มที่มีความกว้างเป็นศูนย์เช่น(?:)+จับคู่เพียงครั้งเดียวและไม่ทำซ้ำไปเรื่อย ๆ และเนื่องจาก PCRE ทำสำเนากลุ่มที่มีขีด จำกัด ภายในฉันจึงต้องใช้หมายเลขเวทย์มนตร์ใน ("{1,592}") ซึ่ง หมายความว่าเราสามารถค้นหาตัวเลขที่ต่อเนื่องกันได้มากถึง 592 ชุดเพื่อค้นหาชุดแข่งขันที่อาจยาวกว่าชุดที่อยู่ภายใต้การตรวจสอบในปัจจุบัน ข้อมูลเพิ่มเติมเกี่ยวกับแนวคิดนี้ที่นี่


1

Perl 5 , 88 ไบต์

my($m,%s);++$i%2*$s{$_}++&&($n=$s{$_}/9+length)>$m&&($a=$_,$m=$n)for pop=~/((.)\2*)/g;$a

ลองออนไลน์!

ungolfed เล็กน้อยด้วยการทดสอบ:

sub f {
  my($m,%s);
  my($i,$n,$a);           #not needed in golfed version
  ++$i % 2  *  $s{$_}++
  && ($n=$s{$_}/9+length) > $m
  && ($a=$_, $m=$n)
    for pop=~/((.)\2*)/g; #i.e. 7888885466662716666 => 7 88888 5 4 6666 2 7 1 6666
  $a
}
for(map[/\d+/g],split/\n/,join"",<DATA>){ #tests
  my($i,@e)=@$_;
  printf "%-6s   input %-24s   expected %-10s   got %s\n",
    (grep f($i) eq $_, @e) ? "Ok" : "Not ok", $i, join('|',@e), f($i);
}
__DATA__
Input:  7888885466662716666     Output: 6666
Input:  3331113331119111        Output: 111
Input:  777333777333            Output: 777|333
Input:  122222233433            Output: 33
Input:  811774177781382         Output: 8
Input:  555153333551            Output: 1
Input:  12321                   Output: 1|2
Input:  944949949494999494      Output: 4
Input:  8888858888866656665666  Output: 88888
Input:  1112221112221111        Output: 111|222

1

ภาษา Wolfram (Mathematica) , 67 ไบต์

#&@@@MaximalBy[Select[Tally@Split@#,Last@#>1&],{Length@#,#2}&@@#&]&

ฟังก์ชั่นบริสุทธิ์ ใช้รายการของตัวเลขเป็นอินพุตและส่งคืนรายการของลำดับ (ไม่มีลำดับโดยเฉพาะ) เป็นเอาต์พุต ไม่แน่ใจว่าประโยค "ต้องปรากฏอย่างน้อยสองครั้ง" สามารถจัดการได้อย่างหมดจดมากขึ้นหรือไม่ ลองออนไลน์!


1
คุณสามารถเพิ่มลิงค์ TIO ได้หรือไม่
Kevin Cruijssen

ถ้าคุณยืนยันอย่างแท้จริง ...
LegionMammal978

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