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 ) ; }
최소한 32 비트 MinGW에서 작동합니다 (최적화가 비활성화 된 상태). 단일 키워드를 사용하지 않습니다.
gcc 및 clang과 함께 TIO에서도 작동 합니다. 온라인에서 사용해보십시오!(감사합니다 @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
)
;
}
온라인으로 사용해보십시오!
11122324455
Jonathan Allan은 첫 번째 개정판에서 올바르게 처리하지 못했음을 깨달았습니다.