Injeksi Kode juga berfungsi di C #!

15

Dengan keluaran program C # berikut False, suntikkan baris kode 'jahat' sedemikian rupa sehingga output program True.

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

Jawaban Anda harus terdiri dari string yang menggantikan titik koma kedua, dan menyebabkan program untuk menghasilkan True, keseluruhan Truedan tidak ada tetapi True(bahkan bukan baris baru). Ini harus melakukan ini jika stdout dicetak ke konsol, dan jika stdout diarahkan ke file.

Jawaban terpendek menang.

Kendall Frey
sumber
Apa kriteria kemenangan objektif Anda?
JB
@ JP Apakah teka-teki membutuhkan kriteria kemenangan? Akan diedit.
Kendall Frey
Saya kebanyakan bereaksi terhadap komentar kode-golf, tetapi intinya adalah: mana yang akan menjadi jawaban yang diterima?
JB
@ JP Jawaban singkat adalah jawaban terbaik.
Kendall Frey
Nah, ini kode-golf, bukan?
JB

Jawaban:

17

52 karakter

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

jadi semuanya menjadi:

class Program
{
    static void Main()
    {
        System.Console.Write( "False" );
    }
    static Program()
    {
        System.Console.Write( 0 < 1 ); 
        for ( ; ; ) ;
    }
}
Danko Durbić
sumber
Maaf karena mengedit pertanyaan di tengah jawaban Anda. Baris baru tidak lagi diizinkan, Anda harus menggunakannya Write.
Kendall Frey
Oke, saya sudah berubah WriteLinekeWrite
Danko Durbić
1
Anda mungkin dapat menyimpan beberapa byte dengan mengganti keluar Anda dengan for(;;);, tidak ada yang saya lihat mengharuskan program berakhir ...?
Joachim Isaksson
@ JoachimIsaksson Ya, yang memenuhi persyaratan seperti yang ditentukan.
Kendall Frey
4
}static Program(){System.Console.Write(0<1);for(;;);selalu bisa menjadi}static Program(){for(System.Console.Write(0<1);;);
NPSF3000
7

C #, 51 karakter

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

Hanya akan bekerja pada output standar

RamonBoza
sumber
Hal pertama yang saya coba, sayangnya tidak berhasil karena inisial WriteLine.
Vereos
3
Sekarang Write: / Saya tidak mengerti bagaimana kita bisa menyelesaikan ini jika terus berubah ...
Vereos
@Vereos Saya ingin menghapus ambiguitas 'baris baru atau tidak ada baris baru'.
Kendall Frey
3
Anda tidak perlu 2 contoh Console.Write, dan Anda bisa menggunakan \rbukannya 5 \bdetik. Console.Write("\rTrue ");
Brian S
Saya tidak berpikir itu memenuhi kriteria. Ini sebenarnya menghasilkan False terlebih dahulu, yang kemudian ditimpa oleh True nanti.
microbian
1

Anda dapat menggeneralisasi jawaban RamonBoza untuk tetap berfungsi jika stdout diarahkan ke file.

Dengan asumsi program berjalan di bawah Mono di Linux, dengan majelis Mono.Posix.dlldimuat:

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

Saya ragu ini bekerja pada Windows, tetapi mungkin ada yang setara dengan isatty().

Siput mekanik
sumber
1

83 ... WIP

Saya berharap ini akan berhasil, tetapi tampaknya "Salah" tidak diinternir seperti yang saya harapkan di kompiler saya

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

ungolfed

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];
    }
}
NPSF3000
sumber
1
class Program
{
    static void Main()
    {
        System.Console.Write("False");

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

        Console.ReadLine();
    }
}
satarupa
sumber
Ini tidak akan berfungsi jika stdout diarahkan.
Kendall Frey
0

Tidak yakin apakah ini diterima.
Pertanyaannya tidak mengatakan apa-apa tentang opsi kompiler jadi saya berasumsi saya dapat mengubah titik masuk aplikasi.
55 karakter, 3 lebih banyak dari jawaban yang diterima

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

Penuh

class Program
{
    static void Main()
    {
        System.Console.Write("False");
    }
    class P
    {
        static void Main() { System.Console.Write(1 > 0); }
    }
}
George Vovos
sumber
Selamat datang di komunitas!
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Terima kasih. Ini adalah situs yang fantastis !!!
George Vovos