Der entschlossene Real Programmer kann Fortran-Programme in jeder Sprache schreiben.
von echten Programmierern verwenden Pascal nicht
Ihre Aufgabe ist es, ein Programm in der Programmiersprache Ihrer Wahl zu schreiben, Sie dürfen jedoch nur eine andere Sprache verwenden. Das heißt, wirf alle Kodierungskonventionen aus einer Sprache weg und ersetze sie durch Kodierungskonventionen aus einer anderen Sprache. Je mehr desto besser. Stellen Sie Ihr Programm so ein, als ob es in einer anderen Sprache geschrieben wäre.
Zum Beispiel könnte ein Python-Fan, der Java hasst, folgendes Python-Programm in Java schreiben:
void my_function() {
int i = 9 ;
while(i>0) {
System.out.println("Hello!") ;
i = i - 1 ;}}
Pascal-Enthusiast, der gezwungen ist, C zu verwenden, könnte Folgendes schreiben:
#define begin {
#define end }
#define then
#define writeln(str) puts(str)
if (i == 10) then
begin
writeln("I hate C");
end
Du musst ein komplettes Programm schreiben. Das Programm muss nichts Nützliches tun.
Viel Glück. Dies ist ein Beliebtheitswettbewerb, bei dem der Code mit den meisten Stimmen gewinnt!
quelle
.litcoffee
. Es könnte helfen.Antworten:
C in C ++
quelle
char*
stattstd::string
).char *argv[]
!x86-Assembly in GNU C
Nein, ich habe nicht nur das
asm
Schlüsselwort verwendet, da die festgestellte Frage für echte Programmierer ist ... dies sollte auf ARM einwandfrei funktionieren.(Nur um den Punkt zu beweisen, habe ich die Assembly überhaupt nicht "geschrieben" - es ist die Ausgabe, die von
GCCClang (503.0.38) für den kommentierten Code oben erzeugt wurde und blind in Makros übersetzt wurde.)Dies funktioniert nur im 32-Bit-Modus. Das ist in Ordnung, da echte Programmierer sowieso auf die Wortgröße codieren.
Schau dir nur all diese Darsteller an. Casts bedeuten, dass ich ein echter Programmierer bin als der Compiler, oder?
quelle
call
.for pass=1:3...next
haben. Die Ausführung im BASIC-Interpreter hat es zusammengestellt.Englisch in C
Irgendwelche Ideen, um das zu beseitigen
;
?quelle
the
zweimal definieren ?#define . ;
Brainfuck in JavaScript
Javascript ist eine schwierige Sprache! Lass uns Brainfuck benutzen, eine verständlichere Sprache: o)
Ich glaube, ich habe einen Brainfuck-Interpreter in Javascript geschrieben.
Das obige Beispiel gibt
Hello World!
die Eingabe einfach aus und ignoriert sie (kein,
Symbol).Das funktioniert aber auch mit Eingängen! Zum Beispiel versuchen ,
,+>,+>,+>,+<<<.>.>.>.
und geben Siegolf
den Dialog in. Die nächsten Zeichen in der ASCII-Tabelle werden ausgegeben:hpmg
EDIT : Kurze Erklärung für Leute, die Brainfuck nicht kennen.
Stellen Sie sich ein unendliches Array von Ganzzahlen vor
a
, die überall auf Null initialisiert sind, einen Zeiger auf ein Element dieses Arraysi
und eine Benutzereingabeu
.Brainfuck ist sehr leicht zu lernen, aber schwer zu schreiben:
+
Inkremente zum aktuellen Wert:a[i]++
-
dekrementiert es:a[i]--
>
Lässt den Zeiger auf das nächste Element zeigen:i++
<
der Vorherige :i--
[
und]
definieren Sie eine Schleife, die abbricht, wenn der aktuelle Wert Null ist:while (a[i]) { ... }
.
Aktuelles Element drucken:String.fromCharCode(a[i])
,
Setzt das aktuelle Element mit Benutzereingabe:u.charCodeAt(...)
quelle
replace
Anweisungen das Programm nicht beeinflussen?--i
schneller alsi--
? Scheint seit Jahren falsch: jsperf.com/decrementgolf .Ich denke, der brillante Lennart Augustsson hat dies bereits zweimal gewonnen.
Hier ist zunächst ein Beispiel für seine Implementierung von BASIC als Haskell Monadic DSL am Wochenende ab 2009:
Es funktioniert durch Überladen des Nummerntyps. Die Zeilennummern sind wirklich Funktionen, die Argumente akzeptieren. Der Rest der Zeile ist Argumente für die Funktion. Die Funktion gibt eine Darstellung des abstrakten Syntaxbaums zurück, an der der BASIC-Interpreter arbeiten kann.
Ich empfehle dir auch, dir Augustssons Teilnahme am 2006 International Obfuscated C Contest anzuschauen, bei dem er es geschafft hat, sich in 4 km zu quetschen:
Sie können dieselbe Datei gemeinsam nutzen, da der Byetecode in C-Kommentaren platziert wird.
Es ist ein paar Jahre her, dass ich Augustssons Arbeit verfolgt habe, also gibt es vielleicht noch andere großartige Dinge, die er sich seitdem ausgedacht hat ...
quelle
PHP und Javascript
Dies ist eine Mehrsprachigkeit:
Sie können diesen Code in beiden Sprachen ausführen:
Der Trick dabei ist, dass Javascript Escape-Sequenzen in Strings verwendet, die mit
'
und beginnen"
.Andererseits verwendet PHP Escapesequenzen nur in Strings, die mit
"
und beginnen<<<
.Dann deklarieren wir die Funktion
printf
, dieprint
einer formatierten Zeichenkette in PHP ähnelt, diese aber ausgibt.PHP setzt voraus , dass vars mit beginnen
$
, während Javascript dies einfach erlaubt.quelle
Array(…)
JS und es ist eindeutigarray(…)
in PHP.[…]
wäre weit besser;)!Array()
in JS verwenden oder nicht: Es ist mir wichtig, dass ich einen WAHREN Polyglott habe. Ich mache mit diesem Code eines der schlimmsten JS-Verbrechen, aber alles, was ich will, ist, dass er ausgeführt wird und in beiden genau dasselbe tut, aber wie JS und PHP zur gleichen Zeit aussieht.[...]
ist in PHP <5.4.0 ungültig, was schlecht ist ....... Wenn ich das in PHP 4, 5 oder Javascript wirf, erwarte ich, dass es funktioniert, anstatt überall Syntaxfehler zu verursachen.[…]
, der in PHP als Standard erscheint und daher für Ihr Ziel in Ordnung ist. Und übrigens PHP <5.4? Zeit für ein Update, Mann ...Array
ist der RECHTE Name des Konstruktors des Array-Objekts. Grundsätzlich ist using[]
dasselbe wieArray()
. Ich sehe nichts schlechtes daran. Aber ich habe eine einfache Frage: Funktioniert? (btw, ich habe auf PHP 5.3.28 bei der Arbeit zu verwenden.)Brainfuck in JS
quelle
><,.-
Dies ist einer der Gewinner des IOCCC 2005 , ein C-Programm, das, abgesehen von dieser Reihe von Definitionen, wie ein Java-Programm aussieht:
quelle
C ++ in C
OK, Sie sind ein C ++ - Programmierer, müssen aber C verwenden? Kein Problem, Sie müssen nur einige zusätzliche Header schreiben, die in C fehlen. Beispiel: Hier ist ein gültiges Hello World-Programm in C:
iostream
Schreiben Sie in die zusätzliche Header-Datei :In Datei
string
schreibenhelloworld.c
Schreiben Sie in die Datei (Ihren aktuellen C-Code)Und beim Kompilieren
helloworld.c
mit einem C - Compiler anweisen , den Compiler auch zu suchen ,<...>
Dateien Header , wo Sie die Dateien gespeichertiostream
undstring
, zum Beispiel, wenn Sie mit gcc kompilieren und die Dateien setzeniostream
undstring
im aktuellen Verzeichnis, kompiliert mitHinweis: Der
volatile
in-Headeriostream
dient dazu, ein warnfreies Kompilieren auch bei maximaler Warnstufe zu ermöglichen (ein Lesevorgang aus einer flüchtigen Variablen wird als wirksam angesehen).quelle
volatile
, und welche Art von Warnung?CQL - Caffeinated Query Language
(oder "SQL on Caffeine")
Das war vielleicht etwas zu ehrgeizig. Hier ist ein Versuch, deklarativen SQL-Code (ish) in CoffeeScript zu schreiben . Dies erfordert die ECMAScript 6-Proxy-Funktion . Sie können es im Knoten mit testen
--harmony-proxies
.Lassen Sie uns eine Vorlage zum Definieren von Proxys einrichten. (Entnommen aus Benvies Kommentar zu diesem Thema )
Definieren Sie nun ein Proxy-Objekt und einige verdächtige globale Variablen und Funktionen:
Nun, das war ziemlich viel Setup! Aber jetzt können wir Folgendes tun (Eingabe / Ausgabe in einem Konsolenstil):
Es ist kein Polyglot, aber darum geht es nicht wirklich. Ich weiß, dass dies
@
für Variablen in SQL verwendet wird, aber ich benötige alle@
s für Spalten- und Tabellennamen, da ich keinen Weg gefunden habe, das globale Objekt als Proxy zu verwenden (und es würde mich nicht wundern, wenn es wirklich nicht möglich ist - und für ein guter Grund).Ich habe auch einige Klammern in Klammern gesetzt (insbesondere nach
VALUES
undIN
). Leider konnte ich überhaupt nicht herausfinden, wie man normale Bedingungen zulässtyear > 2000
, weil sie sofort zu einem Booleschen Wert ausgewertet würden.Trotzdem ähnelt dies stark SQL und ist definitiv eher deklarativ als imperativ / funktional / objektorientiert, sodass es sich für die Frage eignen sollte. Eigentlich denke ich, wenn ich den Code ein wenig überarbeitet und ein paar weitere Funktionen unterstützt habe, könnte dies ein nützliches CoffeeScript-Modul sein.
Wie auch immer, das hat Spaß gemacht! :)
Für diejenigen, die nicht mit CoffeeScript vertraut sind, werden die SQL-Abfragen mit folgendem JavaScript kompiliert:
quelle
@
in SQL wird für Sitzungsvariablen verwendet.@
s für Spalten- und Tabellennamen.Visual Basic 6 (in JavaScript)
Es funktioniert auch in VBScript.
quelle
F # in C ++
Eher einfallsloser und widerlicher Missbrauch des Präprozessors. Ich dachte, es würde Spaß machen, C ++ so zu ändern, dass es wie eine völlig unterschiedliche Sprache aussieht, anstatt ein paar Aliase zu verwenden, damit es wie Java oder PHP aussieht. Ich erwarte nicht wirklich, dass dies eine Menge positiver Stimmen einbringt, es ist nur zum Spaß.
Probieren Sie es hier aus .
Leider reicht es nicht aus, etwas an STDOUT zu schreiben, obwohl ich mir sicher bin, dass jemand, der genug Hexerei draufwirft, es dazu bringen könnte, mehr zu tun.
quelle
exit 0
oder nur sein0
.Python und ... niemand wird es erraten (edit: dc)
Hier ist ein gültiger Python-Code, aber tatsächlich ist das Programm in einer ganz anderen Sprache geschrieben:
Der Code wird in beiden Sprachen ohne Fehler ausgeführt.
Die Kombination ist sehr verrückt; Ich würde gerne ein oder zwei Tage warten, bevor ich erkläre, welche Sprache die andere ist. Bitte hinterlassen Sie Kommentare zum Erraten.
edit: Die Sprache war die Stack-basierte Sprache von DC. Sie können hier bekannte Schlüsselwörter wie sehen
for
,if
,or
,in
, sondern nur die Buchstaben von Bedeutung! Das,
, was in dc keine Bedeutung hat, wird in ein Register umgewandelt, weil es das erste Mal nach dem Buchstaben erscheints
(dasselbe gilt für:
).quelle
Mit C ++ können Sie mit der InteLib-Bibliothek lisp-ähnlichen Code schreiben:
vgl. http://www.informatimago.com/articles/life-saver.html
quelle
C # in Whitespace
Okay, probieren Sie zuerst eine davon aus, und lassen Sie uns sehen, wie es geht.
Und für den Fall, dass die Formatierung durch das Platzieren von vier Leerzeichen vor jeder Zeile verpatzt wurde, ist dies wieder der Fall. für Leerzeichen und # für Tab:
quelle
HTML und CSS
Keine Programmiersprachen, aber… dieses Dokument ist gültiges HTML und CSS:
Dies funktioniert, da HTML-Kommentare aus historischen Gründen in Stylesheets zulässig sind. Ach ja, und jedes gültige HTML-Dokument ist auch ein gültiges PHP-Programm, das ist also auch PHP . :)
quelle
C in der Scala
Die Überbrückungsschicht emuliert eine romantischere Ära, in der Strings noch nullterminierte Bytearrays waren.
quelle
"This program does not take parameters!"
täuschte dichsed und APL
Mein Chef möchte, dass ich sed-Skripte schreibe, aber ich schreibe lieber den ganzen Tag über APL. Trotzdem ist er mit meiner Arbeit sehr zufrieden, da solche Skripte mit seiner Version von sed perfekt laufen:
Sie können es auf meiner neuen Website mit diesem Permalink versuchen . Es ist eine zu Javascript kompilierte Version von GNU APL. Die endgültige Veröffentlichung erfolgt später mit der offiziellen Veröffentlichung von GNU APL, Version 1.3, aber Sie können sie perfekt für Ihre Permalinks verwenden, wenn Sie GNU APL mögen.
quelle
C in Haskell
Da er
cmain
mitargc
oder nichts tutargv
, hat der Code für das Marshalling von Argumenten natürlich keine Wirkung, und da ercmain
immer 0 zurückgibt, ist der Zweig "else" der Anweisung "if" tot. Aber die "if" -Anweisung macht sowieso nichts.Alle geschweiften Klammern und Semikolons sind nicht erforderlich, ebenso wie die meisten Klammern und einige
do
Schlüsselwörter. Die "if" -Anweisung hätte geschrieben werden können alsif exitCode == 0 then exitWith ExitSuccess else exitWith (ExitFailure (fromIntegral exitCode))
.quelle
C ++ in Forth
Nicht die flexibelste Lösung, funktioniert aber, wenn genau wie abgebildet geschrieben.
quelle
Haskell in Java
("Vanille" Java 7, nicht Java 8) (Ja, ich weiß, dass das Boxen die Leistung beeinträchtigt, und selbst der Versuch, Funktionen höherer Ordnung zu verwenden, wird wahnsinnig wortreich: D)
Java hat eine sehr starre Syntax, daher habe ich versucht, den Code semantisch an den Haskell-Stil anzupassen, anstatt die Syntax zu ändern.
Bearbeiten - Teilfunktionsanwendung hinzugefügt.
(Ja, alles was dieser Wahnsinn macht ist rechnen
6!
)quelle
COBOL in AWK
Im Geiste des Zitats. Reines, unverfälschtes AWK, wie es von einem COBOL-Programmierer geschrieben wurde.
Die Aufgabe besteht darin, die Datensätze in einer Datei zu zählen. Diese frühe Entwicklungsversion zählt sich zum Testen. Die richtige Datei wird später bei Veröffentlichung von Unit Testing fest codiert ...
Wenn ich die Syntax-Hervorhebung dazu bringen könnte, phosphoreszierendes Grün auf Schwarz zu setzen, wäre das großartig ...
Sogar die Spaltennummern in dieser Zeile wurden korrigiert, das sind sieben Leerzeichen am Anfang jeder Zeile (noch nie zuvor in awk gemacht) und die langen print-Anweisungen in Spalte 72 werden gebrochen.
quelle
Brainfuck (oder irgendetwas anderes) in Racket
Das flexible Modul- und Makrosystem von Racket ermöglicht die Implementierung der Modulunterstützung für völlig neue Sprachen, sowohl für domänenspezifische als auch für allgemeine Zwecke. Sowohl Datalog als auch Algol 60 werden standardmäßig unterstützt. Die folgenden Programme sind also beide gültig:
Sie können auch Unterstützung für andere Sprachen hinzufügen: Siehe z. B. die Beschreibung von Danny Yoo zur Implementierung der Unterstützung für Brainfuck, die Racket-Programme wie die folgenden ermöglicht:
Und da die Unterstützung auf der Ebene der kompilierten Module hinzugefügt wird, ist es möglich, Module, die in verschiedenen Sprachen geschrieben wurden, zu verknüpfen oder einen Ausschnitt einer Sprache in ein Modul einzubetten, das in einer anderen Sprache geschrieben wurde.
quelle
SML in Java
Ich habe immer noch alten Code, als ich anfing, Java zu lernen und versuchte, ihn in einem funktionalen Stil zu verwenden. Leicht gereinigt:
quelle
Java in Perl
Kann als Regelverstoß gelten, ist mir aber egal. Offensichtlich soll es wie ein Java-Programm aussehen. Es werden 20 Fibonacci-Zahlen ausgegeben, falls dies nicht offensichtlich ist.
quelle
J und ... niemand wird es erraten (edit: dc)
Dies ist mein zweiter Eintrag; Hier ist ein Teil des gültigen J-Codes, der 1 zurückgibt:
Ich warte einen oder zwei Tage, bevor ich erkläre, in welcher anderen Sprache derselbe Code fehlerfrei ausgeführt wird. Hinterlassen Sie einfach Kommentare zum Erraten.
edit: Die andere Sprache ist die Stack-basierte Sprache aus dem sehr alten Unix-Rechner dc.
quelle
.,+-<>[]
Ihrem Programm enthalten sind, sodass Ihr Programm dem...[.]+
in Brainfuck entspricht, einem gültigen, aber sinnlosen Programm. Ein AFAIK-Brainfuck-Programm kann nur ungültig werden, wenn es nicht übereinstimmt[]
.DC läuft eine PostScript-Datei
dc kann den folgenden Code fehlerfrei ausführen:
quelle
ML / (Strict) Haskell in Java
Dies ist aus einem tatsächlichen realen Projekt. Es nutzt persistente unveränderliche Datenstrukturen und verwendet eine Rekursion, auch wenn dies nicht erforderlich ist. Eigentlich ist es eher wie Kore (die Sprache, die das Projekt implementiert) in Java, aber der Stil ist im Grunde der gleiche wie in ML. Die Philosophie von Kore ist jedoch, dass der Autor seinen Code nicht formatieren sollte. Daher wird auch kein Java-Code formatiert (er wird von Eclipse automatisch formatiert).
lösche n Elemente aus einer Liste :
In ML / Haskell, wo Sie das Muster abgleichen würden, um Kopf und Schwanz zu extrahieren, sagen Sie
list.cons().x
undlist.cons().tail
.Ein Element in eine Liste einfügen :
Liste ist wörtlich definiert, wie der algebraische Datentyp definiert werden würde. Hier ist eine Version, bei der die von Eclipse generierte Kesselplatte entfernt wurde:
Hier ist eine Kartendatenstruktur, die in Form eines Versuchs implementiert ist :
Die Typen fangen an, so viel Platz wie der Code einzunehmen. In put hat die Methode beispielsweise 302 Zeichen und 343 Zeichen Code (ohne Leerzeichen / Zeilenumbrüche).
quelle
BASIC in Ruby
Implementiert dies vor langer Zeit. Die Quelle ist auf GitHub . Inspiriert von einer ähnlichen Sache in Scala
Konfiguration
BASIC-Code
quelle
Haskell in C ++ - Vorlagen
Ich habe diesen FizzBuzz in C ++ - Vorlagen vor ein paar Monaten auf einer Lerche gemacht. Es ist so ziemlich eine Implementierung des folgenden Haskell-Codes, alles in C ++ - Vorlagen. Tatsächlich wird sogar die Ganzzahlarithmetik auf der Typebene neu implementiert - beachten Sie, dass keine der Vorlagen int-Parameter verwendet!
Der Haskell-Code:
und die Metaprogrammierungsversion des C ++ - Templates:
quelle