C 번호 - 178 169 157 자
이것은 999와 같은 숫자가 000으로 오버 플로우 될 수 있고-+ ,. E는 숫자의 일부가 아니라고 가정합니다.
class T{static void Main(){var a="".ToCharArray();for(int b=1,c,i=a.Length;i-->0;b=48>c|c>57?7:b>0?c>56?a[i]='0':++a[i]*0:b)c=a[i];System.Console.Write(a);}}
더 읽기 쉬운 형태 :
class T
{
static void Main()
{
var a="7teststring134this 123test string59 100".ToCharArray();
for (int b=3, c, i=a.Length; i-->0;
b=48>c|c>57
?7
:b>2
?c>56?a[i]='0':++a[i]*0
:b
) c=a[i];
System.Console.Write(a);
System.Console.ReadKey();
}
}
나는 여기에 새롭고 전에 코드 골프를 시도한 적이 없으며 시도해 보았습니다. :)
누구든지 그것을 더 짧게 할 아이디어가 있는지 궁금합니다 ...
C #에 참여하려면 실제 코드 주위에 필요한 모든 프레임 워크를 생략 할 수 있다면 좋을 것입니다 .82 문자 만 있고 강력한 시스템 기능을 호출하지 않고도 가능합니다.
포인터 (182 문자)와 동일합니다.
class T
{
unsafe static void Main()
{
char[] a="7teststring134this 123test string59 100".ToCharArray();
int b=3;
fixed (char* s=&a[0])
for (var p=s+a.Length; p-->s; )
b=*p<48|*p>57
?7
:b>2
?*p>56?*p='0':++*p*0
:b;
System.Console.Write(a);
System.Console.ReadKey();
}
}
이제 넘치지 않고 999 경우 (223 자)를 올바르게 처리합니다.
class T
{
static void Main()
{
var s=new System.Text.StringBuilder("9999teststring134this 123test string99 100");
for (int b=3, c, i=s.Length; i-->0; )
{
c=s[i];
b=48>c|c>57
?b>8?8:7
:b>2
?c>56?c-(s[i]='0'):++s[i]*0
:b;
if (b>8&i<1|b==8) s.Insert(i+9-b, '1');
}
System.Console.Write(s);
System.Console.ReadKey();
}
}
다른 오래된 파일은 표준 입력에서 읽고 재귀를 사용합니다.
namespace System {
using C=Console;
class T {
class t {
byte b=1;
string s="";
void R() {
var c=C.Read();
if (c>31) {
R();
if (48>c|c>57) b=1;
else if (b==1) c=c==57?48:++c*b--;
s=(char)c+s;
}
}
public t() {
R();
C.Write(s);
}
}
static void Main() {
new t();
C.ReadKey();
}
}
}
참고 : Console.ReadKey();문자열 자체는 계산되지 않아야합니다.
나는 이것을 이미 여러 번 개선했다. 더 많은 개선의 여지가 여전히 남아 있습니다.)라고 말하고 싶습니다. 길이가 미안하지만 다른 버전이 그들을 유지하기에 충분히 재미 있다고 생각합니다 ...