¿Cuál es el código más divertido que un TA y / o instructor ha visto enviar a un estudiante de programación de computadoras?

Cuando me trasladé por primera vez a la Universidad de Maryland, me vi obligado a volver a realizar la Introducción a la programación 1. El primer laboratorio que nos hicieron fue el programa Hello World. En mi frustración de ser requerido a retomar la clase, como una especie de desobediencia civil del programador, presenté esto:

importar java.util.function.Function;
importar java.util.regex.Matcher;
importar java.util.regex.Pattern;
clase pública HelloWorld {

// Necesitará hacer que el siguiente programa imprima Hello World!
// La letra del caso importa. La puntuación importa. El espaciamiento importa.

public static void main (String [] args) {
runHelloWorldProgramRun ();
}

public static void runHelloWorldProgramRun () {
makeSureThisCanOnlyBeRunInJava8Hahahahahahaha (x ->
UnessisaryRegexFunction (x)
, helpSong);
}
void estático protegido makeSureThisCanOnlyBeRunInJava8Hahahahahahaha (Function completamente no necesariaLambdaExpression, canción de String) {
System.out.println (completelyUnnecessaryLambdaExpression.apply (song) + “!”);
}

Private static String helpSong = “Ayuda, necesito a alguien \ n” +
“Ayuda, no solo cualquiera \ n” +
“Ayuda, sabes que necesito a alguien, ayuda \ n” +
“\ n” +
“Cuando era más joven (mucho más joven que) tanto
más joven que hoy \ n “+
“(Nunca lo necesité) Nunca necesité la ayuda de nadie en ningún
forma \ n “+
“(Ahora) Pero ahora estos días se han ido (Estos días se han ido),
No estoy tan seguro de mí mismo \ n “+
“(Sé que he encontrado) Ahora encuentro que he cambiado de opinión y
Abrió las puertas \ n \ n “+
“Ayúdame si puedes, me siento deprimido \ n” +
“Y aprecio que seas ‘redondo \ n” +
“Ayúdame a volver a poner los pies en el suelo \ n” +
“Por favor, no me ayudes”;

String estático privado unessisaryRegexFunction (String help) {
Pattern regex = Pattern.compile (“^ (. {3}). * \ N. {2} (.). {4} (.). (.) (?:. * \ N) {3} (. ). {11} (.). {4} (.). * \ N. {44} (.). * \ N. {20} (.) “, Pattern.MULTILINE);
Matcher regexMatcher = regex.matcher (ayuda);
StringBuffer unnessisarilyComplicatedBuffer = new StringBuffer ();
if (regexMatcher.find ()) {
para (int i = 1; i <= regexMatcher.groupCount (); i ++) {
unnessisarilyComplicatedBuffer.append (regexMatcher.group (i));
}
}
devolver unnessisarilyComplicatedBuffer.toString ();
}
}

Salida:

Hello World!

Como estudiante universitario, a menudo recibimos un curso bastante aburrido, especialmente si estás programando por tu cuenta. Al momento de escribir, tengo una “Introducción al lenguaje de programación C ++”, que es, por supuesto, aprender el idioma desde cero. Ya conociendo los conceptos básicos del lenguaje C ++, el primer laboratorio fue el conocido ejercicio “programa para escribir un mundo de hola”. Mientras el profesor explicaba cómo incluye el trabajo, las transmisiones y todo eso, un amigo me desafió a escribir el mundo de hola más feo posible. De repente, las ideas surgieron de mi cabeza y me dieron pistas sobre cómo hacer que algo sea realmente ilegible.

Macros … Nombres tontos sin sentido … Recursión de plantillas …

Lo armé en dos horas. Fue un verdadero desastre, no el peor código ofuscado que he visto (IOCCC …), pero extremadamente feo y complicado para un simple “Hola mundo”, al menos para mí. Un poco después llegó la maestra. Su reacción fue básicamente: “Ejecutar el código. Funciona. Buen trabajo. Pero pueden ser formas más simples”. Todavía no sé si se estaba burlando de mí, o si hablaba en serio.

De todos modos, el código está aquí, no lo copiaré aquí, ya que es demasiado largo para que quepa en una publicación.
Código de “Hello World” ofuscado de forma innecesaria en C ++. ¡Compila con LLVM / clang, y ahora con g ++! (woohooo!)
(Necesita un compilador moderno de C ++, con las funciones compatibles con C ++ 14 actualmente habilitadas)

** Gracias por los 200 Upvotes Guys! **

Hice eso una vez, tuvimos que crear un sistema de software en mis clases de software, en donde tuvimos que diseñar un sistema de papel de preguntas que entregue un papel nuevo cuando un nuevo estudiante se registra para el examen. Ahora éramos un grupo de 5 haciendo esto y yo era el tipo de GUI visual que hacía la parte de formularios web y también el presentador en el examen. Los otros tenían que hacer el backend, el generador de preguntas al azar, etc.

Debido a algunos problemas (beber, festejar y pelear en el grupo) no pudimos completar el código a tiempo, era D-1 y los chicos todavía estaban programando y haciendo pruebas. También me uní a ellos para codificar los bits finales. Sabía que lo que estábamos haciendo es un software malo que no funcionará como se esperaba.

Mi trabajo consistía en presentar el software para que parezca normal y funcione tanto como se lo solicite. El día D me di cuenta de que el código detrás de la muestra no funciona y el conjunto de preguntas en el documento no cambia el papel y sale el mismo papel cada vez que se registra una nueva identificación.

Esto es 2 horas antes de la presentación ante el Code Guru que iba a revisar el Software. Lo que hice fue escribir un pequeño código que forma el ícono del reloj de arena y se muestra después de la pantalla de presentación “Generando un nuevo documento de preguntas” con la fecha y hora impresa en el papel de las preguntas.

Las preguntas fueron todas iguales !!! Sólo la fecha de la hora actualizada!

Presenté el software y le dije que habíamos implementado la lógica de preguntas aleatorias para el examen. El examinador me pidió que lo mostrara y yo hice clic en el botón Enviar, ¡Viola! Un nuevo papel de preguntas apareció! ¡Cruzando mis dedos esperaba que no notara el error!

¡No lo hizo! Incluso felicitó y dijo una buena presentación, pero sugirió múltiples mejoras en el código de fondo. ¡No una mención de esta lógica aleatoria!

Arreglamos el código antes de enviarlo para Revisión de Código.

Aprendí eso si te presentas bien. ¡Nadie se da cuenta de que eres el diablo!

Esto puede no calificar como historia de codificación, pero fue hilarante. Esto sucedió durante un festival universitario, donde mi amigo (mi colega ahora) estaba liderando el equipo de programación. El desafío del evento fue corregir el mayor número de errores en el código dado en una hora sin cambiar la lógica.

Cuando comenzaron, el total de errores era de 300 +. De alguna manera, pensaron que el programa era una solución muy trivial de crear un Árbol de búsqueda binario y realizar operaciones básicas en ese (búsqueda, recorrido, inserción, eliminación, etc.). Así que comenzaron a depurar el código, por cada función.

Hasta 55 minutos, volvieron a compilar el programa y seguían con un error de más de 200. Así que este chico, apuesta por una victoria. Comentó la función completa que estaba produciendo el error (era el recorrido del árbol y la parte de búsqueda que recuerdo) en total desesperación y se volvió a compilar. 10 errores.

Recibieron el primer premio. 😛

Nota: dado que el motivo era reducir el número de errores, los jueces (tales cerebros, mucho wow) ni siquiera se molestaron en revisar el código. Acaban de compilar el programa, anotaron el número de errores y el total de líneas de código (que deberían haber sido | 20 | del total de líneas de código, de acuerdo con su criterio de evaluación). Todavía nos reímos de ello.

No como estudiante, sino en el trabajo, surgieron 2, tanto en el contexto de personas que nombraron variables en el mismo caso, no en camelCase y no usaron un guión bajo (era de los 80, donde la capacidad de escritura no era aún un problema). la habilidad común de trabajo entre nosotros los desarrolladores, y la idea de mantener presionada la tecla Mayús mientras escribía otra letra era demasiado esfuerzo extra) Una vez encontré un error de falla de segmento en un código que era muy retorcido, y por lo que pude ver, El código no tenía ningún propósito útil, pero tenía prisa y no quería perder la lógica que realmente estaba allí, así que decidí definirlo temporalmente de manera que nadie lo rechazara por mi error.

Lo puse dentro de un IfDef para asegurar que Not On Your Life lo definiera de nuevo cualquiera.

#ifdef NOTONYOURLIFE
… // las 2 docenas de líneas de código gnarly
#terminara si.

Un par de días después, el código se estaba estrellando de nuevo. Mi amigo había visto el código y encima había puesto.
#define NOTONYOURLIFE

Dije: “¿Por qué demonios definirías eso?”
él respondió: “Cuando vi que se definía” No Tony Our Life “, pensé que realmente querías que estuviera allí.

***
Esta y otra variable surgieron en una reunión de desarrolladores cuando intentábamos decidir si estandarizaríamos un caso mixto o un guión bajo. Y esto me trajo a la mente otro desarrollador con problemas de mecanografía que solía tener una variable booleana continua, 2 palabras cortas concatenadas en una que solía significar “Continuar”. Fue uno de nuestros desarrolladores más prolíficos y escribió muchos códigos brillantes de los que todos dependíamos y nos referíamos en gran medida. Pero el código estaba lleno de lógica que probaba:

if (goon) {

}

“De vuelta en el día” había un diario para la programación en C, el nombre se me escapa, y se realizó un concurso de programación en C ofuscado.
Esto a menudo incluía entradas con código ejecutado en conjunto y sin saltos de línea, excepto cuando se usaban para formar una imagen a partir del texto. Por ejemplo, recuerdo que una entrada tenía la forma de un árbol de Navidad, creo que otra estaba formateada para parecerse a la poesía. Las funciones anidadas sin propósito real y los nombres de token inusuales eran la regla. Por lo general, no eran más que una sola página escrita.
El objeto era que el lector determinara la salida del programa antes de escribir el código y ejecutarlo.
¿Alguien más lo recuerda?

EDITAR … Evidentemente todavía hay interés. http://www.ioccc.org

En la clase de Teoría del compilador en Chico State, el proyecto final fue el estándar “escribir un compilador muy limitado que convertiría un sub-sub-subgrupo de Pascal en C”. Fue nuestra primera exposición práctica a Lex y Yacc. No habíamos hecho ningún proyecto grupal todavía, así que no aprendimos la importancia de usar variables con nombres lógicos. Mi proyecto estaba lleno de las siglas semi-obscenas más divertidas que pude encontrar en UseNet: dilligaff, dilligas, bohica, etc. (Esto fue en los días previos a la difusión de la Web).

Pensé que el TA simplemente pasó sus casos de prueba a través del código. La arrojó la salida a través del compilador de C para ver si funcionaba o no. Nadie dijo nada sobre los nombres graciosos, a diferencia de Sierra Madsen. Obtuve el 100% en el proyecto (creo que fui la única persona en la clase que lo hizo), así que no me importó.

Un año más tarde, mientras estaba en mi internado, el asistente me llama y me lanza dos nombres. Respondí que no los reconocí. “Están entregando tu proyecto”. Uno de ellos al menos tuvo la decencia de copiar y reemplazar los nombres de las variables (¡con suerte con los que denotan su utilidad real!) La otra persona simplemente copió los archivos y los presentó como su propio trabajo.

Me hubiera encantado verlos (individualmente) si me pidieran que recorriera el TA a través de algunos de mis rompehielos allí.

Curso: Introducción a la informática.

Año: Año de primer año

Escribo esta respuesta en nombre de mi compañero de cuarto, quien probablemente estaría demasiado avergonzado de escribir esto por su cuenta. Al igual que cualquier curso de departamento de CS, tuvimos varias tareas de codificación; La mayoría de las tareas requirieron mucho tiempo y esfuerzo, ya que éramos un novato en la codificación y el hecho de que estábamos codificando en SML, un lenguaje relativamente nuevo, por lo que no hay ayuda de Internet.

La tarea final en el curso fue bastante complicada y requirió bastante codificación. Después de haber codificado durante casi 2 a 3 días seguidos y trabajar duro, mi amigo envió la tarea solo unos minutos antes de la fecha límite oficial. Todo parecía estar bien hasta que se publicaron los puntajes de las tareas.

Le habían dado un 0/10. Estaba bastante descorazonado. Decidimos verificar errores en su código. Cuando verificamos el archivo enviado, nos dimos cuenta de que había enviado un pdf. Tal vez, se convirtió al pdf por error. Cuando abrimos el archivo, rodamos literalmente por el suelo riendo, y el tipo se fue como

El genio había presentado la descripción de la tarea pdf como su código final . 30–40 horas de codificación para nada. Sentimos pena por el chico, pero no pudimos parar de reírnos durante los próximos días.