สตริงย่อยที่ไม่ซ้ำที่ยาวที่สุด


33

รับสตริงเป็นอินพุตค้นหาสตริงย่อยต่อเนื่องที่ยาวที่สุดที่ไม่มีอักขระใด ๆ สองครั้งหรือมากกว่า หากมีสตริงย่อยหลายรายการคุณอาจส่งออกอย่างใดอย่างหนึ่ง คุณอาจสมมติว่าอินพุตอยู่ในช่วง ASCII ที่พิมพ์ได้หากคุณต้องการ

เกณฑ์การให้คะแนน

คำตอบจะถูกจัดอันดับโดยความยาวของสตริงย่อยที่ไม่ซ้ำกันที่ยาวที่สุดของพวกเขาเองแล้วตามด้วยความยาวทั้งหมด คะแนนที่ต่ำกว่าจะดีกว่าสำหรับทั้งสองเกณฑ์ ขึ้นอยู่กับภาษานี้อาจจะรู้สึกเหมือนเป็นความท้าทายของนักมีข้อ จำกัด เกี่ยวกับแหล่งที่มา

เรื่องขี้ปะติ๋ว

ในบางภาษาที่ทำคะแนนได้1, x (lenguage) หรือ2, x (flak-Brain และ tarpits turing อื่น ๆ ) นั้นค่อนข้างง่าย ฉันสนุกมากที่ได้คะแนน 2 ใน Haskell ดังนั้นฉันขอแนะนำให้คุณค้นหาภาษาที่งานนี้สนุก

กรณีทดสอบ

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

เกณฑ์การให้คะแนน

คุณสามารถให้คะแนนโปรแกรมของคุณโดยใช้ตัวอย่างต่อไปนี้:


กรณีทดสอบที่เสนอ: 11122324455Jonathan Allan ตระหนักว่าการแก้ไขครั้งแรกของฉันไม่สามารถจัดการได้อย่างถูกต้อง
Dennis

@ กรณีทดสอบเดนนิสเพิ่ม ฉันอยากรู้ว่าเกิดอะไรขึ้น
ข้าวสาลีตัวช่วยสร้าง

2
ฉันสร้างวัสดุพิมพ์ทั้งหมด (เรียงลำดับตามความยาวแล้ว) จากนั้นทำซ้ำวัสดุย่อยและเก็บวัสดุที่เหลืออยู่ น่าเสียดายที่เปลี่ยนคำสั่ง; 11122ocurrs หลังแต่ได้รับซ้ำไป324 12
Dennis

ฉันสงสัยว่าคำตอบของช่องว่างอยู่ตรงไหน
Magic Octopus Urn

คำตอบ:


13

C, คะแนน 2,  747   720  662 ไบต์

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

ทำงานอย่างน้อยใน MinGW แบบ 32 บิต (เมื่อปิดใช้งานการปรับให้เหมาะสม) ไม่ใช้คำหลักเดียว

ใช้งานได้กับ TIO ด้วย gcc และ clang ด้วย: ลองออนไลน์! (ขอบคุณ @Dennis!)

โทรด้วย:

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

เอาท์พุท:

รหัสที่มีการจัดรูปแบบที่สามารถอ่านได้เล็กน้อย:

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

และสิ่งนี้สามารถใช้เพื่อสร้างระยะห่างที่เหมาะสมเพื่อไปที่การจัดรูปแบบด้วยคะแนน 2: ลองออนไลน์!


C, คะแนน 3, 309 ไบต์

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

ลองออนไลน์!


10

Haskellคะแนน 2 492 ... 307 224 212 209 207 ไบต์

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

ลองออนไลน์!

เล่นกอล์ฟอย่างแท้จริงหลายร้อยไบต์ขอบคุณWWและØrjan Johansen !

คำอธิบาย

ฟังก์ชั่น(??)ใช้เวลาเป็นตัวอักษรcและสตริงsและผลตอบแทนที่คำนำหน้ายาวที่สุดของที่ไม่ได้มีs cUngolfed และไม่เหมาะสำหรับคะแนน:

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

ฟังก์ชั่นssใช้(??)ในการค้นหาคำนำหน้ายาวที่สุดของตัวอักษรที่ไม่ซ้ำกันของสตริงที่กำหนด:

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

(##)เป็นฟังก์ชั่นที่รับสองสายและคืนค่าที่ยาวกว่า การเปรียบเทียบความยาวทำงานโดยการทำซ้ำสตริงxบ่อยเท่าที่xยาว ( x>>y) และเท่าyนาน ( y>>x) และตรวจสอบว่าสตริงใดที่เป็นผลลัพธ์นั้นมีขนาดใหญ่กว่าพจนานุกรม

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

ในที่สุดffrecurses เหนือสตริงอินพุตสร้างคำนำหน้าที่ยาวที่สุดด้วยssrecursively จะกำหนดสตริงย่อยที่ไม่ซ้ำกันที่ยาวที่สุดของหางของสตริงและส่งคืนความยาวของทั้งสองด้วย(##):

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

4
224ส่วนใหญ่โดยการหลอมรวมรายการกลาง
Ørjan Johansen

2
ฉันรวมคำตอบนี้กับคนที่ผมโพสต์ในการแชทก่อนหน้านี้ที่จะได้รับ216
ข้าวสาลีตัวช่วยสร้าง

3
209โดยจัดลำดับสิ่งต่าง ๆ
Ørjan Johansen

3
ด้วยการประกาศค่าหัวฉันได้ลองดูอีกครั้งและตระหนักว่า@เคล็ดลับนั้นมีราคา 2 ไบต์มากกว่าแค่ทำ?สองตัวอักษร: 207
Ørjan Johansen

5

Lua คะแนน 3, 274 ไบต์

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  ","  ",""))(...)

หมายเหตุ: ต้องใช้ Lua 5.2 หรือ Lua 5.3

การใช้งาน:

$ 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

แนวคิดหลัก: แทรกทุกอย่างด้วยเว้นวรรคแทรก" "(สองช่องว่าง) เพื่อแยกตัวระบุแบบยาว

รหัสไม่ได้รับการตอบกลับ:

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
   )
)(...)

โปรแกรมจริง (หลังจากลบช่องว่างทุกคู่):

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 รหัส JS สำหรับการคำนวณคะแนนล้มเหลวในรหัสของฉัน


4

เรติน่า 0.8.2 , 37 ไบต์, คะแนน 9

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

O#$^`
$.&
1G`

ลองออนไลน์! การแปลโดยตรงของคำตอบนี้จะช่วยประหยัด Retina 1 ไบต์โดยใช้แทนN O#อย่างไรก็ตามถ้าคุณเล่นกอล์ฟแบบ Retina 1 ตอบได้ถึง 28 ไบท์คะแนนของมันจะสูงถึง 10! คำอธิบาย:

.
$&$'¶

สร้างคำต่อท้ายทั้งหมดของอินพุต

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

สำหรับคำต่อท้ายแต่ละคำให้นำหน้าอักขระที่ซ้ำกันครั้งแรก

O#$^`
$.&

เรียงลำดับสตริงที่เหลือตามลำดับความยาวย้อนกลับ (เช่นยาวที่สุดก่อน)

1G`

ใช้เวลานานที่สุด


4

เยลลี่คะแนน 2, 14 ไบต์

Ẇµµff  Q  €  Ṫ

ขอบคุณ @JonathanAllan สำหรับคะแนน -1, +7 ไบต์และสำหรับการสังเกตข้อบกพร่อง

ลองออนไลน์!

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

Ẇµµ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

ล้างคะแนน7 5, 276 ไบต์

@[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

ลองออนไลน์! ขอบคุณ@ Οurousที่แสดงให้ฉันเห็นว่าเป็นไปได้ที่จะโทรหารหัสเครื่อง ABC โดยตรงจากภายใน Clean วิธีนี้ช่วยให้สามารถกำจัดคอขวดก่อนหน้าimportซึ่งกำหนดคะแนนขั้นต่ำเป็น 7 แต่ต้องการคำหลักcodeที่กำหนดคะแนนขั้นต่ำเป็น 5 สำหรับวิธีการนี้

โค้ดด้านบนที่ไม่ได้คะแนนและไม่เหมาะกับคะแนนสามารถพบได้ที่นี่: ลองออนไลน์!


รุ่นก่อนหน้าด้วยคะแนน 7, 158 154 130 ไบต์

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

ลองออนไลน์!

ด้วยimportคะแนนที่ไม่สามารถไปต่ำกว่า 7 หากไม่มีการนำเข้าหนึ่งจะต้องใช้ความเท่าเทียมกันในสตริงหรือตัวอักษรโดยไม่ต้องฟังก์ชั่นห้องสมุดใด ๆ ที่อาจเป็นไปไม่ได้ตามที่เห็นในรุ่นใหม่ข้างต้น


1
คุณสามารถใช้ความเท่าเทียมกันโดยใช้อินไลน์ ABC ซึ่งควรลดคะแนน ฉันจะกลับมาพร้อมการแก้ไขที่แนะนำในวันนี้หากคุณสนใจ
Feburous

เช่น: char equality: tio.run/##S85JTcz7/…
Ο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!( จาก Cloogle ) แน่นอนเสียงเชิญ ฉันจะตรวจสอบในวันพรุ่งนี้ขอบคุณสำหรับคำแนะนำ!
Laikoni

1
@ Οurousขอบคุณอีกครั้งด้วยการทดสอบความเท่าเทียมกันของคุณตอนนี้คะแนนอยู่ที่ 5
Laikoni

อนึ่งคุณไม่จำเป็นต้อง-ILตั้งค่าสถานะใดๆ เนื่องจากไม่มีการนำเข้า
Feburous

3

Python 3 , คะแนน 4, 155 ไบต์

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

lนี้กำหนดฟังก์ชั่น

ขอบคุณ @xnor ที่ชี้ให้เห็นว่าสตริงความยาว 3 ไม่เพิ่มคะแนนประหยัด 32 ไบต์

ลองออนไลน์!


สตริงสามารถอยู่ในกลุ่มของ 3, จริงไหม?
xnor

@xnor การเปลี่ยนชื่อของฟังก์ชั่นแน่นอน ขอบคุณ!
Dennis

3

Brachylogคะแนน 2, 19 ไบต์

s  ᶠ  l  ᵒ  ≠  ˢ  t

ลองออนไลน์!

เพียงคำตอบที่น่าเบื่อ "พื้นที่ทุกอย่างออก" คำตอบ อย่างน้อยฉันได้เรียนรู้ว่า metapredicates สามารถเว้นระยะห่างจากเพรดิเคตและยังใช้งานได้ (และตัวห้อย (พารามิเตอร์) และตัวยกไม่สามารถทำได้)

s ᶠ - ค้นหาสตริงย่อยทั้งหมดของสตริงที่กำหนด

l ᵒ - เรียงตามความยาว (เรียงตามค่าเริ่มต้น)

≠ ˢ - เลือกผู้ที่มีองค์ประกอบที่แตกต่างกันทั้งหมด

t - รับส่วนท้าย (องค์ประกอบสุดท้าย) ของ - ส่วนที่ยาวที่สุด


2

Pyth , 11 ไบต์, คะแนน 4

-4 คะแนนขอบคุณเดนนิส

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

ลองออนไลน์!


2

แกลบ , คะแนน 2, 10 ไบต์

►IIËII≠IIQ

ลองออนไลน์!

คำอธิบาย

โปรแกรมเทียบเท่ากับสิ่งนี้:

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

ในตัวËประเมินในคู่ที่สั่งซื้อทั้งหมดของอาร์กิวเมนต์xและผลตอบแทนlength(x)+1ถ้าทุกผลเป็น truthy 0มิฉะนั้น เมื่อเราขยายให้ใหญ่สุดเราจะพบสตริงที่ยาวที่สุดที่ไม่มีอักขระซ้ำ

ในการส่งฉันเพิ่งแทรกฟังก์ชันตัวตนIระหว่างแต่ละฟังก์ชันสองครั้ง ตั้งแต่เป็นเช่นเดียวกับË, I≠เป็นเช่นเดียวกับและอื่น ๆ นี้จะไม่เปลี่ยนแปลงความหมาย อันตรายเพียงอย่างเดียวคือฟังก์ชั่นการสั่งซื้อที่สูงขึ้นสามารถตัดสินใจใช้หนึ่งในIs เป็นอาร์กิวเมนต์ได้ แต่โชคดีที่นำไปสู่ข้อผิดพลาดประเภทในโปรแกรมของเราดังนั้นจึงไม่เกิดขึ้น


2

Clojure คะแนน 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)))))

โอ้นี่มันเจ็บปวดมาก! Nการดำเนินการnext, Rคือreduce, Cคือcount, Jคือconj(ทำงานเฉพาะสำหรับเวกเตอร์) และเป็นI จะมีครั้งที่สองเพราะมิฉะนั้น "AAAA" การป้อนข้อมูลจะไม่กลับสตริง แต่เวกเตอร์ โชคดีที่ฉันต้องใช้และฉันไม่รู้ว่าคุณสามารถทำดัชนีหนึ่งรายการได้นอกเหนือจากองค์ประกอบสุดท้ายของเวกเตอร์: oiterateapply str[\a]applyassoc


ฉันโกนพื้นที่: ลองออนไลน์!
Ørjan Johansen

1

เยลลี่ , คะแนน 5, 10 ไบต์

ẆµQQ⁼µÐfµṪ

ลองออนไลน์!


2
คุณสามารถลดคะแนนเป็น 3 ได้โดยการเพิ่มช่องว่างในรหัสของคุณ ตัวอย่างเช่น: ẆµQQ ⁼ µ Ðf µ Ṫ(อาจเพิ่มช่องว่างมากเกินไปตอนนี้ แต่เป็นเพียงตัวอย่างฉันจะปล่อยให้การนับไบต์เพิ่มประสิทธิภาพเมื่อเทียบกับช่องว่างขึ้นอยู่กับคุณ)
Kevin Cruijssen

1

Python 3 , คะแนน 4, 317 ไบต์

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

ลองออนไลน์!

รหัสที่ไม่ได้รับการรับรอง:

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 aมีmbda ซึ่งมีคะแนน 5 และฟังก์ชั่นต้องการreturnซึ่งเห็นได้ชัดว่าไม่สามารถexeced (ใช้เวลาอย่างน้อย 5 คะแนนeturn) ดังนั้นจึงจำเป็นต้องใช้โปรแกรมเต็มรูปแบบ อาจเป็นไปได้ที่จะลงรหัสขนาดที่ไม่ได้รับการรับรองสักหน่อย แต่ฉันไม่เห็นการปรับปรุงที่ชัดเจนอย่างรวดเร็ว


1

อลิซ 40 ไบต์

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

(ขึ้นบรรทัดใหม่)

ลองออนไลน์!

ตัวชี้คำสั่งเคลื่อนที่แบบทแยงมุมในโหมดเลขลำดับดังนั้นจะมีการดำเนินการเฉพาะอักขระอื่นเท่านั้น

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 , คะแนน: 15 10 8, ความยาว: 46 55 62 ไบต์

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

ทดสอบมัน

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

ทดสอบมัน

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

ทดสอบมัน

ขยาย:

{    # 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)
}

คะแนน 5ต่อ 88 ไบต์ อาจมีบางสถานที่ที่จะเล่นกอล์ฟไบต์
Jo King

1

Java 8, คะแนน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;}
  • รุ่นเริ่มต้น จะลงจากที่นี่ คะแนนคือ 9 เนื่องจาก"ubstring "ดังนั้นsubstringจะเป็นส่วนแรกที่จะแทนที่
  • ตอนนี้มีคะแนน 7 เนื่องจาก" length"ซึ่งฉันอาจจะไม่สามารถลดได้อีก .. ฉันสงสัยว่าเป็นไปได้ที่จะลดการใช้สี่lengthครั้ง ถ้ามันเป็นไปได้," eturn" (6) อาจลดคะแนนลง 1 เพื่อปรับปรุงขั้นสุดท้าย แต่ฉันเดาว่านี่คือ (ยกเว้นการลดจำนวนเล็กน้อยในจำนวนไบต์ .. )

ลองออนไลน์


0

Haskellคะแนน 7

-4 ขอบคุณ Laikoni

import  Data.List  
f s=snd $ maximum [ (0<$i ,i)|i<-  tails  =<<inits s, nub i==i]

ลองออนไลน์!


3
f s=snd$maximum[(0<$i,i)|i<-tails=<<inits s,nub i==i]บันทึกไบต์และสองในคะแนน
Laikoni

3
การเพิ่มช่องว่างทำให้คะแนนลดลงเป็น 7: ลองออนไลน์!
Laikoni

0

Mathematica คะแนน11 9

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

โกนสองไบต์ออกจากสายอักขระการทำซ้ำที่ยาวที่สุดโดยปิดบังชื่อของฟังก์ชัน:

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 , คะแนน: 11 10 9 ไบต์, ความยาว: 227 246 245 ไบต์

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 }

ที่ยาวที่สุดubstringคือ 9 ตัวอักษร

มันถูกเรียกว่าสิ่งนี้:

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

คุณไม่สามารถลดขนาดลงเหลือ 10 ได้ด้วยการเพิ่มช่องว่างเพิ่มเติมระหว่างroupingByและ{?
Kevin Cruijssen

1
ฉันพบว่ามีความสุขฉันเปลี่ยน 11s อื่น ๆ และลงไปที่ 10
jrtapsell

มันคือ 10 chars แต่ substring ที่ยาวที่สุดไม่ใช่roupingBy(ซึ่งคือ 9 chars) แต่eachCount(มีช่องว่างท้าย)
Erik the Outgolfer

roupingBy มีพื้นที่ต่อท้าย (มองเห็นได้ใน markdown แต่ renderer ที่ดูเหมือนว่าจะตัดมัน)
jrtapsell

จัดการเพื่อลดให้เหลือ 9 แก้ไขปัญหาการตัดแต่ง
jrtapsell


0

05AB1E , 22 ไบต์ | คะแนน: 2

Œ  ʒ  D  Ù  Q  }  é  ¤

-1 คะแนน + 7 ไบต์ขอบคุณ HeebyJeeby

ลองออนไลน์!


05AB1E , 15 ไบต์ | คะแนน: 3

Œ ʒ D Ù Q } é ¤

ลองออนไลน์!


05AB1E , 8 ไบต์ | คะแนน: 8

ŒʒDÙQ}é¤

ลองออนไลน์!


05AB1E สามารถทำอะไรที่ค่อนข้างถูกกว่าจริง ๆ แล้วการเพิ่มช่องว่างใน 05AB1E ไม่ได้ทำอะไรเลย

หากมีข้อโต้แย้งฉันสามารถใช้´และเหมือนตัวละครอื่น ๆ 7 ตัว


1
@HeebyJeebyMan เพราะฉันเป็นคนปัญญาอ่อนมีปัญหากับเรื่องนั้นเหรอ?
Magic Octopus Urn

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