Le Real Programmer déterminé peut écrire des programmes en Fortran dans n’importe quelle langue.
de vrais programmeurs n'utilisent pas Pascal
Votre tâche consiste à écrire un programme dans le langage de programmation de votre choix, mais vous n'êtes autorisé à utiliser qu'un autre langage. En d’autres termes, éliminez toutes les conventions de codage d’une langue et remplacez-les par des conventions de codage d’une autre langue. Plus c'est mieux. Faites en sorte que votre programme ait l’impression d’être écrit dans une autre langue.
Par exemple, un fan de Python qui déteste Java pourrait écrire le programme Python suivant en Java:
void my_function() {
int i = 9 ;
while(i>0) {
System.out.println("Hello!") ;
i = i - 1 ;}}
Un passionné de Pascal forcé d’utiliser C pourrait écrire ceci:
#define begin {
#define end }
#define then
#define writeln(str) puts(str)
if (i == 10) then
begin
writeln("I hate C");
end
Vous devez écrire le programme complet. Le programme n'a rien à faire d'utile.
Bonne chance. Il s’agit d’un concours de popularité et le code qui obtient le plus de votes gagne!
la source
.litcoffee
. Cela pourrait aider.Réponses:
C en C ++
la source
char*
au lieu destd::string
).char *argv[]
!Assemblage x86 dans GNU C
Non, je n'ai pas simplement utilisé le
asm
mot - clé, puisque la question posée était celle-ci, elle s'adressait à de vrais programmeurs ... elle devrait fonctionner correctement sous ARM.(Juste pour prouver que je n'ai pas "écrit" l'assemblage, c'est la sortie produite par
GCCClang (503.0.38) pour le code commenté en haut, traduit aveuglément en macros.)Cela ne fonctionne qu'en mode 32 bits. C'est bien, car les vrais programmeurs respectent la taille des mots.
Il suffit de regarder tous ces moulages. Un casting signifie que je suis un programmeur plus réaliste que le compilateur, non?
la source
call
, en particulier.for pass=1:3...next
. L'exécuter dans l'interprète BASIC l'a assemblé.Anglais en C
Des idées pour éliminer le
;
?la source
the
deux fois?#define . ;
Brainfuck en JavaScript
Javascript est une langue difficile! Utilisons Brainfuck, un langage plus compréhensible: o)
Je suppose que j'ai écrit un interprète de brainfuck en javascript.
L'exemple ci-dessus indique simplement
Hello World!
et ignore l'entrée (pas de,
symbole).Mais cela fonctionne aussi avec les entrées! Par exemple, essayez de
,+>,+>,+>,+<<<.>.>.>.
tapergolf
dans la boîte de dialogue. Il sortira les prochains caractères de la table ASCII:hpmg
EDIT : Brève explication pour les personnes qui ne savent pas brainfuck.
Imaginez un tableau infini d'entiers
a
initialisé à zéro partout, un pointeur sur un élément de ce tableaui
et une entrée utilisateuru
.Brainfuck est vraiment facile à apprendre mais difficile à écrire:
+
incrémente à la valeur actuelle:a[i]++
-
le décrémente:a[i]--
>
fait pointer du doigt le prochain élément:i++
<
la précédente :i--
[
et]
définissez une boucle qui se rompt lorsque la valeur actuelle est égale à zéro:while (a[i]) { ... }
.
imprimer l'élément actuel:String.fromCharCode(a[i])
,
définit l'élément en cours avec entrée utilisateur:u.charCodeAt(...)
la source
replace
déclarations n'affectent pas le programme?--i
plus vite quei--
? Cela semble faux depuis des années: jsperf.com/decrementgolf .Je pense que le brillant Lennart Augustsson l’ a déjà remporté deux fois.
Premièrement, voici un exemple de son implémentation "week-end" de BASIC en tant que DSL Haskell Monadic, à partir de 2009:
Cela fonctionne en surchargeant le type de numéro. Les numéros de ligne sont vraiment des fonctions qui acceptent des arguments. Le reste de la ligne est constitué d'arguments de la fonction. La fonction renvoie une représentation de l'arbre de syntaxe abstraite sur laquelle l'interpréteur BASIC doit travailler.
Je vous recommande également de consulter l'entrée d'Augustsson au concours international 2006 de C Obfuscated Obfuscated, dans lequel il a réussi à se faufiler dans 4k:
Ils peuvent partager le même fichier car le byetecode est placé dans les commentaires C.
Cela fait quelques années que je n'ai pas suivi le travail d'Augustson, il se peut qu'il y ait d'autres choses brillantes qu'il a proposées depuis ...
la source
PHP et Javascript
C'est un polyglotte:
Vous pouvez exécuter ce code dans les deux langues:
Le truc ici est que Javascript utilise des séquences d'échappement dans les chaînes commençant par
'
et"
.D'autre part, PHP utilise uniquement des séquences d'échappement dans les chaînes commençant par
"
et<<<
.Ensuite, nous déclarons la fonction
printf
, qui est similaire àprint
mais génère une chaîne formatée en PHP.PHP nécessite que vars commence par
$
, alors que Javascript le permet tout simplement.la source
Array(…)
dans JS, et c'est clairementarray(…)
en PHP.[…]
serait bien mieux;)!Array()
JS ou non: je tiens à ce que j’ai un VRAI polyglotte. Je commets l'un des pires crimes JS avec ce code mais tout ce que je veux, c'est qu'il fonctionne exactement de la même manière dans les deux cas, tout en ressemblant à JS et à PHP en même temps.[...]
n’est pas valide en PHP <5.4.0, ce qui est mauvais ....... Si je jette ceci en PHP 4, 5 ou en Javascript, j’espère que cela fonctionnera au lieu de donner des erreurs de syntaxe partout.[…]
, ce qui semble plutôt standard en PHP et convient donc à votre objectif. Et au fait, PHP <5.4? Il est temps de mettre à jour, mec…Array
est le nom DROIT du constructeur de l'objet Array. Fondamentalement, utiliser[]
est identique àArray()
. Je ne vois rien de mal avec ça. Mais j'ai une question simple: ça marche? (d'ailleurs, je dois utiliser PHP 5.3.28 au travail.)Brainfuck dans JS
la source
><,.-
C’est l’ un des gagnants de l’IOCCC en 2005 , un programme C qui, à l’exception de ce groupe de définitions, ressemble à un programme java:
la source
C ++ en C
OK, vous êtes donc un programmeur C ++, mais vous êtes obligé d'utiliser C? Aucun problème, il vous suffit d'écrire quelques en-têtes supplémentaires manquants en C. Par exemple, voici un programme Hello World valide en C:
Dans le fichier d'en-tête supplémentaire
iostream
, écrivez:Dans le fichier
string
, écrivezDans le fichier
helloworld.c
(votre code C actuel), écrivezEt lors de la compilation
helloworld.c
avec un compilateur C, demandez au compilateur de rechercher également<...>
les fichiers d’en-tête où que vous soyez stockésiostream
etstring
, par exemple, si vous compilez avec gcc et placez les fichiersiostream
etstring
dans le répertoire en cours, compilez avecRemarque: L'
volatile
en-tête iniostream
est là pour permettre une compilation sans avertissement, même au niveau d'alerte maximal (une lecture d'une variable volatile est considérée comme ayant un effet).la source
volatile
ici, et quel type d'avertissement?CQL - Langage d'interrogation caféiné
(ou "SQL sur la caféine")
C'était peut-être un peu trop ambitieux. Voici une tentative d'écriture de code déclaratif SQL (ish) dans CoffeeScript . Cela nécessite la fonction de proxy ECMAScript 6 . Vous pouvez le tester dans le noeud avec
--harmony-proxies
.Configurons un modèle pour définir les mandataires. (Tiré du commentaire de Benvie sur cette question )
Définissez maintenant un objet proxy et certaines variables et fonctions globales suspectes:
Eh bien, c'était beaucoup de configuration! Mais maintenant, nous pouvons faire ce qui suit (entrée / sortie dans un style de console):
Ce n'est pas un véritable polyglotte, mais ce n'est pas vraiment le problème. Je sais que cela
@
est utilisé pour les variables en SQL, mais j'ai besoin de tous les@
s pour les noms de colonnes et de tables car je n'ai pas trouvé de moyen de proxy pour l'objet global (et je ne serais pas surpris que ce ne soit vraiment pas possible - et pour une bonne raison).J'ai aussi changé quelques parenthèses entre parenthèses (en particulier après
VALUES
etIN
). Malheureusement, ce que je ne pouvais pas du tout trouver, c’est un moyen de permettre des conditionnels normaux commeyear > 2000
, car ils s’évalueraient immédiatement en booléens.Néanmoins, cela ressemble beaucoup à SQL et est nettement plus déclaratif que impératif / fonctionnel / orienté objet, il devrait donc être qualifié pour la question. Je pense en fait que si je perfectionnais un peu le code et que je prenais en charge quelques fonctionnalités supplémentaires, cela pourrait être un module CoffeeScript utile.
Quoi qu'il en soit, c'était amusant! :)
Pour ceux qui ne sont pas trop familiarisés avec CoffeeScript, les requêtes SQL sont compilées avec le code JavaScript suivant:
la source
@
en SQL est utilisé pour les variables de session.@
s pour les noms de colonnes et de tables.Visual Basic 6 (en JavaScript)
Cela fonctionne aussi en VBScript.
la source
F # en C ++
Abus plutôt désagréable et méchant du pré-processeur. J'ai pensé qu'il serait amusant de modifier le langage C ++ pour lui donner l'apparence d'un langage complètement différent, au lieu d'utiliser quelques alias pour le faire ressembler à Java ou à PHP. Je ne m'attends pas vraiment à ce que cela obtienne une tonne de votes positifs, c'est une entrée juste pour le plaisir.
Essayez ici .
Malheureusement, écrire quelque chose dans STDOUT est à peu près tout ce qu'il peut faire, même si je suis sûr que si quelqu'un y jette assez de sorcellerie, il pourrait en faire plus.
la source
exit 0
ou simplement0
.Python et ... personne ne devinera (edit: dc)
Voici un code python valide, mais en réalité le programme est écrit dans un langage très différent:
Le code est exécuté dans les deux langues sans erreur.
La combinaison est très folle; Je serais heureux d'attendre un jour ou deux avant de dire quelle est l'autre langue; s'il vous plaît laissez des commentaires pour deviner.
edit: La langue était la langue de pile de dc. Vous pouvez voir ici des mots - clés bien connus comme
for
,if
,or
,in
, mais seulement les lettres d' importance! Le,
qui n'a pas de signification en dc est transformé en un registre car il apparaît pour la première fois après la lettres
(idem pour:
).la source
C ++ vous permet d'écrire du code de type lisisp, avec la bibliothèque InteLib:
cf. http://www.informatimago.com/articles/life-saver.html
la source
C # dans les espaces
D'accord, essayez d'abord l'un de ceux-ci, alors voyons comment ça se passe.
Et au cas où la mise en forme deviendrait délicate de devoir mettre quatre espaces à l'avant de chaque ligne, la voici à nouveau. pour l'espace et # pour l'onglet:
la source
HTML et CSS
Pas de langage de programmation, mais… ce document est valide HTML et CSS:
Cela fonctionne car les commentaires HTML sont autorisés dans les feuilles de style pour des raisons historiques. Oh, et chaque document HTML valide est également un programme PHP valide, il s'agit donc également de PHP . :)
la source
C en Scala
La couche de pontage émule une époque plus romantique où les chaînes étaient encore des tableaux d'octets terminés par zéro.
la source
"This program does not take parameters!"
trompé yased et APL
Mon patron veut que j'écrive des scripts sed, mais j'aime bien écrire APL toute la journée. Néanmoins, il est très content de mon travail car de tels scripts fonctionnent parfaitement avec sa version de sed:
Vous pouvez l'essayer sur mon nouveau site web avec ce lien permanent . C'est une version compilée en javascript de GNU APL. La version finale sera plus tardive avec la version officielle de GNU APL, v. 1.3, mais vous pouvez parfaitement l’utiliser pour vos permaliens si vous appréciez GNU APL.
la source
C en Haskell
Bien sûr, puisque
cmain
ne fait rien avecargc
ouargv
, le code d'argument-marshaling n'a aucun effet et, commecmain
il retourne toujours 0, la branche "else" de l'instruction "if" est morte. Mais la déclaration "si" ne fait rien de toute façon.Tous les accolades et les points-virgules sont inutiles, de même que la plupart des parenthèses et certains des
do
mots - clés. La déclaration "if" aurait pu être écrite ainsiif exitCode == 0 then exitWith ExitSuccess else exitWith (ExitFailure (fromIntegral exitCode))
.la source
C ++ à Forth
Ce n’est pas la solution la plus flexible, mais cela fonctionne s’il est écrit exactement comme indiqué.
la source
Haskell en Java
("vanilla" Java 7, pas Java 8) (Oui, je sais que la boxe nuit aux performances; et même essayer d'utiliser des fonctions d'ordre supérieur devient fou verbeux: D)
Java a une syntaxe très rigide, donc au lieu de changer de syntaxe, j'ai essayé de rendre le code sémantiquement plus semblable au style Haskell.
Modifier - application de fonction partielle ajoutée.
(Oui, tout ce que fait cette folie, c'est l'informatique
6!
)la source
COBOL dans AWK
Dans l'esprit de la citation. AWK pur et pur, tel qu’il peut être écrit par un programmeur COBOL.
La tâche consiste à compter les enregistrements d'un fichier. Cette première version de développement se compte elle-même pour les tests. Le fichier correct sera codé en dur ultérieurement lorsqu'il sera publié par Unit Testing ...
Si je pouvais obtenir la syntaxe surlignée pour faire du vert phosphorescent sur du noir, ce serait génial ...
Même si les numéros de colonne sont corrects sur celui-ci, il y a sept espaces au début de chaque ligne (jamais fait cela auparavant dans awk) et briser les instructions en caractères gras de la colonne 72.
la source
Brainfuck (ou n'importe quoi d'autre) dans la raquette
Le module flexible et le système de macros de Racket lui permettent de mettre en œuvre la prise en charge de modules pour de tout nouveaux langages, à la fois spécifiques à un domaine et généraux. Il est hors du support de boîte pour les Datalog et Algol 60 , de sorte que les éléments suivants sont les deux programmes de Racket valides:
Vous pouvez également ajouter du support pour d'autres langues: par exemple, voir la description de Danny Yoo expliquant comment implémenter le support pour Brainfuck, qui autorise les programmes Racket tels que:
Et comme le support est ajouté au niveau du module compilé, il est possible de lier des modules écrits dans différentes langues ou d’incorporer un extrait d’une langue dans un module écrit dans une autre.
la source
SML en Java
J'ai encore du code ancien depuis que j'ai commencé à apprendre Java et à essayer de l'utiliser dans un style fonctionnel. Légèrement nettoyé:
la source
Java en Perl
Peut compter comme enfreindre la règle, mais je m'en fiche. De toute évidence, il est destiné à ressembler à un programme Java. Il imprime 20 nombres de Fibonacci, au cas où ce ne serait pas évident.
la source
J et ... personne ne devinera (edit: dc)
Ceci est ma deuxième entrée; voici un morceau de code J valide, qui retourne 1:
J'attends un ou deux jours avant de dire quelle est l'autre langue qui exécute le même morceau de code sans erreur. Laissez juste des commentaires pour essayer de deviner.
edit: L’autre langue est la langue empilée de la très ancienne calculatrice Unix en continu.
la source
.,+-<>[]
dedans, votre programme est donc équivalent à...[.]+
brainfuck, programme valide mais inutile. D'après mes connaissances, un programme de brainfuck ne peut être invalide que s'il est mal assorti[]
.dc courir un fichier PostScript
dc peut exécuter le code suivant sans erreur:
la source
ML / (Strict) Haskell en Java
Cela provient d'un projet réel réel. Il utilise des structures de données immuables persistantes et utilise la récursivité même lorsque cela n'est pas nécessaire. En réalité, cela ressemble plus à Kore (langage implémenté par le projet) en Java, mais le style est fondamentalement identique à ML. Mais la philosophie de Kore est que l'auteur ne devrait pas formater son code, de sorte qu'aucun code Java n'est formaté non plus (il est automatiquement mis en forme par eclipse).
déposer n éléments d'une liste :
Dans ML / Haskell, où vous voulez que les motifs correspondent pour extraire la tête et la queue, vous dites ici
list.cons().x
etlist.cons().tail
.insérer un élément dans une liste :
List est défini littéralement comment le type de données algébrique serait défini. Voici une version avec le passe-partout généré par eclipse supprimé:
Voici une structure de données cartographiques implémentée sous forme de trie :
Les types commencent à prendre autant de place que le code. Par exemple, en mettre , la méthode a 302 caractères de types et 343 caractères de code (sans compter l' espace / nouvelle ligne).
la source
BASIC en rubis
Mis en œuvre depuis longtemps. La source est sur GitHub . Inspiré par une chose semblable à Scala
Installer
Code de base
la source
Haskell dans les modèles C ++
J'ai créé ce modèle FizzBuzz en C ++ il y a quelques mois sur une alouette. C'est à peu près une implémentation du code Haskell suivant, tous dans des modèles C ++. En fait, même l'arithmétique entière est réimplémentée au niveau du type - remarquez qu'aucun des modèles n'utilise des paramètres int!
Le code Haskell:
et la version de métaprogrammation du modèle C ++:
la source