Escriba un programa que produzca comportamientos diferentes en tantas plataformas diferentes como pueda. Cada plataforma diferente otorga un punto (incluida una plataforma inicial, lo que significa que no puede obtener menos de 1 *). Los mecanismos destinados a determinar la plataforma de destino / ejecución (por ejemplo, a través de declaraciones de compilación de plataforma o API como .NET's Environment.OSVersion.Platform) no deben usarse. La respuesta con la puntuación más alta gana (donde los votos a favor son los desempates).
Por ejemplo, considere el siguiente programa en el lenguaje de Blub: print (1+2)
. Si este programa se imprimiera 3
en cada plataforma en la que se compila y se ejecuta, su puntaje sería 1. Sin embargo, si, por alguna razón, se imprimiera 4
en PDP-11, su puntaje sería 2. Etc. Pero lo siguiente C fragmento, por ejemplo, es una entrada no válida: #ifdef WIN32 ... #endif
.
Definiciones / detalles:
Plataforma distinta: la combinación de a) la arquitectura de hardware b) el sistema operativo y su número de versión PRINCIPAL (por ejemplo, 1.0.0 y 1.1.0 se consideran el mismo sistema operativo)
Comportamiento diferente: dos comportamientos son iguales si producen efectos secundarios similares (por ejemplo, crear el mismo archivo con el mismo contenido), o si los efectos secundarios son errores del mismo tipo. Por ejemplo, si un programa falla en dos plataformas distintas, pero el mensaje de seguridad es diferente en estas plataformas, todavía se considera el mismo comportamiento; mientras que un programa que produce un error de división cero en una plataforma y un error de desbordamiento de pila (¿ves lo que hice allí?;) en otra produce un comportamiento diferente.
Todos los comportamientos indefinidos se consideran equivalentes.
El programa debe invocarse de manera equivalente en todas las plataformas (sin embargo, esto significa que puede pasar los parámetros de la línea de comandos si así lo desea)
* Bueno, supongo que obtendrías cero si tu programa se ejecutara en plataformas cero. Pero um ... Sí, no importa.
fuente
1
en Windows y2
en OSX, con el detalle de que lo ejecuto como un script Python en Windows y un programa C en OSX?Respuestas:
C
Lo intentaré con un ejemplo de libro de texto:
Impresiones de plataforma de 64 bits: foo
Impresiones de plataforma de 32 bits: barra
Little Endian Platforms: 67305985
Plataformas Big Endian: 16909060
Entonces hay al menos 4 combinaciones.
Además de eso, algunas plataformas muy antiguas se han
int
definido como 16 bits. Y alguna plataforma se halong
definido como 64 bits. Entonces el resultado será diferente también.C ha sido bastante específico de la plataforma, si cavas lo suficientemente profundo. No es difícil encontrar miles de combinaciones (2 ^ 10 +).
fuente
\n
vs\n\r
on * nix y windows?printf("\n");
se genera\r\n
en Windows (la redirección de stdout a un archivo en Windows resultó en un archivo de 2 bytes).Ensamblado x86 / x64 de 16/32/64 bits, 16 bytes, 4 combinaciones
Código de bytes:
Desmontaje (16 bits):
Desmontaje (32 bits):
Desmontaje (64 bits):
Devuelve:
- CX = 0000 en modo de 16 bits;
- ECX = 10000 en modo no virtual de 32 bits;
- ECX = (aleatorio) en modo virtual de 32 bits;
- RCX = FFFFFFFFFFFFFFFF en modo de 64 bits.
fuente