2010-10-26 13 views
15

¿Cuál es el código más complejo/potente que puede escribir que es válido en un número máximo de idiomas?¿Cuál es el código más complejo/poderoso que puede escribir que es válido en un número máximo de idiomas?

Por lo tanto, por ejemplo, el siguiente código es válido tanto en PHP como en JavaScript.

function foo($bar) 
{ 
$var = 0; 
for($i=0;$i<100;$i++) 
{ 
$var += ($bar + 2)/(1+$i); 
} 
return $var; 
} 

¿Por qué es este un desafío útil? Creo que es una forma útil de pensar sobre cómo pueden ser los lenguajes similares, y qué tan fácil es saber que la sintaxis de uno puede traducirse en aprender de los demás.

+1

@Comment mí si este se cierra, usted tiene mi voto a abrir (No puedo votar en este momento ya que no tengo votos) –

+0

¿Lo quieres wiki comunitario? – Gumbo

+1

rosettacode.org es probablemente un buen recurso para encontrar la respuesta. –

Respuesta

18

Esto se llama Polyglot y puede volverse muy complejo. Aquí está uno de cada ocho idiomas: http://ideology.com.au/polyglot/

Cobol, Pascal, Fortran, C, PostScript, golpe, x86 lenguaje de máquina, y Perl:

                  (*O/*_/ 
Cu #%*)pop mark/CuG 4 def/# 2 def%%%%@@P[TX---P\P_SXPY!Ex(mx2ex("SX!Ex4P)Ex= 
CuG #%*                 *+Ex= 
CuG #%*------------------------------------------------------------------*+Ex= 
CuG #%* POLYGLOT - a program in eight languages  15 February 1991 *+Ex= 
CuG #%* 10th Anniversary Edition      1 December 2001 *+Ex= 
CuG #%*                 *+Ex= 
CuG #%* Written by Kevin Bungard, Peter Lisle, and Chris Tham   *+Ex= 
CuG #%*                 *+Ex= 
CuG #%* Polyglot suports the following languages:      *+Ex= 
CuG #%*  1. COBOL (ANSI)            *+Ex= 
CuG #%*  2. Pascal (ISO)            *+Ex= 
CuG #%*  3. Fortran (ANSI, f77)          *+Ex= 
CuG #%*  4. C (ANSI-ish)            *+Ex= 
CuG #%*  5. PostScript            *+Ex= 
CuG #%*  6. Linux/Unix shell script (bash, sh, csh)     *+Ex= 
CuG #%*  7. x86 machine language (MS-DOS, Win32, Linux)    *+Ex= 
CuG #%*  8. Perl (version 5)           *+Ex= 
CuG #%*                 *+Ex= 
CuG #%* Usage:               *+Ex= 
CuG #%*  1. Rename this file to polyglot.[cob|pas|f77|c|ps|sh|com|pl] *+Ex= 
CuG #%*                 *+Ex= 
CuG #%*  2. Compile and run with your favorite compiler and operating *+Ex= 
CuG #%*  system.             *+Ex= 
CuG #%*                 *+Ex= 
CuG #%* Notes:               *+Ex= 
CuG #%*  1. We have attempted to use only standard language features. *+Ex= 
CuG #%*                 *+Ex= 
CuG #%*  2. Without the -traditional flag gcc will issue a warning. *+Ex= 
CuG #%*                 *+Ex= 
CuG #%*  3. When transferring from Unix to DOS make sure that a LF *+Ex= 
CuG #%*  is correctly translated into a CR/LF.      *+Ex= 
CuG #%*                 *+Ex= 
CuG #%*  4. Keep the blank lines at the start of the program. They *+Ex= 
CuG #%*  are important.           *+Ex= 
CuG #%*                 *+Ex= 
CuG #%*  5. This text is a comment block in all eight languages.  *+Ex= 
CuG #%*                 *+Ex= 
CuG #%* Please mail any comments, corrections or additions to   *+Ex= 
CuG #%* [email protected]          *+Ex= 
CuG #%*                 *+Ex= 
CuG #%*------------------------------------------------------------------*QuZ= 
CuG #%*                 *+Ex= 
CuG #%*!Mx)ExQX5ZZ5SSP5n*5X!)Ex+ExPQXH,B+ExP[-9A-9B(g?(gA'UTTER_XYZZXX!X *+ 
CuG #(*                 *(
C # */);                /*(
C # *) program  polyglot (output);        (*+ 
C #  identification division. 
C #  program-id. polyglot. 
C # 
C #  data   division. 
C #  procedure  division. 
C # 
C # *))cleartomark /Bookman-Demi findfont 36 scalefont setfont  (
C # *                 (
C # 
C # *     hello polyglots$ 
C #  main. 
C #   perform 
C /# *) 2>_$$; echo "hello polyglots"; rm _$$; exit; 
C # * (
C # 
C  *0) unless print "hello polyglots\n"; __END__ 
       print 
C    stop run. 
    -*,    'hello polyglots' 
C 
C   print. 
C    display "hello polyglots".        (
C  */ int i;              /* 
C  */ main() {              /* 
C  */  i=printf ("hello polyglots\n"); O= &i; return *O;   /* 
C  *)                (* 
C  *) begin               (* 
C  *)  writeln ('hello polyglots');        (* 
C  *)                (*) 
C  *) pop 60 360             (
C  *) pop moveto (hello polyglots) show       (
C  *) pop showpage             ((
C  *) 
      end               .(*) 
C)pop%  program  polyglot.          *){*/} 
+5

El resaltado de sintaxis es increíble para esto. – JasonFruit

+3

¿Esto realmente cuenta? No es el mismo código, per se, solo implementaciones múltiples escritas de tal manera que pueden coexistir en el mismo archivo. – Hamish

+1

Yo castraría al escritor, si tuviera que depurar algo como esto. – Margus

Cuestiones relacionadas