Pengulangan Terpanjang dari Satu Digit


17

Tantangan:

Diberikan bilangan bulat positif, hasilkan keluaran satu digit terpanjang yang terjadi setidaknya dua kali, DAN memiliki batas digit lain (atau awal / akhir bilangan bulat).

Sebuah contoh:

Input: 7888885466662716666
Hasil terpanjang dari satu digit adalah 88888( 7[88888]5466662716666) dengan panjang 5. Namun, urutan ini hanya terjadi satu kali dalam bilangan bulat.
Sebaliknya, hasil untuk input 7888885466662716666harus 6666( 78888854[6666]271[6666]), karena itu terjadi (setidaknya) dua kali.

Aturan tantangan:

  • Panjang urutan mengambil prioritas dari jumlah kali itu terjadi. (Yaitu dengan input 8888858888866656665666, kami output 88888( [88888]5[88888]66656665666; panjang 5, terjadi dua kali), dan tidak 666( 88888588888[666]5[666]5[666]; panjang 3, terjadi tiga kali).
  • Jika panjang beberapa kali sama, kita hasilkan satu dengan jumlah kejadian terbesar. Yaitu dengan input 3331113331119111, kami output 111( 333[111]333[111]9[111]; panjang 3, terjadi tiga kali), dan tidak 333( [333]111[333]1119111; panjang 3 juga, tetapi terjadi dua kali)
  • Jika jumlah-kejadian dan panjang dari beberapa urutan sama, Anda dapat menampilkan salah satu dari mereka, atau semua (dalam urutan apa pun). Yaitu dengan masukan 777333777333, mungkin output adalah: 777; 333; [777, 333]; atau [333, 777].
  • Selanjutnya harus memiliki batas digit lainnya (atau awal / akhir bilangan bulat). Yaitu dengan input 122222233433hasilnya adalah 33( 1222222[33]4[33]; panjang 2, terjadi dua kali) dan tidak 222( 1[222][222]33433, panjang 3, terjadi dua kali dengan keduanya tidak valid).
    • Ini berlaku untuk semua angka yang diperhitungkan pada penghitung-kejadian. Yaitu dengan input 811774177781382hasilnya adalah 8( [8]117741777[8]13[8]2; panjang 1, terjadi tiga kali) dan tidak 77( 811[77]41[77]781382/ 811[77]417[77]81382; panjang 2, terjadi dua kali dengan satu tidak valid) atau 1( 8[1][1]774[1]7778[1]382; panjang 1, terjadi empat kali dengan dua tidak valid).
  • Anda dapat berasumsi bahwa input tidak akan mengandung digit apa pun 0(akan cocok [1-9]+) (Ini untuk menghindari keharusan berurusan dengan kasus uji seperti 10002000yang seharusnya dihasilkan 000, di mana sebagian besar bahasa akan menampilkan 0secara default.)
  • Anda dapat berasumsi bahwa input akan selalu mengandung setidaknya satu output yang valid.
  • I / O keduanya fleksibel. Dapat berupa daftar / larik / aliran digit / byte / karakter atau sebagai string, bukan bilangan bulat tunggal.

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.

Kasus uji:

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
Kasus uji yang disarankan: 8888858888866656665666. Jika saya mengartikan tantangan dengan benar, solusi Brachylog dan 05AB1E gagal.
Tn. Xcoder

@ Mr.Xcoder Ditambahkan, terima kasih.
Kevin Cruijssen

@Arnauld Hmm, bagaimanapun juga itu akan menjadi salah satu pemenang menurut pendapat saya karena terjadi sebanyak 222ketika dibatasi oleh bilangan bulat lainnya. Saya kira kita tidak seharusnya menghitung kejadian yang merupakan substring dari 1111. Lebih baik menunggu OP.
Tn. Xcoder

2
@Arnauld Untuk 1112221112221111ini adalah subsequences dan jumlah mereka: 1111 (1), 111 (2), 222 (2). Karena kita hanya output urutan terjadi setidaknya dua kali, output dapat menjadi salah satu dari: 111, 222,[111,222] , [222,111]. (Lihat aturan keempat untuk informasi lebih lanjut.) Pada dasarnya 1111hanya akan dianggap sebagai 1111, dan bukan sebagai 1dan 111atau 11dan 11. Saya akan menambahkan test case Anda, tetapi hasilnya salah satu atau keduanya 111dan 222.
Kevin Cruijssen

Jawaban:


6

05AB1E , 14 byte

γТ1›ÏD€gZQÏ.M

Cobalah online!

Penjelasan

γ                # 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

@Riley: Sayangnya itu akan mendapatkan elemen pertama yang belum tentu yang paling umum.
Emigna

Ups .. Saya ketinggalan peluru itu.
Riley

5

Jelly , 12 byte

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

Cobalah online!

Versi sebelumnya - 14 byte

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

Cobalah online!

Bagaimana itu bekerja?

Œ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 byte

Mengambil input sebagai string. Mengembalikan bilangan bulat.

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

Cobalah online!

Berkomentar

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

Mungkin saya mengatakan sesuatu yang salah di sini, tetapi karena ...smengubah input ke daftar karakter digit, bukankah lebih pendek untuk hanya mengambil input sebagai daftar karakter digit, sebagai ganti string? Saya sudah mengizinkan I / O yang fleksibel. (Tapi saya menganggapnya mengganggu bagian lain dari kode Anda?)
Kevin Cruijssen

2
@KevinCruijssen Masalahnya adalah bahwa saya perlu iterasi tambahan untuk memproses urutan terakhir. Jadi saya harus melakukannya [...s,0]walaupun ssudah ada daftar.
Arnauld

4

Retina , 56 byte

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

N$`
$.&
-1G`

Cobalah online! Tautan termasuk kasus uji. Penjelasan:

L`(.)\1*

Tuliskan semua digit angka yang diulang secara maksimal.

O`

Urutkan daftar ke dalam urutan.

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

Buatlah daftar semua kelanjutan dengan "jumlah".

N`

Sortir dalam urutan hitungan naik.

.+;

Hapus jumlah.

N$`
$.&

Sortir dalam urutan panjang. (Di mana panjangnya sama, urutan sebelumnya karena hitungan dipertahankan.)

-1G`

Tetap nilai terakhir yaitu yang terlama.


4

R , 102 byte

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

Cobalah online!

Karena belum ada jawaban R, saya memutuskan untuk mencobanya, dan yah ... itu tidak mudah. Saya tidak benar-benar tahu apakah itu pendekatan yang baik, tetapi ini dia.

Input dan output vektor karakter.


Hampir 100 byte cukup bagus untuk R dengan tantangan ini.
ngm


3

Python 2 , 123 120 byte

import re
def f(s):r=re.findall(r'(\d)(\1*)',s);c=r.count;print max((len(a+b)*(c((a,b))>1),c((a,b)),a+b)for a,b in r)[2]

Cobalah online!


3

Powershell, 101 byte

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

Skrip uji yang dijelaskan:

$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"
}

Keluaran:

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

3

Python 2 , 114 113 byte

-1 byte terima kasih kepada TFeld .

p='';r=[];C=r.count
for c in input():r+=['']*(c!=p);r[-1]+=c;p=c
print max((len(w),C(w),w)for w in r if~-C(w))[2]

Cobalah online!


3

Haskell, 72 byte

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

Bagaimana itu bekerja

(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

Apakah Anda tidak perlu menggunakan daftar Haskell + sebagai bahasa karena Data.Lists bukan bagian dari basis?
ბიმო

@ BB: tidak tahu. Saya selalu menggunakan "Haskell" biasa, bahkan ketika saya mengimpor perpustakaan eksotis (misalnya Glossuntuk output grafis atau Matrix). Saya menggunakan "Haskell + sesuatu" jika saya tidak ingin memasukkan jumlah byte untuk impor. Saya pikir kami memiliki topik ini pada meta, tetapi saya tidak dapat menemukannya lagi. Jika saya ingat dengan benar, kami tidak memiliki definisi umum tentang "perpustakaan standar". Apa yang harus menjadi referensi untuk Haskell? Laporan Haskell, basis GHC, Haskell Plattform, sesuatu yang lain?
nimi

IMO harus seperti dengan C / JavaScript / .. bahwa (jika itu penting) kita perlu menggunakan Haskell (GHC) atau Haskell (Pelukan) dll. Karena implementasinya menentukan bahasa pada PPCG. Jadi untuk GHC jawaban yang akan mencakup dasar dan untuk semua yang lain saya tidak tahu: D
ბიმო

Apakah Anda mungkin memiliki tautan TIO sehingga dapat diuji? Atau Data.Listsperpustakaan tidak tersedia di TIO atau kompiler Haskell online lainnya?
Kevin Cruijssen

1
@KevinCruijssen: ya Data.Liststidak ada di TIO. Anda dapat mengujinya dengan versi ini .
nimi

3

R , 85 byte

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])

Cobalah online!

  • Input: vektor misalnya angka integer yang terpisahc(1,8,8...)

  • Output: vektor digit integer yang terpisah

Kode terbuka dengan penjelasan:

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]
}

Versi alternatif yang menerima vektor angka integer atau karakter:

R , 88 byte

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])

Cobalah online!

  • Input: vektor karakter atau digit yang dipisahkan, misalnya c("1","8","8"...)atauc(1,8,8...)

  • Output: vektor karakter yang dipisahkan jika inputnya adalah vektor karakter, vektor digit jika inputnya adalah vektor digit


Bisakah Anda menambahkan penjelasan? Saya tidak mengerti cara kerjanya.
JayCe

@JayCe: selesai! (Saya telah menambahkan detail yang Anda ketahui dengan baik, hanya untuk pengguna non-R;))
digEmAll

ty! Masuk akal sekarang.
JayCe

2

Merah , 256 250 byte

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]]]

Cobalah online!

Sungguh, solusi yang sangat panjang kali ini ... (menghela nafas)

Mengambil input sebagai string.

Penjelasan:

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 byte

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);}

Cobalah online!

Penjelasan (kedaluwarsa)

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.
}                                       // 

Kredit


1
Saya khawatir ada kesalahan kecil dalam j*o>Mcek Anda . Jika saya mengerti benar dibutuhkan maxlength * occurrence-count . Tetapi untuk kasus uji seperti 1113311133933933933933misalnya, 111akan menjadi (3 * 2 = 6), dan yang 33akan menjadi (2 * 6 = 12). Jadi output yang 33memiliki kejadian tertinggi, bukannya 111yang terpanjang setidaknya dua kali. Juga, var r="";for(;O-->0;)r+=D;return r;dapat golfed untuk for(;O-->0;)System.out.print(D);di Jawa 10, atau bahkan lebih pendek di Jawa 11: return(D+"").repeat(O);.
Kevin Cruijssen

@KevinCruijssen Saya rasa saya sudah memperbaikinya.
Olivier Grégoire

1
Itu memang terlihat lebih baik, dan cara yang bagus untuk bermain golf pada saat yang sama. Anda lupa memperbarui penjelasan Anda. Dan Anda dapat mengubah 1 byte lebih int X[][]=new int[10][99],d,l=99,ke golf int l=99,X[][]=new int[10][l],d,.
Kevin Cruijssen

1
@KevinCruijssen Terima kasih! Saya juga bermain golf satu byte lagi dengan menulis d++<9alih-alih ++d<10. Maaf untuk yang lain: Saya agak lelah hari ini = _ =
Olivier Grégoire

2

Ruby , 68 67 byte

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

Cobalah online!

Input dan output array dari chars.

Pendekatannya cukup mudah: kami mengidentifikasi jalannya digit berurutan ( chunkmenggunakan +fungsi unary sebagai identitas) dan mengambil maksimum - pertama dengan ukuran lari (reset ke nol jika jumlah kemunculannya adalah <2), kemudian oleh hitungan itu sendiri .


2

PCRE, 152 byte

(\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

Lihat beraksi di: https://regex101.com/r/0U0dEp/1 (lihat saja pertandingan pertama di setiap test case)

Ini hanya untuk bersenang-senang, karena regex bukan bahasa pemrograman yang sebenarnya, dan solusinya terbatas: P

Karena grup nol lebar seperti (?:)+hanya cocok satu kali dan tidak mengulangi tanpa batas, dan karena PCRE secara internal membuat salinan grup yang dikuantifikasi dengan batas, saya harus menggunakan angka ajaib di sana ("{1,592}"), yang berarti kita hanya dapat melihat hingga 592 set angka yang berdekatan di depan untuk menemukan set yang bersaing yang bisa lebih lama dari yang saat ini sedang diperiksa. Info lebih lanjut tentang konsep ini di sini .


1

Perl 5 , 88 byte

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

Cobalah online!

Sedikit tidak berbulu, dengan tes:

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

Bahasa Wolfram (Mathematica) , 67 byte

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

Fungsi murni. Mengambil daftar digit sebagai input dan mengembalikan daftar urutan (tanpa urutan tertentu) sebagai output. Tidak yakin apakah klausul "harus muncul setidaknya dua kali" dapat ditangani dengan lebih bersih. Cobalah online!


1
Bisakah Anda menambahkan tautan TIO untuk itu?
Kevin Cruijssen

Jika Anda benar-benar bersikeras ...
LegionMammal978

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.