Wtrysk kodu działa również w języku C #!


15

Biorąc pod uwagę następujący program wyjściowy C # False, wstaw „złośliwy” wiersz kodu, tak aby program generował True.

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

Twoja odpowiedź powinna składać się z ciągu, który zastępuje drugi średnik i powoduje, że program wypisuje Truecałość Truei nic oprócz True(nawet nowego wiersza). Musi to zrobić, jeśli stdout jest drukowane na konsoli i jeśli stdout jest przekierowywany do pliku.

Najkrótsza odpowiedź wygrywa.


Jakie jest Twoje obiektywne kryterium wygranej?
JB

@JB Czy puzzle wymagają kryterium wygranej? Będzie edytować.
Kendall Frey

W większości reaguję na uwagę związaną z golfem, ale chodzi o to, która odpowiedź będzie akceptowana?
JB

@JB Najkrótsza odpowiedź jest najlepszą odpowiedzią.
Kendall Frey

Więc to jest golf golfowy, prawda?
JB

Odpowiedzi:


17

52 znaki

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

więc całość staje się:

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

Przepraszamy za edycję pytania w środku odpowiedzi. Nowe linie nie są już dozwolone, musisz użyć Write.
Kendall Frey

Ok, zmieniłem się WriteLinenaWrite
Danko Durbić

1
Prawdopodobnie możesz zaoszczędzić trochę bajtów, zastępując wyjście for(;;);, nic, co widziałem, nie wymaga zakończenia programu ...?
Joachim Isaksson

@JoachimIsaksson Tak, spełnia określone wymagania.
Kendall Frey

4
}static Program(){System.Console.Write(0<1);for(;;);zawsze może zostać}static Program(){for(System.Console.Write(0<1);;);
NPSF3000,

7

C #, 51 znaków

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

Działa tylko na standardowym wyjściu


Najpierw próbowałem, niestety nie zadziała z powodu początkowej WriteLine.
Vereos

3
Teraz jest Write: / Nie rozumiem, jak moglibyśmy rozwiązać ten problem, jeśli ciągle się zmienia ...
Vereos

@ Vereos Chciałem usunąć niejednoznaczność „nowej linii lub żadnej nowej linii”.
Kendall Frey

3
Nie potrzebujesz 2 wystąpień Console.Writei możesz użyć \rzamiast 5 \bsekund. Console.Write("\rTrue ");
Brian S

Nie sądzę, że spełnia kryteria. W rzeczywistości generuje najpierw wartość False, która później zostaje zastąpiona przez True.
mikrobiolog

1

Możesz uogólnić odpowiedź RamonBozy, aby nadal działała, jeśli stdout zostanie przekierowany do pliku.

Zakładając, że program działa w systemie Mono w systemie Linux, z Mono.Posix.dllzaładowanym zestawem :

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

Wątpię, czy to działa w systemie Windows, ale prawdopodobnie jest to odpowiednik isatty().


1

83 ... WIP

Miałem nadzieję, że to zadziała, ale najwyraźniej „Fałsz” nie jest internowany, jak miałem nadzieję w moim kompilatorze

//}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];

bez golfa

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

To nie zadziała, jeśli stdout zostanie przekierowany.
Kendall Frey

0

Nie jestem pewien, czy jest to akceptowane.
Pytanie nie mówi nic o opcjach kompilatora, więc zakładam, że mogę zmienić punkt wejścia aplikacji.
55 znaków, 3 więcej niż zaakceptowana odpowiedź

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

Pełny

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

Witamy w społeczności!
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Dzięki. To fantastyczna strona !!!
George Vovos,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.