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.


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

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


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().


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

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

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

        Console.ReadLine();
    }
}

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

Selamat datang di komunitas!
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Terima kasih. Ini adalah situs yang fantastis !!!
George Vovos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.