El programador real determinado puede escribir programas Fortran en cualquier idioma.
de verdaderos programadores no usan Pascal
Su tarea es escribir el programa en el lenguaje de programación de su elección, pero solo puede usar otro idioma. Es decir, deseche todas las convenciones de codificación de un idioma y reemplácelas por convenciones de codificación de otro idioma. Mientras más, mejor. Haga que su programa se vea como si estuviera escrito en otro idioma.
Por ejemplo, un fanático de Python que odia Java podría escribir el siguiente programa Python en Java:
void my_function() {
int i = 9 ;
while(i>0) {
System.out.println("Hello!") ;
i = i - 1 ;}}
El entusiasta de Pascal obligado a usar C podría escribir esto:
#define begin {
#define end }
#define then
#define writeln(str) puts(str)
if (i == 10) then
begin
writeln("I hate C");
end
Tienes que escribir el programa completo. El programa no tiene que hacer nada útil.
Buena suerte. Este es un concurso de popularidad, por lo que gana el código con más votos.
fuente
.litcoffee
. Podría ayudar.Respuestas:
C en C ++
fuente
char*
lugar destd::string
).char *argv[]
!Ensamblado x86 en GNU C
No, no solo utilicé la
asm
palabra clave, ya que la pregunta estableció que esto es para programadores reales ... esto debería funcionar bien en ARM.(Solo para probar el punto, no "escribí" el ensamblaje en absoluto: es el resultado producido por
GCCClang (503.0.38) para el código comentado en la parte superior, traducido ciegamente a macros).Esto solo funciona en modo de 32 bits. Eso está bien ya que los programadores reales codifican el tamaño de la palabra de todos modos.
Solo mira todos esos moldes. Casts significa que soy un programador más real que el compilador, ¿verdad?
fuente
call
, en particular.for pass=1:3...next
. Ejecutándolo en el intérprete BASIC lo ensambló.Inglés en C
¿Alguna idea para eliminar el
;
?fuente
the
dos veces?#define . ;
Brainfuck en JavaScript
¡Javascript es un lenguaje difícil! Usemos Brainfuck, un lenguaje más comprensible: o)
Supongo que escribí un intérprete de brainfuck en javascript.
El ejemplo anterior simplemente emite
Hello World!
e ignora la entrada (sin,
símbolo).¡Pero eso también funciona con las entradas! Por ejemplo, intente
,+>,+>,+>,+<<<.>.>.>.
y escribagolf
en el cuadro de diálogo. Superará los siguientes caracteres en la tabla ASCII:hpmg
EDITAR : breve explicación para las personas que no saben brainfuck.
Imagine una matriz infinita de enteros
a
inicializados a cero en todas partes, un puntero en un elemento de esta matrizi
y una entrada del usuariou
.Brainfuck es realmente fácil de aprender pero difícil de escribir:
+
incrementos al valor actual:a[i]++
-
lo decrementa:a[i]--
>
hace que el puntero señale el siguiente elemento:i++
<
el anterior :i--
[
y]
define un ciclo que se rompe cuando el valor actual es cero:while (a[i]) { ... }
.
imprime el elemento actual:String.fromCharCode(a[i])
,
establece el elemento actual con la entrada del usuario:u.charCodeAt(...)
fuente
replace
declaraciones no afectan el programa?--i
más rápido quei--
? Parece falso desde hace años: jsperf.com/decrementgolf .Creo que el brillante Lennart Augustsson ya ha ganado esto dos veces.
Primero, aquí hay un ejemplo de su implementación de "hackeo de fin de semana" de BASIC como un DSL monárquico de Haskell, de 2009:
Funciona al sobrecargar el tipo de número. Los números de línea son realmente funciones que aceptan argumentos. El resto de la línea son argumentos de la función. La función devuelve una representación del Árbol de sintaxis abstracta para que el intérprete BASIC vaya a trabajar.
También te recomiendo que eches un vistazo a la entrada de Augustsson en el Concurso Internacional C Ofuscado de 2006, en el que logró meterse en 4k:
Pueden compartir el mismo archivo porque el byetecode se coloca dentro de los comentarios C.
Han pasado algunos años desde que seguí el trabajo de Augustsson, por lo que puede haber otras cosas brillantes que se le ocurran desde entonces ...
fuente
PHP y Javascript
Este es un políglota:
Puede ejecutar este código en ambos idiomas:
El truco aquí es que Javascript usa secuencias de escape en cadenas que comienzan con
'
y"
.Por otro lado, PHP solo usa secuencias de escape en cadenas que comienzan con
"
y<<<
.Luego, declaramos la función
printf
, que es similarprint
pero genera una cadena formateada en PHP.PHP requiere que los vars comiencen
$
, mientras que Javascript simplemente lo permite.fuente
Array(…)
en JS, y está claramentearray(…)
en PHP.[…]
sería mucho mejor;)!Array()
JS o no: me importa que tenga un políglota VERDADERO . Estoy cometiendo uno de los peores crímenes de JS con este código, pero todo lo que quiero es que se ejecute y haga exactamente lo mismo en ambos, pero que parezca JS y PHP al mismo tiempo.[...]
no es válido en PHP <5.4.0, lo cual es malo ....... Si lanzo esto en PHP 4, 5 o Javascript, espero que funcione, en lugar de dar errores de sintaxis en todas partes.[…]
, lo que parece bastante estándar en PHP y, por lo tanto, está bien para su objetivo. Y por cierto, PHP <5.4? Hora de actualizar, chico ...Array
es el nombre CORRECTO del constructor del objeto Array. Básicamente, usar[]
es lo mismo queArray()
. No veo nada malo con eso. Pero tengo una pregunta simple: ¿funciona? (por cierto, tengo que usar php 5.3.28 en el trabajo.)Brainfuck en JS
fuente
><,.-
Este es uno de los ganadores de IOCCC 2005 , un programa C que, excepto por ese grupo de definiciones, se parece a un programa java:
fuente
C ++ en C
OK, entonces eres un programador de C ++, pero ¿estás obligado a usar C? No hay problema, solo tiene que escribir algunos encabezados suplementarios que faltan en C. Por ejemplo, aquí hay un programa válido de Hello World en C:
En el archivo de encabezado suplementario
iostream
, escriba:En archivo
string
, escribeEn el archivo
helloworld.c
(su código C real), escribaY al compilar
helloworld.c
con un compilador de C, indique al compilador que también busque<...>
los archivos de encabezado donde haya almacenado los archivosiostream
ystring
, por ejemplo, si está compilando con gcc y coloca los archivosiostream
ystring
en el directorio actual, compile conNota: El
volatile
encabezado iniostream
está ahí para permitir una compilación sin advertencia incluso al nivel máximo de advertencia (se considera que una lectura de una variable volátil tiene efecto).fuente
volatile
aquí, y qué tipo de advertencia?CQL - Lenguaje de consulta con cafeína
(o "SQL en cafeína")
Esto puede haber sido algo demasiado ambicioso. Aquí hay un intento de escribir código declarativo SQL (ish) en CoffeeScript . Esto requiere la función Proxy ECMAScript 6 . Puedes probarlo en nodo con
--harmony-proxies
.Vamos a configurar una plantilla para definir proxies. (Tomado del comentario de Benvie sobre este tema )
Ahora defina un objeto proxy y algunas variables y funciones globales sospechosas:
Bueno, eso fue una gran cantidad de configuración! Pero ahora podemos hacer lo siguiente (entrada / salida en un estilo de consola):
No es un políglota real, pero ese no es realmente el punto. Sé que
@
se usa para variables en SQL, pero necesito todas las@
s para los nombres de columna y tabla porque no he encontrado una forma de proxy del objeto global (y no me sorprendería si realmente no es posible, y para una buena razón).También cambié algunos paréntesis entre paréntesis (en particular después
VALUES
yIN
). Desafortunadamente, lo que no pude entender en absoluto es una forma de permitir condicionales normales comoyear > 2000
, porque evaluarían a un booleano de inmediato.Aún así, esto se parece mucho a SQL y definitivamente es más declarativo que imperativo / funcional / orientado a objetos, por lo que debería calificar bien para la pregunta. De hecho, estoy pensando que si pulí un poco el código y admití algunas características más, este podría ser un módulo útil de CoffeeScript.
De todos modos, esto fue divertido! :)
Para aquellos que no están demasiado familiarizados con CoffeeScript, las consultas SQL se compilan en el siguiente JavaScript:
fuente
@
en SQL se utiliza para las variables de sesión.@
s para los nombres de columna y tabla.Visual Basic 6 (en JavaScript)
También funciona en VBScript.
fuente
F # en C ++
Bastante poco imaginativo y desagradable abuso del preprocesador. Pensé que sería divertido alterar C ++ para que parezca un lenguaje completamente diferente en lugar de usar algunos alias para que se vea como Java o PHP. Realmente no espero que esto obtenga un montón de votos a favor, es una entrada solo por diversión.
Probarlo aquí .
Lamentablemente, escribir algo en STDOUT es todo lo que puede hacer, aunque estoy seguro de que si alguien le arroja suficiente brujería, podría hacer que haga más.
fuente
exit 0
o simplemente0
.Python y ... nadie lo adivinará (editar: dc)
Aquí hay un código válido de Python, pero en realidad el programa está escrito en un lenguaje muy diferente:
El código se ejecuta en ambos idiomas sin error.
La combinación es muy loca; Me encantaría esperar uno o dos días antes de decir cuál es el otro idioma; por favor deje comentarios para adivinar.
editar: El idioma era el lenguaje basado en pila de DC. Usted puede ver aquí palabras clave conocidas como
for
,if
,or
,in
, pero sólo importa las letras! El,
que no tiene significado en CC se convierte en un registro porque la primera vez que aparece es después de la letras
(lo mismo para:
).fuente
C ++ le permite escribir código similar a lisp, con la biblioteca InteLib:
cf. http://www.informatimago.com/articles/life-saver.html
fuente
C # en espacios en blanco
Bien, primero intente con uno de estos, así que veamos cómo va.
Y en caso de que el formato se volviera complicado por tener que poner cuatro espacios en el frente de cada línea, aquí está nuevamente con. para espacio y # para pestaña:
fuente
HTML y CSS
No son lenguajes de programación, pero ... este documento es HTML y CSS válido :
Esto funciona porque los comentarios HTML están permitidos en las hojas de estilo por razones históricas. Ah, y cada documento HTML válido también es un programa PHP válido, por lo que también es PHP . :)
fuente
C en Scala
La capa de puente emula una era más romántica cuando las cadenas todavía eran matrices de bytes con terminación nula.
fuente
"This program does not take parameters!"
te engañésed y APL
Mi jefe quiere que escriba scripts de sed, pero prefiero escribir APL todo el día. Sin embargo, está muy contento con mi trabajo porque tales scripts se ejecutan perfectamente con su versión de sed:
Puedes probarlo en mi nuevo sitio web con este enlace permanente . Es una versión compilada a javascript de GNU APL. El lanzamiento final será más tarde con el lanzamiento oficial de GNU APL, v. 1.3, pero puedes usarlo perfectamente para tus enlaces permanentes si disfrutas de GNU APL.
fuente
C en Haskell
Por supuesto, dado
cmain
que no hace nada conargc
oargv
, el código de cálculo de argumentos no tiene ningún efecto, y dado quecmain
siempre devuelve 0, la rama "else" de la instrucción "if" está muerta. Pero la declaración "si" no hace nada de todos modos.Todos los corchetes y puntos y comas son innecesarios, como lo son la mayoría de los paréntesis y algunas de las
do
palabras clave. La declaración "if" podría haberse escrito comoif exitCode == 0 then exitWith ExitSuccess else exitWith (ExitFailure (fromIntegral exitCode))
.fuente
C ++ en adelante
No es la solución más flexible, pero funciona si se escribe exactamente como se muestra.
fuente
Haskell en Java
("Vanilla" Java 7, no Java 8) (Sí, sé que el boxeo arruina el rendimiento; e incluso tratar de usar funciones de orden superior se vuelve muy detallado: D)
Java tiene una sintaxis muy rígida, por lo que en lugar de cambiar la sintaxis intenté hacer que el código sea semánticamente más similar al estilo Haskell.
Editar: aplicación de función parcial agregada.
(Sí, todo lo que hace esta locura es computar
6!
)fuente
COBOL en AWK
En el espíritu de la cita. AWK puro, sin adulterar, ya que puede ser escrito por un programador COBOL.
La tarea es contar los registros en un archivo. Esta versión de desarrollo inicial se cuenta para las pruebas. El archivo correcto se codificará más tarde cuando se libere de Unit Testing ...
Si pudiera obtener el resaltado de sintaxis para hacer verde fosforescente en negro, sería genial ...
Incluso obtuve los números de columna correctos en este caso, son siete espacios en blanco al comienzo de cada línea (nunca lo hice en awk antes) y rompiendo las declaraciones de letra larga en la columna 72.
fuente
Brainfuck (o cualquier otra cosa) en Racket
El módulo flexible y el sistema macro de Racket le permiten implementar soporte de módulos para lenguajes completamente nuevos, tanto de dominio específico como de propósito general. Existe compatibilidad inmediata para Datalog y Algol 60 , por lo que los siguientes son programas válidos de Racket:
También puede agregar soporte para otros idiomas: por ejemplo, vea la descripción de Danny Yoo sobre cómo implementar el soporte para Brainfuck, que permite programas Racket como:
Y dado que el soporte se agrega a nivel de módulo compilado, es posible vincular módulos escritos en diferentes idiomas o incrustar un fragmento de un idioma dentro de un módulo escrito en otro.
fuente
SML en Java
Todavía tengo un código antiguo desde que comencé a aprender Java e intenté usarlo en un estilo funcional. Ligeramente limpiado:
fuente
Java en Perl
Puede contar como romper las reglas, pero no me importa. Obviamente, está destinado a parecerse al programa Java. Imprime 20 números de Fibonacci, en caso de que no sea obvio.
fuente
J y ... nadie lo adivinará (editar: dc)
Esta es mi segunda entrada; Aquí hay una pieza de código J válido, que devuelve 1:
Estoy esperando uno o dos días antes de decir cuál es el otro idioma que ejecuta el mismo código sin ningún error. Solo deja comentarios para tratar de adivinar.
editar: El otro idioma es el lenguaje basado en la pila de la antigua calculadora Unix dc.
fuente
.,+-<>[]
por lo que su programa es equivalente a...[.]+
en brainfuck, que es un programa válido pero inútil. AFAIK un programa brainfuck solo puede ser inválido si no coincide[]
.dc ejecutando un archivo PostScript
DC puede ejecutar el siguiente fragmento de código sin error:
fuente
ML / (estricto) Haskell en Java
Esto es de un proyecto real real. Utiliza estructuras de datos inmutables persistentes y utiliza la recursividad incluso cuando no es necesario. En realidad, se parece más a Kore (el lenguaje que implementa el proyecto) en Java, pero el estilo es básicamente el mismo que ML. Pero la filosofía de Kore es que el autor no debe formatear su código, por lo que ninguno de los códigos Java está formateado (está autoformatado por eclipse).
soltar n elementos de una lista :
En ML / Haskell, donde harías coincidir el patrón para extraer la cabeza y la cola, aquí dices
list.cons().x
ylist.cons().tail
.inserte un elemento en una lista :
La lista se define literalmente cómo se definiría el tipo de datos algebraicos. Aquí hay una versión con el repetitivo generado por el eclipse eliminado:
Aquí hay una estructura de datos de mapas implementada en términos de un trie :
Los tipos comienzan a ocupar tanto espacio como el código. Por ejemplo, en put , el método tiene 302 caracteres de tipos y 343 caracteres de código (sin contar espacios / líneas nuevas).
fuente
BÁSICO en Ruby
Implementado esto hace mucho tiempo. La fuente está en GitHub . Inspirado en algo similar en Scala
Preparar
Código BÁSICO
fuente
Haskell en plantillas C ++
Hice este FizzBuzz en plantillas C ++ hace unos meses en una alondra. Es más o menos una implementación del siguiente código Haskell, todo en plantillas C ++. De hecho, incluso la aritmética de enteros se vuelve a implementar en el nivel de tipo. ¡Observe que ninguna de las plantillas usa parámetros int!
El código de Haskell:
y la versión de metaprogramación de plantilla C ++:
fuente