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は、私の最初のリビジョンでは正しく処理されなかったことに気付きました。