코드 삽입은 C #에서도 작동합니다!


15

다음과 같은 C # 프로그램 출력이 주어지면 프로그램이 출력 False하도록 '악의적 인'코드 줄을 삽입하십시오 True.

class Program
{
    static void Main()
    {
        System.Console.Write("False");
        ;
    }
}

당신의 대답은 두 번째 세미콜론을 대체하는 문자열로 구성되어야하며 프로그램 True이 전체 True와 아무것도 출력 True하지 않습니다 (새 줄조차도). stdout이 콘솔에 인쇄되고 stdout이 파일로 경로 재 지정된 경우이를 수행해야합니다.

가장 짧은 답변이 이깁니다.


당신의 객관적인 승리 기준은 무엇입니까?
JB

@JB 퍼즐에 승리 기준이 필요합니까? 편집합니다.
Kendall Frey

나는 주로 코드 골프 말에 반응하고 있지만 요점은 다음과 같습니다.
JB

@JB 짧은 답변이 가장 좋습니다.
Kendall Frey

그런데 그것은 이다 코드 골프는, 다음, 그렇지?
JB

답변:


17

52 자

}static Program(){System.Console.Write(0<1);for(;;);

모든 것이 다음과 같이됩니다.

class Program
{
    static void Main()
    {
        System.Console.Write( "False" );
    }
    static Program()
    {
        System.Console.Write( 0 < 1 ); 
        for ( ; ; ) ;
    }
}

답변 중간에 질문을 편집 해 주셔서 감사합니다. 줄 바꿈이 더 이상 허용되지 않습니다 Write. 를 사용해야 합니다.
Kendall Frey

좋아, 내가 변경했습니다 WriteLineWrite
단코 Durbić

1
exit를로 바꾸어 바이트를 절약 할 수 있습니다 for(;;);. 프로그램을 종료 할 필요가 없습니다 ...?
Joachim Isaksson

@JoachimIsaksson 예, 지정된 요구 사항을 충족합니다.
Kendall Frey

4
}static Program(){System.Console.Write(0<1);for(;;);항상 될 수}static Program(){for(System.Console.Write(0<1);;);
NPSF3000

7

C #, 51 자

Console.Write("\b\b\b\b\b");Console.Write("True ");

표준 출력에서만 작동합니다


가장 먼저 시도한 것은 불행히도 초기 때문에 작동하지 않습니다 WriteLine.
Vereos

3
이제는 Write: // 계속
바뀌면

@Vereos 나는 'newline or no newline'의 모호성을 제거하고 싶었습니다.
Kendall Frey

3
의 인스턴스 2 개가 필요하지 않으며 5 대신 Console.Write사용할 수 있습니다 . \r\bConsole.Write("\rTrue ");
Brian S

나는 그것이 기준을 충족시키지 않는다고 생각합니다. 실제로 False를 먼저 출력 한 다음 나중에 True로 덮어 씁니다.
microbian

1

stdout이 파일로 리디렉션되면 RamonBoza의 대답을 일반화하여 계속 작동 할 수 있습니다.

프로그램이 Linux에서 Mono로 실행되고 어셈블리가 Mono.Posix.dll로드 되었다고 가정합니다 .

if(Mono.Unix.Native.Syscall.isatty(1))
{
    Console.Write("\rTrue ");
}
else
{
    // Truncate the output file first
    Console.OpenStandardOutput().SetLength(0);
    Console.Write("True");
}

나는 이것이 Windows에서 작동하는지 의심하지만,와 동등한 것일 수 isatty()있습니다.


1

83 ... WIP

나는 이것이 효과가 있기를 바랐지만 컴파일러에서 희망했던 것처럼 "거짓"이 억류되지 않았다.

//}unsafe static Program(){fixed(char*f="False"){*(long*)f=0x65007500720054;*(f+4)=' ';}
}unsafe static Program(){fixed(char*f="False")for(int i=5;i-->0;)*(f+i)="True "[i];

언 골프

class Program
{
    static void Main(string[] args)
    {
        Console.Write("False");
    }

    unsafe static Program()
    {
        fixed (char* f = "False") for (int i = 5; i-- > 0; ) *(f + i) = "True "[i];
    }
}

1
class Program
{
    static void Main()
    {
        System.Console.Write("False");

        System.Console.Clear(); System.Console.Write("True");

        Console.ReadLine();
    }
}

stdout이 리디렉션되면 작동하지 않습니다.
Kendall Frey

0

이것이 허용되는지 확실하지 않습니다.
이 질문은 컴파일러 옵션에 대해 아무 말도하지 않으므로 앱의 진입 점을 변경할 수 있다고 가정합니다.
허용되는 것보다 55 자, 3 자 이상

}class P{static void Main(){System.Console.Write(1>0);}

완전한

class Program
{
    static void Main()
    {
        System.Console.Write("False");
    }
    class P
    {
        static void Main() { System.Console.Write(1 > 0); }
    }
}

커뮤니티에 오신 것을 환영합니다!
Outgolfer Erik

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ 감사합니다. 이것은 환상적인 사이트입니다!
George Vovos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.