Chuỗi con không lặp lại dài nhất


33

Đưa ra một chuỗi làm đầu vào tìm chuỗi con liền kề dài nhất không có bất kỳ ký tự nào hai lần trở lên. Nếu có nhiều chuỗi con như vậy, bạn có thể xuất ra. Bạn có thể cho rằng đầu vào nằm trong phạm vi ASCII có thể in nếu bạn muốn.

Chấm điểm

Câu trả lời trước tiên sẽ được xếp hạng theo độ dài của chuỗi con không lặp lại dài nhất của chúng, và sau đó theo tổng chiều dài của chúng. Điểm thấp hơn sẽ tốt hơn cho cả hai tiêu chí. Tùy thuộc vào ngôn ngữ, điều này có thể sẽ giống như một thử thách với giới hạn nguồn.

Tầm thường

Trong một số ngôn ngữ đạt được số điểm 1, x (chiều dài) hoặc 2, x (Brain-flak và các tarpits khác) là khá dễ dàng, tuy nhiên có những ngôn ngữ khác trong đó giảm thiểu chuỗi con không lặp lại dài nhất là một thách thức. Tôi đã có rất nhiều niềm vui khi đạt được điểm 2 trong Haskell, vì vậy tôi khuyến khích bạn tìm kiếm các ngôn ngữ trong đó nhiệm vụ này rất thú vị.

Các trường hợp thử nghiệm

"Good morning, Green orb!" -> "ing, Gre"
"fffffffffff" -> "f"
"oiiiiioiiii" -> "io", "oi"
"1234567890"  -> "1234567890"
"11122324455" -> "324"

Chấm điểm

Bạn có thể chấm điểm các chương trình của mình bằng đoạn mã sau:


Trường hợp thử nghiệm được đề xuất: 11122324455Jonathan Allan nhận ra rằng phiên bản đầu tiên của tôi đã không xử lý chính xác.
Dennis

@Dennis Trường hợp thử nghiệm được thêm vào. Tôi tò mò về việc đó đã xảy ra như thế nào.
Thuật sĩ lúa mì

2
Tôi tạo ra tất cả các chuỗi con (đã được sắp xếp theo chiều dài), sau đó lặp lại các chuỗi con và giữ lại các chuỗi con còn lại. Thật không may, điều đó làm thay đổi thứ tự; 11122ocurrs sau 324, nhưng bị trùng lặp đến 12.
Dennis

Tôi đang tự hỏi nơi câu trả lời khoảng trắng là.
Bạch tuộc ma thuật Urn

Câu trả lời:


13

C, điểm 2,  747   720  662 byte

L  [  1  <<  7  ]  ,  *  q  ,  *  r  ,  l  ,  d  ,  i  ,  c  ,  j  ,  s  ,  t  ,  k  =  1  <<  7  ;  h  (  )  {  q  =  s  +  i  +  j  ++  ;  *  q  %  k  &&  !  L  [  *  q  %  k  ]  ++  &&  h  (  ++  c  )  ;  }  g  (  )  {  q  =  s  +  i  ;  *  q  %  k  ?  z  (  k  )  ,  h  (  j  =  c  =  0  )  ,  c  >  d  &&  (  d  =  c  )  &&  (  l  =  i  )  ,  g  (  ++  i  )  :  0  ;  }  f  (  S  ,  T  )  {  s  =  S  ;  l  =  i  =  d  =  0  ;  g  (  t  =  T  )  ;  p  (  i  =  0  )  ;  }  p  (  )  {  q  =  s  +  l  +  i  ;  r  =  t  +  i  ;  i  ++  <  d  ?  p  (  *  r  =  *  q  )  :  (  *  r  =  0  )  ;  }  z  (  i  )  {  L  [  --  i  ]  =  0  ;  i  &&  z  (  i  )  ;  }

Hoạt động ít nhất trên MinGW 32 bit (đã tắt tối ưu hóa). Không sử dụng một từ khóa duy nhất.

Hoạt động rõ ràng trên TIO với gcc và clang, quá: Hãy thử trực tuyến! (Cảm ơn @Dennis!)

Gọi với:

int main()
{
    char str[1024];

    f("Good morning, Green orb!", str);
    puts(str);

    f("fffffffffff", str);
    puts(str);

    f("oiiiiioiiii", str);
    puts(str);

    f("1234567890", str);
    puts(str);

    f("L  [  1  <<  7  ]  ,  *  q  ,  *  r  ,  l  ,  d  ,  i  ,  c  ,  j  ,  s  ,  t  ,  k  =  1  <<  7  ;  h  (  )  {  q  =  s  +  i  +  j  ++  ;  *  q  %  k  &&  !  L  [  *  q  %  k  ]  ++  &&  h  (  ++  c  )  ;  }  g  (  )  {  q  =  s  +  i  ;  *  q  %  k  ?  z  (  k  )  ,  h  (  j  =  c  =  0  )  ,  c  >  d  &&  (  d  =  c  )  &&  (  l  =  i  )  ,  g  (  ++  i  )  :  0  ;  }  f  (  S  ,  T  )  {  s  =  S  ;  l  =  i  =  d  =  0  ;  g  (  t  =  T  )  ;  p  (  i  =  0  )  ;  }  p  (  )  {  q  =  s  +  l  +  i  ;  r  =  t  +  i  ;  i  ++  <  d  ?  p  (  *  r  =  *  q  )  :  (  *  r  =  0  )  ;  }  z  (  i  )  {  L  [  --  i  ]  =  0  ;  i  &&  z  (  i  )  ;  }");
    puts(str);
}

Đầu ra:

Mã với định dạng dễ đọc hơn một chút:

L[1<<7],
*q, *r, l, d, i, c, j, s, t, k=1<<7;

h()
{
    q = s+i+j++;
    *q%k && !L[*q%k]++ && h(++c);
}

g()
{
    q = s+i;
    *q%k ? z(k), h(j=c=0), c>d && (d=c) && (l=i), g(++i) : 0;
}

f(S, T)
{
    s = S;
    l = i = d = 0;
    g(t=T);
    p(i=0);
}

p()
{
    q = s+l+i;
    r = t+i;
    i++<d ? p(*r=*q) : (*r=0);
}

z(i)
{
    L[--i] = 0;
    i && z(i);
}

Và điều này có thể được sử dụng để tạo khoảng cách phù hợp để đến định dạng với điểm 2: Hãy thử trực tuyến!


C, điểm 3, 309 byte

i
,
j
,
l
,
c
,
d
;
f
(
\
c\
\
h\
\
a\
\
r
*
s
)
{
\
f\
\
o\
\
r
\
(
i
=
l
=
d
=
0
;
s
[
i
]
;
c
>
d
&&
(
d
=
c
)
&&
(
l
=
i
)
,
++
i
)
\
f\
\
o\
\
r
(
\
c\
\
h\
\
a\
\
r

L
[
\
1\
\
2\
\
8
\
]
=
{
j
=
c
=
0
}
;
s
[
i
+
j
]
&&
!
L
[
s
[
i
+
j
++
]
]
++
;
++
c
)
;
\
w\
\
r\
\
i\
\
t\
\
e
(
1
,
s
+
l
,
d
)
;
}

Hãy thử trực tuyến!


10

Haskell , điểm 2, 492 ... 307 224 212 209 207 byte

((yy:yyy))??ss|ss==yy  =  ""  |  yy==yy=yy:yyy??ss
ss??sss=ss
ss""=""

ss((ff:fff))  =  ff  :  ss  fff??ff
ff""=""

ff((xxx:xx))  =  ss((xxx:xx))##ff  xx
xx##xxx  |  ((((xx>>xx))<))  $  xxx>>xx=xxx|xx==xx=xx

Hãy thử trực tuyến!

Chơi gôn đúng nghĩa là hàng trăm byte nhờ WWizrjan Johansen !

Giải trình

Hàm (??)lấy một ký tự cvà một chuỗi svà trả về tiền tố dài nhất skhông chứa c. Ungolfed và không được tối ưu hóa cho điểm:

c ?? (y:s)  
    | c==y = ""
    | True = y : c ?? s
c ?? s = s

Hàm sssử dụng (??)để tìm tiền tố dài nhất của các ký tự duy nhất của một chuỗi đã cho:

ss (x:r) = x : (x ?? ss r)
ss "" = ""

(##)là một hàm có hai chuỗi và trả về chuỗi dài hơn. Việc so sánh độ dài hoạt động bằng cách lặp lại chuỗi xthường xuyên như xdài ( x>>y) và ydài ( y>>x) và kiểm tra chuỗi nào trong chuỗi kết quả có lớn hơn về mặt từ vựng.

x ## y
  | (x>>x) < (y>>x) = y
  | True = x

Cuối cùng đệ quy ffqua chuỗi đầu vào, tạo tiền tố dài nhất với ss, xác định đệ quy chuỗi con không lặp lại dài nhất của đuôi chuỗi và trả về thời gian dài hơn của hai chuỗi (##):

ff "" = ""
ff (x:r) = ss(x:r) ## ff r

4
224 , chủ yếu bằng cách hợp nhất danh sách trung gian.
Ørjan Johansen

2
Tôi đã kết hợp câu trả lời này với câu tôi đã đăng trong cuộc trò chuyện trước đó để nhận được 216 .
Phù thủy lúa mì

3
209 bằng cách sắp xếp lại mọi thứ.
Ørjan Johansen

3
Với thông báo tiền thưởng, tôi đã xem xét lại và nhận ra @mánh khóe thực sự tốn 2 byte chỉ bằng cách tạo ra ?hai ký tự: 207
Ørjan Johansen

5

Lua, điểm 3, 274 byte

g='g'..'s'..'u'..'b'  _G  [  'l'..'o'..'a'..'d'  ](  g[g  ](  "s  =...f  o  r d = # s - 1 , 0 , - 1 d  o f  or r = 1 , # s - d d  o t = s :s  ub  (r  ,r  +d  )i  f n  ot t:  fi  nd  '(  .)  .*  %1  't  he  n p  ri  nt  (t  )r  et  ur  n en  d e  n  d e  nd  ","  ",""))(...)

Lưu ý: Yêu cầu Lua 5.2 hoặc Lua 5.3

Sử dụng:

$ lua lnrs.lua "Good morning, Green orb!"
ing, Gre
$ lua lnrs.lua "fffffffffff"
f
$ lua lnrs.lua "oiiiiioiiii"
oi
$ lua lnrs.lua "1234567890"
1234567890
$ lua lnrs.lua "11122324455"
324

Ý chính: xen kẽ mọi thứ với khoảng trắng, chèn " "(hai khoảng trắng) để phân chia định danh dài

Mã bị đánh cắp:

g = "gsub"
_G["load"](
   g[g](      -- g[g] == string.gsub - a function for substitution of substrings
      "The source of actual program, but two-space sequences were inserted in some places", 
      "  ",   -- we are replacing all two-space substrings
      ""      -- with an empty string
   )
)(...)

Chương trình thực tế (sau khi loại bỏ tất cả các cặp khoảng trắng):

s = ...
for d = #s - 1, 0, -1 do
   for r = 1, #s - d do
      t = s:sub(r, r+d)
      if not t:find"(.).*%1" then
         print(t)
         return
      end
   end
end

BTW, đoạn mã JS để tính điểm không thành công trên mã của tôi.


4

Võng mạc 0.8.2 , 37 byte, điểm 9

.
$&$'¶
(.)(?<=\1.+).*

O#$^`
$.&
1G`

Hãy thử trực tuyến! Bản dịch trực tiếp của câu trả lời này cho Retina 1 lưu một byte bằng cách sử dụng Nthay vì O#. Tuy nhiên, nếu bạn ngây thơ đánh golf Retina 1 xuống còn 28 byte, điểm của nó thực sự tăng lên 10! Giải trình:

.
$&$'¶

Tạo tất cả các hậu tố của đầu vào.

(.)(?<=\1.+).*

Đối với mỗi hậu tố, lấy tiền tố lên đến ký tự trùng lặp đầu tiên.

O#$^`
$.&

Sắp xếp các chuỗi còn lại theo thứ tự ngược chiều dài (nghĩa là dài nhất trước).

1G`

Đi lâu nhất.


4

Jelly , điểm 2, 14 byte

Ẇµµff  Q  €  Ṫ

Cảm ơn @JonathanAllan về điểm số -1, +7 byte và đã nhận thấy lỗi.

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

Ẇµµff  Q  €  Ṫ  Main link. Argument: s (string)

Ẇ               Window; yield all substrings of s, sorted by length.
 µ              Begin a new chain. Argument: A (array of substrings)
  µ             Begin a new chain. Argument: A (array of substrings)
   f            Filter A by presence in itself. Does nothing.
       Q  €     Unique each; deduplicate all strings in A.
    f           Filter A by presence in the array of deduplicated substrings,
                keeping only substrings composed of unique characters.
             Ṫ  Tail; take the last (longest) kept substring.

4

Sạch sẽ , điểm 7 5, 276 byte

@[ss:s]=rr(pp[][ss:s])((@s))
@s=s
ee x[rr:xx]|e x rr=True=ee x xx
ee x xx=f
f=e'e'' '
e::!  Char  !  Char  ->Bool
e  _ _=  code  {

eqC
}
pp p[r:rr]|ee r p=p=pp(a r p)rr
pp a _=a
a  x[ll:l]=[ll:a x  l]
a l ll=[l]
l[]rr=e'l''l'
l ff[]=f

l[r:rr][ss:ll]=l rr ll
rr x y|l x y=y=x

Hãy thử trực tuyến! Cảm ơn @ Οurous đã cho tôi thấy rằng có thể gọi mã máy ABC trực tiếp từ bên trong Clean. Điều này cho phép loại bỏ cổ chai trước importđó đặt điểm tối thiểu thành 7, nhưng cần từ khóa codeđặt điểm tối thiểu là 5 cho phương pháp này.

Có thể tìm thấy phiên bản không được tối ưu hóa và không được tối ưu hóa của mã ở trên: Hãy thử trực tuyến!


Phiên bản trước với điểm 7, 158 154 130 byte

import  StdEnv  
@[xx:rr]=c(%[][xx:rr])(@rr)
@e=e
c s b|  length  s<  length  b=b=s
%s[xx:r]|  isMember xx s=s= %(s++[xx])r
%r _=r

Hãy thử trực tuyến!

Với importđiểm số không thể xuống dưới 7. Nếu không nhập, người ta sẽ cần thực hiện bình đẳng trên chuỗi hoặc ký tự mà không có bất kỳ chức năng thư viện nào có thể không có, như có thể thấy trong phiên bản mới ở trên.


1
Bạn thực sự có thể thực hiện bình đẳng bằng cách sử dụng ABC nội tuyến, điều này sẽ làm giảm điểm. Tôi sẽ quay lại với một sửa đổi được đề xuất sau hôm nay nếu bạn quan tâm.
Οurous

Ví dụ: char đẳng thức: tio.run/##S85JTcz7/ Kẻ
Οurous

@Ourous A code block with raw ABC instructions, which can be used for primitive functions like integer addition, for linking with C, bypassing the type system... welcome down the rabbit hole!( từ cloogle ) chắc chắn nghe có vẻ hấp dẫn. Tôi sẽ xem xét nó vào ngày mai, cảm ơn vì lời đề nghị!
Laikoni

1
@ Urous Cảm ơn một lần nữa, với bài kiểm tra bình đẳng char của bạn, điểm số hiện tại là 5.
Laikoni

Ngẫu nhiên, bạn không cần một trong hai -ILcờ, vì không có gì được nhập.
Οurous

3

Python 3 , điểm 4, 155 byte

exec(('l=la''mbd''a f'',e=en''ume''rat''e:m''ax''([f[ j  :k]  for  j,i in e ( f)f''or  k,i in e ( f )if  len  ( { *''f[j'':k]''})==k-''j],''key''=le''n)'))

Điều này xác định một chức năng l.

Cảm ơn @xnor đã chỉ ra rằng các chuỗi có độ dài 3 không tăng điểm, tiết kiệm 32 byte.

Hãy thử trực tuyến!


Chuỗi có thể trong khối 3, phải không?
xnor

@xnor Thay đổi tên của hàm, thực sự. Cảm ơn!
Dennis

3

Brachylog , điểm 2, 19 byte

s  ᶠ  l  ᵒ  ≠  ˢ  t

Hãy thử trực tuyến!

Chỉ là một câu trả lời cũ "không gian mọi thứ" nhàm chán. Ít nhất tôi đã học được rằng các phép ẩn dụ có thể được đặt cách xa các vị từ và vẫn hoạt động (và các chỉ số và tham số (tham số) không thể).

s ᶠ - tìm tất cả các chuỗi con của chuỗi đã cho

l ᵒ - sắp xếp chúng theo chiều dài của chúng (tăng dần theo mặc định)

≠ ˢ - chọn những thứ có tất cả các yếu tố riêng biệt

t - lấy cái đuôi (yếu tố cuối cùng) của cái đó - cái có chiều dài lớn nhất


2

Pyth , 11 byte, điểm 4

-4 điểm nhờ Dennis

e lD {I# .:

elD{I#.:Q      Full program, inputs "string" from stdin and outputs to stdout
e              The last element of the list generated by taking
      .:Q      All substrings of the input
     #         Filtered for
   {I          Being invariant over deduplicate i.e. being "non-repeating"
 lD            and sorted by length

Hãy thử trực tuyến!


2

Husk , điểm 2, 10 byte

►IIËII≠IIQ

Hãy thử trực tuyến!

Giải trình

Chương trình này tương đương với điều này:

►Ë≠Q  Implicit input.
   Q  List of substrings.
►     Find one that maximizes:
 Ë    all ordered pairs
  ≠   are inequal.

Việc xây dựng trong Ëđánh giá lại trên tất cả các cặp có thứ tự các đối số của nó x, và trả về length(x)+1nếu kết quả mỗi là truthy, nếu không 0. Khi chúng tôi tối đa hóa điều này, chúng tôi tìm thấy chuỗi dài nhất không có ký tự lặp lại.

Trong bài nộp, tôi chỉ cần chèn chức năng nhận dạng Igiữa mỗi chức năng, hai lần. Vì là giống như Ë, I≠giống như và như vậy, điều này không thay đổi ngữ nghĩa. Nguy hiểm duy nhất là một hàm bậc cao hơn có thể quyết định sử dụng một trong các Iđối số của nó, nhưng may mắn dẫn đến một lỗi loại trong chương trình của chúng tôi, vì vậy nó không xảy ra.


2

Clojure, điểm 4

#(  let  [N  (fn  [[_ & r]] r) R  (fn  R [f v c]  (if  c (R f (f v (  nth  c 0))  ( N  c)) v)) C  (fn  C  (  [i]  (C (  seq  i) 0)) ( [i  n]  (if i (C ( N  i )  (  inc n)) n)))  J  (fn  [c  i]  (assoc c (C  c) i)) I  (fn  F [f i n R]  (if ( =  (C  R) n) R (F f (f  i) n ( J  R (f  i)))))] ( apply  str  (R ( fn  [a  b] ( if  (< (C  a)  (C  b)) b a )) "" (  for  [k  (I N % (C  % ) [])]  (R  ( fn [ t  c ] ( if ( or ( = t (  str t) ) ((  set t)c))(apply  str t) ( J  t c)))[]k)))))

Người đàn ông này thật đau đớn! Nthực hiện next, Rreduce, Ccount, Jconj(chỉ hoạt động cho vectơ) và Iiterate. apply strcó hai lần vì nếu không, đầu vào "aaaa" sẽ không trả về một chuỗi mà là một vectơ [\a]. May mắn thay, tôi đã sử dụng applyassoc, tôi không biết bạn có thể đưa một chỉ số vượt ra ngoài yếu tố cuối cùng của vectơ: o


Tôi cạo một số không gian: Hãy thử trực tuyến!
Ørjan Johansen


1

Python 3 , điểm 4, 317 byte

exec(('%s'  *58  %(  's=','in','pu','t(',');','pr','in','t(','so','rt','ed','((s','[i',':j',']f','or',' j',' i','n ','ra','ng','e(','1,','le','n(','s)','+1',')f','or',' i',' i','n ','ra','ng','e(','j)','if',' l','en','(s','et','(s','[i',':j',']))','==l','en','(s','[i',':j',']))',',k','ey','=l','en',')[','-1','])')))

Hãy thử trực tuyến!

Mã chưa được khám phá:

s=input();print(sorted((s[i:j]for j in range(1,len(s)+1)for i in range(j)if len(set(s[i:j]))==len(s[i:j])),key=len)[-1])

lambda achứa mbda điểm số 5 và một nhu cầu chức năng returnmà dường như không thể chỉnh sửa được exec(vì vậy cần có ít nhất 5 điểm eturn), vì vậy cần có một chương trình đầy đủ. Có lẽ bạn có thể chơi golf với kích thước mã chưa được khám phá khá nhiều, nhưng tôi không thể thấy sự cải thiện rõ ràng nhanh chóng.


1

Alice , 40 byte

/ii..nn$$@@BBww..DD~~FF..!!nn$$KK??oo@@

(Trailing newline)

Hãy thử trực tuyến!

Con trỏ lệnh di chuyển theo đường chéo trong chế độ thứ tự, vì vậy chỉ có mỗi ký tự khác được thực thi.

i.n$@Bw.D~F.!n$K?o@

i     take input
.n$@  terminate if empty
B     push all nonempty substrings, with the longest on the top of the stack
w     push return address (start main loop)
.     make copy of current substring
D     deduplicate characters
~     swap: this places the original above the deduplicated copy
F     Push the original string if it is a substring of the deduplicated copy
      (which can only happen if they're equal); otherwise push empty string
.!    place a copy on the tape
n$K   if the empty string was pushed, return to start of loop
o     output
@     terminate

1

Perl 6 , điểm: 15 10 8, chiều dài: 46 55 62 byte

{~m:ov/(.+)<!{$0.comb.repeated}>/.max(&chars)}

Kiểm tra nó

{~m:ov/(..*)<!{(($0)).comb.repeated}>{{}}/.max(&chars)}

Kiểm tra nó

{m:ov:i/(..*)<!{(($0)).comb.repeated}>{{}}/.max((&chars)).Str}

Kiểm tra nó

Mở rộng:

{    # bare block lambda with implicit parameter 「$_」

    m                          # match (implicitly against 「$_」)
    :overlap                   # in every single way possible
    :ignorecase                # add a 「:」 to break up substring
    /

      (..*)                    # match at least one character

      <!{
        (($0)).comb.repeated  # backtrack if there were repeats
      }>

      {{}}                    # anon hash in code block (no-op)
    /

    .max((&chars))            # get the longest

    .Str                      # coerce to a Str (from a Match object)
}

Điểm 5 cho 88 byte. Có thể có một vài nơi để chơi gôn mặc dù
Jo King

1

Java 8, điểm 9 (384 B) 7 (401 B)

S -> { int s = 0 , e = 0 , l = 0 , x = 0 , y = 0 , b [ ] = new int [ 256 ] ; for ( ; x <S.  length  & y <S.  length  & l <S.  length  - x ; x ++ ) { b [S[x]] = 1 ; for ( y ++ ; y <S.  length  && b [S[y]] < 1 ; b [S[y ++]] = 1 ) ; if ( l < y - x ) { s = x ; e = y ; l = y - x ; } for ( ; y <S.  length  && x < y & S[x] != S[y  ];)b [S[x ++]] = 0 ; }  String g=""; for( ; s<e ; g+= S[s++]);  return  g;}
  • Phiên bản đầu tiên. Sẽ đi xuống từ đây. Điểm là 9 do "ubstring ", vì vậy substringsẽ là phần đầu tiên để thay thế.
  • Điểm bây giờ là 7 do " length"tôi có thể sẽ không thể giảm thêm nữa .. Tôi nghi ngờ có thể bỏ bốn cách sử dụng length. Nếu có thể, " eturn"(6) có thể hạ thấp điểm xuống 1 làm cải thiện cuối cùng, nhưng tôi đoán đây là nó (ngoại trừ có thể giảm một chút về số lượng byte ..)

Hãy thử trực tuyến.



0

Toán, điểm 11 9

Length@Last@Select[Subsequences[Characters@#],#==DeleteDuplicates  @#&]&

Cạo một vài byte khỏi chuỗi không lặp lại dài nhất bằng cách che khuất tên của hàm:

Length@Last@Select[Subsequences[Characters  @#],#==(  ToExpression@ 
StringJoin@@FromCharacterCode@{{68},{101},{108},{101},{116},{101},{68},{117},
{112},{108},{105},{99},{97},{116},{101},{115}}))@#&]&

0

Kotlin , điểm: 11 10 9 byte, chiều dài: 227 246 245 byte

indices
  .flatMap { p -> indices . map { p to p + it } }
  .  filter { (r,i) -> i < length  }
  .map { ( s , a )->substring  (  s,  a  ) }
  .  filter { it  .  groupBy  { it } .  none { ( k , v )->v . size>1 } }
  .maxBy { it.length }

Dài nhất ubstringlà 9 ký tự

Nó được gọi như thế này:

val c = "Good morning, Green orb!"

fun String.c(): String? = indices
    .flatMap { p -> indices . map { p to p + it } }
    .  filter { (r,i) -> i < length  }
    .map { ( s , a )->substring  (  s,  a  ) }
    .  filter { it  .  groupBy  { it } .  none { ( k , v )->v . size>1 } }
    .maxBy { it.length }

fun main(args: Array<String>) {
    val text = """indices
    .flatMap { p -> indices . map { p to p + it } }
    .  filter { (r,i) -> i < length  }
    .map { ( s , a )->substring  (  s,  a  ) }
    .  filter { it  .  groupBy  { it } .  none { ( k , v )->v . size>1 } }
    .maxBy { it.length }"""
    val message = text.c()!!
    println(message)
    println(text.length)
    println(message.length)
    println(c.c())
}

Bạn không thể giảm nó xuống còn 10 bằng cách thêm một khoảng trắng giữa roupingBy{?
Kevin Cruijssen

1
Tìm thấy tốt, tôi đã thay đổi 11 số khác và giảm xuống còn 10
jrtapsell

Đó 10 ký tự, nhưng chuỗi con dài nhất không phải là roupingBy(9 ký tự) mà là eachCount(có dấu cách).
Erik the Outgolfer 30/1/18

roupingBy có một khoảng
trắng

Quản lý để giảm xuống còn 9, khắc phục sự cố cắt xén
jrtapsell


0

05AB1E , 22 byte | Điểm: 2

Œ  ʒ  D  Ù  Q  }  é  ¤

-1 điểm + 7 byte nhờ HeitherJewise

Hãy thử trực tuyến!


05AB1E , 15 byte | Điểm: 3

Œ ʒ D Ù Q } é ¤

Hãy thử trực tuyến!


05AB1E , 8 byte | Điểm: 8

ŒʒDÙQ}é¤

Hãy thử trực tuyến!


05AB1E thực sự có thể làm một cái gì đó khá rẻ ... thêm khoảng trắng vào 05AB1E không làm gì cả.

Nếu có một quy tắc chống lại điều này, tôi cũng có thể sử dụng ´và thích 7 ký tự khác.


1
@HeitherJeitherMan vì tôi là kẻ ngốc, có vấn đề với điều đó?
Bạch tuộc ma thuật Urn

@HeitherJeitherMan đùa haha, cảm ơn vì ý tưởng.
Bạch tuộc ma thuật Urn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.