Schreiben Sie ein Programm, das auf so vielen verschiedenen Plattformen wie möglich unterschiedliche Verhaltensweisen erzeugt. Jede unterschiedliche Plattform vergibt einen Punkt (einschließlich einer anfänglichen Plattform, was bedeutet, dass Sie nicht weniger als 1 * erzielen können). Mechanismen zur Bestimmung der Ziel- / Ausführungsplattform (z. B. durch Plattformkompilierungsanweisungen oder APIs wie .NETs Environment.OSVersion.Platform) dürfen nicht verwendet werden. Die Antwort mit der höchsten Punktzahl gewinnt (wobei Upvotes die Tiebreaker sind).
Betrachten Sie beispielsweise das folgende Programm in der Blub-Sprache : print (1+2)
. Wenn dieses Programm 3
auf jeder Plattform gedruckt würde, auf der es kompiliert und ausgeführt wird, wäre seine Punktzahl 1. Wenn es jedoch aus irgendeinem Grund 4
auf PDP-11 drucken würde, wäre seine Punktzahl 2. usw. Aber das Folgende Ein C-Snippet ist beispielsweise ein ungültiger Eintrag : #ifdef WIN32 ... #endif
.
Definitionen / Details:
Unterschiedliche Plattform: Die Kombination von a) der Hardwarearchitektur b) dem Betriebssystem und seiner Hauptversionsnummer (z. B. 1.0.0 und 1.1.0 gelten als dasselbe Betriebssystem)
Unterschiedliches Verhalten: Zwei Verhaltensweisen sind gleich, wenn sie ähnliche Nebenwirkungen hervorrufen (z. B. das Erstellen derselben Datei mit demselben Inhalt) oder wenn es sich bei den Nebenwirkungen um Fehler derselben Art handelt. Wenn ein Programm beispielsweise auf zwei verschiedenen Plattformen segfault, die Meldung segfault auf diesen Plattformen jedoch unterschiedlich ist, wird dies immer noch als dasselbe Verhalten angesehen. Während ein Programm, das auf einer Plattform einen Nullteilungsfehler und auf einer anderen Plattform einen Stapelüberlauf (siehe, was ich dort gemacht habe?) erzeugt, ein anderes Verhalten erzeugt.
Alle undefinierten Verhaltensweisen werden als gleichwertig angesehen.
Das Programm muss auf allen Plattformen gleichwertig aufgerufen werden (dies bedeutet jedoch, dass Sie Befehlszeilenparameter übergeben können, wenn Sie dies wünschen).
* Nun, ich denke, Sie würden null Punkte erzielen, wenn Ihr Programm auf null Plattformen ausgeführt würde. Aber ähm ... Ja, egal.
quelle
1
unter Windows und2
OSX gedruckt wird , mit dem Detail, dass ich es als Python-Skript unter Windows und als C-Programm unter OSX ausführe?Antworten:
C.
Ich werde es mit einem lehrbuchartigen Beispiel versuchen:
64-Bit-Plattformdrucke: foo
32-Bit-Plattformdrucke: Balken
Little Endian Platforms: 67305985
Big Endian-Plattformen: 16909060
Es gibt also mindestens 4 Kombinationen.
Darüber hinaus haben einige sehr alte Plattformen
int
16-Bit definiert. Und einige Plattformen habenlong
als 64-Bit definiert. Das Ergebnis wird also auch anders sein.C war ziemlich plattformspezifisch, wenn Sie tief genug graben. Es ist nicht schwer, Tausende von Kombinationen zu finden (2 ^ 10 +).
quelle
\n
vs\n\r
on * nix und Windows?printf("\n");
gibt\r\n
unter Windows aus (das Umleiten von stdout in eine Datei unter Windows führte zu einer 2-Byte-Datei).16/32/64-Bit x86 / x64-Assembly, 16 Byte, 4 Kombinationen
Bytecode:
Demontage (16-Bit):
Demontage (32-Bit):
Demontage (64-Bit):
Es gibt
Folgendes zurück: - CX = 0000 im 16-Bit-Modus;
- ECX = 10000 im nicht virtuellen 32-Bit-Modus;
- ECX = (zufällig) im virtuellen 32-Bit-Modus;
- RCX = FFFFFFFFFFFFFFFF im 64-Bit-Modus.
quelle