¡La inyección de código también funciona en C #!


15

Dado el siguiente resultado del programa C # False, inyecte una línea de código 'malicioso' de modo que el programa salga True.

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

Su respuesta debe consistir en una cadena que reemplace el segundo punto y coma, y ​​haga que el programa muestre Truetodo, Truey nada más que True(ni siquiera una nueva línea). Debe hacer esto si stdout se imprime en la consola y si stdout se redirige a un archivo.

La respuesta más corta gana.


¿Cuál es su criterio objetivo ganador?
JB

@JB ¿Los acertijos necesitan un criterio ganador? Se editará
Kendall Frey

Principalmente estoy reaccionando al comentario del código de golf, pero el punto es el siguiente: ¿cuál será la respuesta aceptada?
JB

@JB La respuesta más corta es la mejor respuesta.
Kendall Frey

Bueno, es código golf, entonces, ¿no?
JB

Respuestas:


17

52 caracteres

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

entonces todo se convierte en:

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

Perdón por editar la pregunta en medio de tu respuesta. Las nuevas líneas ya no están permitidas, tendrás que usarlas Write.
Kendall Frey

Ok, me he cambiado WriteLineaWrite
Danko Durbić el

1
Probablemente podría guardar algunos bytes reemplazando su salida con for(;;);, ¿nada de lo que he visto requiere que el programa termine ...?
Joachim Isaksson

@JoachimIsaksson Sí, cumple con los requisitos especificados.
Kendall Frey

44
}static Program(){System.Console.Write(0<1);for(;;);siempre podría convertirse}static Program(){for(System.Console.Write(0<1);;);
NPSF3000

7

C #, 51 caracteres

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

Solo funcionará en salida estándar


Lo primero que probé, desafortunadamente no funcionará debido a la inicial WriteLine.
Vereos

3
Ahora es Write: / No entiendo cómo podríamos resolver esto si sigue cambiando ...
Vereos

@Vereos Quería eliminar la ambigüedad de 'nueva línea o no nueva línea'.
Kendall Frey

3
No necesita 2 instancias de Console.Write, y podría usar en \rlugar de 5 \bs. Console.Write("\rTrue ");
Brian S

No creo que cumpla con los criterios. En realidad, genera False primero, que luego es sobrescrito por True más tarde.
microbio

1

Puede generalizar la respuesta de RamonBoza para seguir funcionando si stdout se redirige a un archivo.

Suponiendo que el programa se ejecute en Mono en Linux, con el ensamblado Mono.Posix.dllcargado:

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

Dudo que esto funcione en Windows, pero probablemente haya un equivalente a isatty().


1

83 ... WIP

Esperaba que esto funcionara, pero aparentemente "False" no está siendo internado como esperaba en mi compilador

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

sin golf

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

Esto no funcionará si stdout se redirige.
Kendall Frey

0

No estoy seguro si esto es aceptado.
La pregunta no dice nada sobre las opciones del compilador, así que supongo que puedo cambiar el punto de entrada de la aplicación.
55 caracteres, 3 más que la respuesta aceptada

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

Lleno

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

¡Bienvenido a la comunidad!
Erik the Outgolfer

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Gracias. ¡¡¡Este es un sitio fantastico!!!
George Vovos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.