Su jefe le pide que escriba un programa de "hola mundo". Como le pagan por las líneas de código, desea que sea lo más complejo posible. Sin embargo, si solo agrega líneas sin sentido, o obviamente cosas inútiles u ofuscantes, nunca lo obtendrá a través de la revisión del código. Por lo tanto, el desafío es:
Escriba un programa "hello world" que sea lo más complejo posible bajo la condición de que pueda dar una "justificación" para cada complejidad en el código.
El comportamiento requerido del programa es simplemente generar una sola línea "Hola mundo" (sin las comillas, pero con una nueva línea al final) y luego salir con éxito.
Las "justificaciones" incluyen:
- compatibilidad con palabras de moda ("¡El software moderno está orientado a objetos!")
- buenas prácticas de programación generalmente aceptadas ("Todo el mundo sabe que debe separar el modelo y la vista")
- mantenibilidad ("Si lo hacemos de esta manera, podemos hacer XXX más fácilmente más tarde")
- y, por supuesto, cualquier otra justificación que pueda imaginar usando (en otras situaciones) para el código real.
Obviamente no se aceptarán justificaciones tontas.
Además, debe "justificar" su elección de idioma (por lo tanto, si elige un idioma inherentemente detallado, tendrá que justificar por qué es la opción "correcta"). No se aceptan lenguajes divertidos como Unlambda o Intercal (a menos que pueda dar una muy buena justificación para usarlos).
El puntaje de las entradas calificadas se calcula de la siguiente manera:
- 1 punto por cada enunciado (o el equivalente a un enunciado en su idioma de elección).
- 1 punto por cada definición de una función, tipo, variable, etc. (con la excepción de la función principal, cuando corresponda).
- 1 punto por cada declaración de uso del módulo, directiva de inclusión de archivo, espacio de nombres usando declaración o similar.
- 1 punto por cada archivo fuente.
- 1 punto por cada declaración directa necesaria (si puede deshacerse de ella reorganizando el código, debe "justificar" por qué la disposición que ha elegido es la "correcta").
- 1 punto por cada estructura de control (si, while, for, etc.)
Recuerde que debe "justificar" cada línea individual.
Si el idioma elegido es lo suficientemente diferente como para que este esquema no se pueda aplicar (y puede dar una buena "justificación" para su uso), sugiera un método de puntaje que se parezca más al anterior para su idioma de elección.
Se pide a los concursantes que calculen el puntaje de su entrada y lo escriban en la respuesta.
fuente
Respuestas:
C ++, trollpost
Mi cerebro no puede justificar escribir uno más largo :)
fuente
Aquí demostraré el poder y la usabilidad del lenguaje de script llamado Python resolviendo una tarea bastante compleja de manera elegante y eficiente a través de los operadores del lenguaje de script mencionados y generadores de estructuras de datos como listas y diccionarios .
Sin embargo, me temo que no entiendo completamente el uso de las frases "lo más complejo posible" y "justificación". Sin embargo, aquí hay un resumen de mi estrategia habitual, bastante autoexplicativa y directa, seguida por la implementación real en Python que encontrará, es bastante fiel a la naturaleza lúdica y de alto orden del lenguaje:
Definir el alfabeto: primer paso obvio. Para la capacidad de expansión, elegimos todo el rango ASCII. Tenga en cuenta el uso del generador de listas incorporado que puede ahorrarnos horas de tediosa inicialización de listas.
diga cuántas de cada letra del alfabeto usaremos. ¡Esto se representa simplemente como otra lista!
Combine estas dos listas en un diccionario útil, donde las claves son puntos ascii y los valores son la cantidad deseada.
¡Ahora estamos listos para comenzar a hacer personajes! Comience creando una cadena de caracteres fuera del diccionario. ¡Esto contendrá todos los caracteres que necesitamos en nuestra salida final, y la cantidad correcta de cada uno!
Declare el orden deseado de los caracteres e inicie una nueva lista que contendrá nuestra salida final. ¡Con una simple iteración colocaremos los caracteres generados en su posición final e imprimiremos el resultado!
Aquí está la implementación real
Ok, solo tomé una breve pero estúpida y agregué un montón de texto en lugar de una solución de código TL; DR
fuente
n
aquí cuenta como 1 línea u 11?Dart's Hello World compilado a JS (2 936 012)
http://code.google.com/p/dart/issues/detail?id=14686
(Sin embargo, dejaré que Google lo justifique)
fuente
Scala, puntuación: 62
Bien, tiro mi sombrero al ring.
ContentProvider.scala:
HWCChain.scala:
HHWCChain.scala:
eHWCChain.scala:
theLThing.scala:
indexedLHWCChain.scala:
theOThing.scala:
indexedOHWCChain.scala:
BlankHWCChain.scala:
WHWCChain.scala:
rHWCChain.scala:
dHWCChain.scala:
TérminoHWCChain.scala:
HelloWorldCharChainChecker.scala:
Por supuesto, para un enfoque funcional puro, 0 variables apestosas. Todo se presenta en el sistema de tipos y directo. Un compilador inteligente puede optimizarlo hasta la nada.
El programa es claro, simple y fácil de entender. Es fácil de probar y genérico, y evita la trampa de la sobreingeniería (mi equipo quería recodificar indexedOHWCChain e indexedLHWCChain a un rasgo secundario común, que tiene una variedad de objetivos y un campo de longitud, ¡pero eso hubiera sido una tontería!).
fuente
complex
como lo pide la pregunta original. Es solo muyverbose
. Hay una diferencia.Pure Bash sin tenedor (algunos cuentan, parecen ser aproximadamente 85 ...)
Caracteristicas :
gzip
yuuencode
víaperl
(más comúnmente instalado queuudecode
)Reescritura completa (correcciones de errores, dibujo ascii-art y rol de dos niveles):
(La clave utilizada también
V922/G/,2:
se basa enHelloWorld
, pero eso no importa;)Resultado (según lo solicitado):
Hay otra versión:
Usando la misma clave y puede representar algo como:
fuente
Todos saben que la Ley de Moore ha dado un nuevo giro, y que todos los avances reales en potencia informática en la próxima década vendrán en la GPU. Con eso en mente, he usado LWJGL para escribir un programa Hello World increíblemente rápido que aprovecha al máximo la GPU para generar la cadena "Hello World".
Como estoy escribiendo java, es idiomático comenzar copiando y pegando el código de otra persona, utilicé http://lwjgl.org/wiki/index.php?title=Sum_Example
fuente
Ensamblaje (x86, Linux / Elf32): 55 puntos
Todo el mundo sabe que cuando quieres un programa rápido, debes escribir en ensamblador.
A veces no podemos confiar en
ld
hacer su trabajo correctamente: para un rendimiento óptimo, es preferible construir nuestro propio encabezado Elf para nuestro ejecutable hello world. Este código solo requierenasm
compilación, por lo que es muy portátil. No se basa en bibliotecas externas o tiempos de ejecución.Cada línea y declaración son absolutamente cruciales para el correcto funcionamiento del programa: no hay nada extraño, no se puede omitir nada.
Además, esta es realmente la forma más corta de hacerlo sin usar el enlazador: no hay bucles o declaraciones innecesarias para inflar la respuesta.
Tanteo
org
,db
,dw
,dd
,equ
,global _start
): 37dd _start
,dd filesize
,dw ehdrsize
,dw phdrsize
: 4ehdr:
,phdr:
,section .data,
,section .text
,_start:
): 5fuente
PHP / HTML / CSS (88 puntos)
Todo el código está disponible aquí: https://github.com/martin-damien/code-golf_hello-world
index.php
autoload.php
clases / Page.php
clases / Title.php
classes / XMLElement.php
design / stylesheets / hello_world.css
design / templates / layouts / pagelayout.twig
diseño / plantillas / páginas / hello_world.twig
fuente
Brainfuck
369 expresión, 29 bucles while = 398
Salida a partir de K&R El ejemplo del lenguaje de programación C:
fuente
Ti-Basic 84, 1 punto
Ti-Basic es bastante básico. Pero si realmente quieres una explicación justificada, aquí está:
:
inicia cada comando, función, declaración, estructura, subprograma, lo que seaDisp
es una función predefinida que muestra un parámetro en la pantallaaka
whitespace
Permite que la funciónDisp
sepa que se ha llamado y que un parámetro debe seguir el carácter único del espacio en blanco que realmente viene pegado junto conDisp
"
Comienza a definir el literal de cadenaHELLO WORLD
Parte del texto en la cadena literal!
Aunque es un operador matemático factorial, no se evalúa porque está dentro de un literal de cadena"
Finaliza la definición del literal de cadenafuente
Entonces, tengo un gerente muy ... ... ... peculiar. Tiene la extraña idea de que cuanto más simple es un programa, más hermoso, más artístico debería ser. Dado
Hello World
que podría decirse que es uno de los programas más fáciles de escribir, ha pedido algo tan bueno que podría colgar en la pared. Después de investigar un poco, insistió en que se escribiera en Piet.Ahora, no soy de los que cuestionan los méritos de la persona más inteligente que jamás haya recibido la alta dirección, por lo que me encargaron "escribir" este programa, que se puede ejecutar en este intérprete de piet en línea. Tal vez es hora de buscar un gerente más cuerdo ...
fuente
Un lipograma en C:
Las letras 'w' y 'r' en mi computadora son brokn. Provoca problemas con algunos idiomas. Casi todos los directorios pr-compilr en C us que lttr. El bacalao anterior escupe advertencias sobre una declaración implícita de printf (), pero no puedo #includ (stdio.h), pero se ejecuta fin.
fuente
Lo pondré como referencia como wiki de la comunidad. Es un C # uno con malas prácticas. Defino mi propia estructura de datos ascii. No quiero que esto sea un competidor, sino más bien "Kid's, ves a ese hombre de allá ... si no comes tus verduras te volverás como él".
SI SE ENCUENTRA FÁCILMENTE CON MAL CÓDIGO MIRAR AHORA
Usualmente uso esto para asustar a los niños en Halloween. También debes tener en cuenta que no podría incluir todos mis 256 caracteres ascii aquí porque el total de caracteres se dispara a alrededor de 40,000. No intentes reproducir esto por 2 razones:
Entonces uhh ... sí "disfrútalo". Además, si le gusta limpiar y mejorar la tos de revisión del código de tos, esto podría mantenerlo ocupado por un tiempo si está buscando una ocupación no rentable.
fuente
Agregaré algunos comentarios más tarde.
fuente
main
de la claseMain
:ConsoleDisplay
no tiene un miembro llamadogetInstance
. Quiso decirConsoleDisplayFactory
? Por cierto, indique explícitamente el idioma (Java, supongo) y los puntos.Puntos: 183
System
? Bueno, de todos modos, digamos 0.MustOverride
, que contaré.Total: 62 + 43 + 0 + 1 + 1 + 76 = 183
Entrada
Documentación
OptimizedStringFactory
tiene cuerdas optimizadas. Tiene una memoria caché que permite utilizar referencias a mensajes de correoIEnumerable(Of Char)
electrónico eficientes , evitando los problemas inherentes de las referencias. Me han llamado la atención que .NET incluye algún tipo de conjunto de cadenas. Sin embargo, el almacenamiento en caché incorporado no sabe lo suficiente sobre los objetos que estamos utilizando, no es confiable, por lo que he creado mi propia solución.ConcurrentOutputCharacter
clase permite una fácil sincronización de la salida de un solo carácter multiproceso. Esto evita que la salida se confunda. En las mejores prácticas de programación orientada a objetos, se declaraMustInherit
y cada carácter o cadena que se genera se deriva de él, y también se declaraNotInheritable
. Contiene varias afirmaciones para garantizar que se pasen datos válidos.*Character
contiene un solo carácter para nuestro caso específico de salida de cadena.Hermosa no?
Incluso es extensible, debido a los bucles y la herencia antes mencionados, además de la carga de clase dinámica basada en la reflexión. Esto también evita la ofuscación excesiva, por lo que nadie puede reclamar nuestro código al ofuscarlo. Para cambiar las cadenas, simplemente cree un diccionario que asigne caracteres de entrada a diferentes clases de caracteres de salida antes de que el código de reflexión los cargue dinámicamente.
fuente
Javascript, MUCHOS puntos
Aquí vamos:
fuente
Programa C para Hello World: 9 (?)
¡Combinación de caracteres ASCII y matriz de caracteres que contiene un entero! Básicamente, imprimir cada dígito en formato de caracteres.
fuente
Python usando declaraciones if-else
Explicación
Esto crea un diccionario de valores ASCII y sus caracteres asociados, ya que permitirá que el código solo use esos valores y nada más. Nos aseguramos de que hagamos referencia a las vocales en una lista separada y luego hagamos saber que el segundo último carácter se repite en ambas cadenas.
Una vez hecho esto, creamos una lista de diccionarios con reglas establecidas que definen la longitud de la palabra, sus caracteres primero, último y repetitivo, y luego también establecemos una declaración verdadero / falso para ver si se deben verificar las repeticiones.
Una vez hecho esto, el script itera a través de la lista de diccionarios y lo alimenta a través de una función que crea todas las posibles permutaciones de caracteres del diccionario de referencia, teniendo cuidado de agregar caracteres que se repitan si es necesario.
Luego, se alimenta a través de una segunda función que crea aún más permutaciones para cada permutación, pero estableciendo una longitud máxima. Esto se hace para garantizar que encontremos las palabras que queremos analizar. Durante este proceso, lo alimenta a través de una función que utiliza una combinación de sentencias if-else que determina si es digno de ser escupido. Si la permutación coincide con lo que piden las declaraciones, escupe una declaración verdadero / falso y la función que la llamó la agrega a una lista.
Una vez hecho esto, el script toma el primer elemento de cada lista y los combina para decir "hola mundo".
También agregué algunas funciones de depuración para hacerle saber lo lento que va. Elegí hacer esto ya que no necesitas escribir "hola mundo" para que escupe "hola mundo" si sabes cómo construir la oración.
fuente
Bueno, esto esta bien.
fuente
Golf-Basic 84, 9 puntos
Explicación
Pregunte al usuario si quiere dejar de fumar
Grabe su respuesta
Si de hecho deseaban terminar, termina
Si no terminaron, imprime Hello World.
fuente
Hashes y luego fuerza bruta eliminan los caracteres hash de "Hello, World!", Los agrega a a
StringBuilder
, y registra eso con un Logger.fuente
C # - 158
Les digo qué, desarrolladores en estos días, sin prestar atención a los principios SÓLIDOS. La gente en estos días descuida lo importante que es hacer incluso las tareas simples de manera adecuada.
Primero, necesitamos comenzar con los requisitos:
Primero, comencemos con la localización. Para localizar correctamente las cadenas, necesitamos un alias para que la cadena se use dentro del programa, y la configuración regional en la que queremos la cadena. Obviamente, necesitamos almacenar estos datos en un formato fácilmente interoperable, XML. Y para hacer XML correctamente, necesitamos un esquema.
StringDictionary.xsd
Esto define nuestra estructura XML y nos lleva a un buen comienzo. A continuación, necesitamos el archivo XML en sí, que contiene las cadenas. Haga de este archivo un recurso incrustado en su proyecto.
Con eso fuera del camino, una cosa que no queremos es ninguna cadena codificada en nuestro programa. Use Visual Studio para crear recursos en su proyecto que usaremos para nuestras cadenas. Asegúrese de cambiar
XmlDictionaryName
para que coincida con el nombre de su archivo de cadenas XML definido anteriormente.Como somos inversión de dependencia, necesitamos un contenedor de dependencia para manejar el registro y la creación de nuestros objetos.
IDependencyRegister.cs
IDependencyResolver.cs
Podemos proporcionar una implementación simple de ambas interfaces juntas en una clase.
DependencyProvider.cs
Comenzando en el nivel más bajo y avanzando hacia arriba, necesitamos una forma de leer el XML. Después de
S
yI
en SOLID, definimos una interfaz que utiliza nuestro código de diccionario de cadena XML:Pensando en el diseño adecuado para el rendimiento. Recuperar estas cadenas estará en la ruta crítica de nuestro programa. Y queremos estar seguros de que siempre recuperamos la cadena correcta. Para esto, vamos a usar un diccionario donde la clave es el hash del nombre de la cadena y la configuración regional, y el valor contiene nuestra cadena traducida. Una vez más, siguiendo el principio de responsabilidad única, nuestro diccionario de cadenas no debería importar cómo se combinan las cadenas, por lo que hacemos una interfaz y proporcionamos una implementación básica
IStringHasher.cs
Sha512StringHasher.cs
Con esto, podemos definir nuestro almacén de cadenas XML que lee un archivo XML de un recurso incrustado y crea un diccionario que contiene las definiciones de cadenas
EmbeddedXmlStringStore.cs
Y la
StringInfo
estructura asociada para contener la información de la cadena:StringInfo.cs
Dado que podríamos tener varias formas de buscar cadenas, necesitamos aislar el resto del programa de cómo se recuperan exactamente las cadenas, para hacer esto, definimos
IStringProvider
, que se utilizará en el resto del programa para resolver cadenas:ILocaleStringProvider.cs
Con una implementación:
StringDictionaryStoreLocaleStringProvider.cs
Ahora, para manejar locales. Definimos una interfaz para obtener la configuración regional actual del usuario. Aislar esto es importante, ya que un programa que se ejecuta en la computadora del usuario puede leer la configuración regional del proceso, pero en un sitio web, la configuración regional del usuario puede provenir de un campo de base de datos asociado con su usuario.
ILocaleProvider.cs
Y una implementación predeterminada que utiliza la cultura actual del proceso, ya que este ejemplo es una aplicación de consola:
Al resto de nuestro programa realmente no le importa si estamos sirviendo cadenas localizadas o no, por lo que podemos ocultar la búsqueda de localización detrás de una interfaz:
IStringProvider.cs
Nuestra implementación de StringProvider es responsable de usar las implementaciones proporcionadas
ILocaleStringProvider
yILocaleProvider
devolver una cadena localizadaDefaultStringProvider.cs
Finalmente, tenemos nuestro punto de entrada al programa, que proporciona la raíz de la composición y obtiene la cadena, imprimiéndola en la consola:
Program.cs
Y así es como se escribe un programa empresarial listo para microservicios, con reconocimiento local, Hello World.
Puntuaciones: Archivos: 17 El espacio de nombres incluye: 11 Clases: 14 Variables: 26 Métodos: 17 Declaraciones: 60 Flujo de control: 2 Declaraciones directas (miembros de interfaz, tipos complejos xsd): 11 Total: 158
fuente
iX2Web
fuente