Seu chefe pede que você escreva um programa "olá mundo". Como você é pago por linhas de código, deseja torná-lo o mais complexo possível. No entanto, se você apenas adicionar linhas sem sentido, ou coisas obviamente inúteis ou ofuscantes, você nunca conseguirá isso através da revisão de código. Portanto, o desafio é:
Escreva um programa "olá mundo", o mais complexo possível, sob a condição de que você possa fornecer uma "justificativa" para toda complexidade do código.
O comportamento necessário do programa é apenas gerar uma única linha "Hello world" (sem as aspas, mas com uma nova linha no final) e sair com êxito.
"Justificativas" incluem:
- compatibilidade com buzzword ("O software moderno é orientado a objetos!")
- boas práticas de programação geralmente aceitas ("Todo mundo sabe que você deve separar modelo e visualização")
- manutenibilidade ("Se fizermos dessa maneira, poderemos fazer XXX mais facilmente depois")
- e, é claro, qualquer outra justificativa que você possa imaginar usando (em outras situações) para código real.
Obviamente, justificativas tolas não serão aceitas.
Além disso, você deve "justificar" sua escolha de idioma (por isso, se você escolher um idioma inerentemente detalhado, precisará justificar por que é a escolha "correta"). Línguas divertidas como unlambda ou INTERCAL não são aceitáveis (a menos que você pode dar uma muito boa justificativa para usá-los).
A pontuação das entradas qualificadas é calculada da seguinte forma:
- 1 ponto para cada afirmação (ou qualquer que seja o equivalente a uma afirmação no seu idioma preferido).
- 1 ponto para cada definição de função, tipo, variável etc (com exceção da função principal, quando aplicável).
- 1 ponto para cada instrução de uso do módulo, diretiva de inclusão do arquivo, espaço para nome usando a instrução ou similar.
- 1 ponto para cada arquivo de origem.
- 1 ponto para cada declaração encaminhada necessária (se você pode se livrar dela reorganizando o código, você deve "justificar" por que o arranjo que você escolheu é o "certo").
- 1 ponto para cada estrutura de controle (se, enquanto, para etc.)
Lembre-se de que você precisa "justificar" cada linha.
Se o idioma escolhido for diferente o suficiente para que esse esquema não possa ser aplicado (e você possa fornecer uma boa "justificativa" para o seu uso), sugira um método de pontuação que mais se assemelhe ao descrito acima para o seu idioma de escolha.
Solicita-se aos participantes que calculem a pontuação de sua inscrição e a escrevam na resposta.
fonte
Respostas:
C ++, trollpost
Meu cérebro não pode justificar escrever um mais longo :)
fonte
Aqui, demonstrarei o poder e a usabilidade da linguagem de script chamada Python , resolvendo uma tarefa bastante complexa de maneira graciosa e eficiente por meio dos operadores da linguagem de script acima mencionados sobre - e geradores de - estruturas de dados, como listas e dicionários .
No entanto, receio não compreender completamente o uso das frases "o mais complexo possível" e "justificativa". No entanto, aqui está um resumo da minha estratégia usual, bastante auto-explicativa e direta, seguida pela implementação real em Python que você encontrará, é bastante fiel à natureza lúdica e de alta ordem da linguagem:
Defina o alfabeto - primeiro passo óbvio. Para expansibilidade, escolhemos toda a gama ascii. Observe o uso do gerador de lista interno que pode nos poupar por horas de inicialização de lista tediosa.
diga quantas letras de cada alfabeto usaremos. Isso é simplesmente representado como outra lista!
Mesclar essas duas listas em um dicionário útil, onde as chaves são pontos ascii e os valores são a quantidade desejada.
Agora estamos prontos para começar a fazer personagens! Comece criando uma sequência de caracteres fora do dicionário. Isso conterá todos os caracteres que precisamos em nossa produção final e a quantidade certa de cada um!
Declare a ordem desejada dos caracteres e inicie uma nova lista que conterá nossa saída final. Com iteração simples, colocaremos os caracteres gerados em sua posição final e imprimiremos o resultado!
Aqui está a implementação real
Ok, tentei um pequeno, mas estúpido, e adicionei um monte de texto em vez de uma solução de código TL; DR
fonte
n
aqui conta como 1 linha ou 11?Hello World de Dart compilado em JS (2 936 012)
http://code.google.com/p/dart/issues/detail?id=14686
(Porém, deixarei o Google justificar)
fonte
Scala, pontuação: 62
Ok, eu jogo meu chapéu no ringue.
ContentProvider.scala:
HWCChain.scala:
HHWCChain.scala:
eHWCChain.scala:
theLThing.scala:
indexedLHWCChain.scala:
theOThing.scala:
indexedOHWCChain.scala:
BlankHWCChain.scala:
WHWCChain.scala:
rHWCChain.scala:
dHWCChain.scala:
TermHWCChain.scala:
HelloWorldCharChainChecker.scala:
Obviamente, para uma abordagem funcional pura, 0 variáveis fedorentas. Tudo é apresentado no sistema de tipos e direto. Um compilador inteligente pode otimizá-lo até o nada.
O programa é claro, simples e fácil de entender. É fácil de testar e genérico e evita a armadilha da superengenharia (minha equipe queria recodificar o indexedOHWCChain e indexedLHWCChain em um traço secundário comum, que possui uma variedade de alvos e um campo de extensão, mas isso seria tolo!).
fonte
complex
que a pergunta original solicita. É apenas muitoverbose
. Há uma diferença.Pure Bash no fork (alguns contam, parecem ser aproximadamente 85 ...)
Características :
gzip
euuencode
via da segunda versãoperl
(mais comumente instalado queuudecode
)Reescrita completa (correções de bugs, desenho ascii-art e nível de dois níveis):
(A chave usada também
V922/G/,2:
se baseiaHelloWorld
, mas isso não importa;)Resultado (conforme solicitado):
Existe outra versão:
Usando a mesma chave e pode render algo como:
fonte
Todo mundo sabe que a Lei de Moore tomou uma nova direção e que todos os avanços reais no poder da computação na próxima década virão na GPU. Com isso em mente, usei o LWJGL para escrever um programa Hello World incrivelmente rápido que aproveita totalmente a GPU para gerar a string "Hello World".
Como estou escrevendo java, é idiomático começar copiando e colando o código de alguém, usei http://lwjgl.org/wiki/index.php?title=Sum_Example
fonte
Montagem (x86, Linux / Elf32): 55 pontos
Todo mundo sabe que quando você quer um programa rápido, você precisa escrever em assembly.
Às vezes, não podemos confiar em
ld
fazer seu trabalho corretamente - para obter um desempenho ideal, é preferível criar nosso próprio cabeçalho Elf para o nosso executável hello world. Este código requer apenasnasm
a construção, por isso é muito portátil. Ele não depende de bibliotecas externas ou tempos de execução.Todas as linhas e declarações são absolutamente cruciais para o correto funcionamento do programa - não há problemas, nada pode ser omitido.
Além disso, essa é realmente a maneira mais curta de fazê-lo sem usar o vinculador - não há loops ou declarações desnecessárias para eliminar a resposta.
Pontuação
org
,db
,dw
,dd
,equ
,global _start
): 37dd _start
,dd filesize
,dw ehdrsize
,dw phdrsize
: 4ehdr:
,phdr:
,section .data,
,section .text
,_start:
): 5fonte
PHP / HTML / CSS (88pts)
Todo o código está disponível aqui: https://github.com/martin-damien/code-golf_hello-world
index.php
autoload.php
classes / Page.php
classes / Title.php
classes / XMLElement.php
design / folhas de estilo / hello_world.css
design / modelos / layouts / pagelayout.twig
design / modelos / páginas / hello_world.twig
fonte
Brainfuck
Expressão 369, 29 enquanto loops = 398
Saída a partir de K&R O exemplo da linguagem de programação C:
fonte
Ti-Basic 84, 1 ponto
O Ti-Basic é bem básico. Mas se você realmente quer uma explicação justificada, aqui está:
:
inicia todo comando, função, instrução, estrutura, subprograma, o nome deleDisp
é uma função predefinida que exibe um parâmetro na telaaka
whitespace
Permite que a funçãoDisp
saiba que foi chamada e que um parâmetro deve seguir o caractere único de espaço em branco que realmente é colado junto comDisp
"
Inicia a definição da string literalHELLO WORLD
Parte do texto na cadeia literal!
Embora seja um operador matemático fatorial, ele não é avaliado porque está dentro de uma string literal"
Termina a definição da string literalfonte
Então, eu tenho um gerente muito ... ... peculiar. Ele tem essa estranha idéia de que quanto mais simples um programa, mais bonito, mais artístico ele deve ser. Como esse
Hello World
é sem dúvida um dos programas mais fáceis de escrever, ele pediu algo tão bom que pudesse pendurar na parede. Depois de fazer algumas pesquisas, ele insistiu que a coisa fosse escrita em Piet.Agora, não sou eu quem questiona os méritos da pessoa mais inteligente que já conquistou a alta gerência; então, fui encarregado de "escrever" este programa, que pode ser executado neste intérprete online de piet. Talvez seja hora de procurar um gerente mais sensato ...
fonte
Um lipograma em C:
O nome k 'w' e 'r' no meu computador é brokn. Causs problemas com som languags. Quase todas as diretivas pré-compiladoras em C us que lttr. O código acima emite avisos sobre uma descrição implícita de printf (), porque eu não posso #includ (stdio.h), mas ele roda fin.
fonte
Vou colocar isso para referência como wiki da comunidade. É um C # one com más práticas. Eu defino minha própria estrutura de dados ascii. Não quero que isso seja um concorrente, mas sim "Garoto, você vê aquele homem ali ... se você não comer seus vegetais, ficará como ele" como exemplo.
Se você está facilmente perturbado por um código ruim, procure agora
Eu costumo usar isso para assustar as crianças no Halloween. Você também deve observar que eu não poderia caber todos os meus 256 caracteres ASCII aqui porque o total de caracteres dispara para cerca de 40.000. Não tente reproduzir isso por 2 razões:
Então uhh ... sim, "aproveite!". Além disso, se você gosta de limpeza e melhorando código tosse revisão de código tosse isso pode mantê-lo ocupado por um tempo se você está procurando uma ocupação sem fins lucrativos.
fonte
Vou adicionar alguns comentários mais tarde.
fonte
main
da classeMain
:ConsoleDisplay
não possui um membro nomeadogetInstance
. Você quis dizerConsoleDisplayFactory
? BTW, indique explicitamente a linguagem (Java eu acho) e os pontos.Pontos: 183
System
? Bem, enfim, digamos 0.MustOverride
, que eu vou contar.Total: 62 + 43 + 0 + 1 + 1 + 76 = 183
Entrada
Documentação
OptimizedStringFactory
detém cordas otimizados. Possui um cache que permite que referências aIEnumerable(Of Char)
s eficientes sejam usadas, evitando os problemas inerentes às referências. Fui informado que o .NET inclui algum tipo de pool de strings. No entanto, o cache interno não sabe o suficiente sobre os objetos que estamos usando - não é confiável, por isso criei minha própria solução.ConcurrentOutputCharacter
classe permite a sincronização fácil da saída de um caractere multithread. Isso impede que a saída fique distorcida. Nas melhores práticas de programação orientada a objetos, é declaradoMustInherit
e todos os caracteres ou cadeias de caracteres de saída são derivados e também declaradosNotInheritable
. Ele contém várias asserções para garantir que dados válidos sejam transmitidos.*Character
um contém um único caractere para o nosso caso específico de saída de string.Linda não?
É até extensível, devido aos loops e herança mencionados acima, além do carregamento de classe dinâmico e baseado em reflexão. Isso também evita ofuscação excessivamente zelosa, para que ninguém possa reivindicar nosso código ofuscando-o. Para alterar as cadeias, basta criar um dicionário que mapeie os caracteres de entrada para diferentes classes de caracteres de saída antes que o código de reflexão os carregue dinamicamente.
fonte
Javascript, muitos pontos
Aqui vamos nós:
fonte
Programa C para o Hello World: 9 (?)
Combinação de caracteres ASCII e matriz de caracteres contendo número inteiro! Basicamente, imprimindo todos os dígitos no formato de caractere.
fonte
Python usando instruções if-else
Explicação
Isso cria um dicionário de valores ASCII e seus caracteres associados, pois permitirá que o código use apenas esses valores e nada mais. Garantimos que fazemos referência às vogais em uma lista separada e depois sabemos que o segundo último caractere se repete nas duas cadeias.
Feito isso, criamos uma lista de dicionários com regras definidas que definem o tamanho da palavra, seus primeiros, últimos e caracteres repetidos e, em seguida, também definimos uma declaração verdadeira / falsa para se as repetições devem ser verificadas.
Feito isso, o script percorre a lista de dicionários e a alimenta através de uma função que cria todas as permutações possíveis de caracteres do dicionário de referência, tomando o cuidado de adicionar caracteres repetidos, se necessário.
Posteriormente, é alimentado por uma segunda função que cria ainda mais permutações para cada permutação, mas definindo um comprimento máximo. Isso é feito para garantir que encontramos as palavras que queremos analisar. Durante esse processo, ele o alimenta através de uma função que usa uma combinação de instruções if-else que determina se vale a pena ser cuspido. Se a permutação corresponder ao que as instruções estão pedindo, ela emitirá uma declaração verdadeira / falsa e a função que a chamou adicionará a uma lista.
Feito isso, o script pega o primeiro item de cada lista e os combina para indicar "olá mundo".
Também adicionei alguns recursos de depuração para que você saiba o quão lento está indo. Eu escolhi fazer isso, pois você não precisa escrever "olá mundo" para que ele cuspa "olá mundo" se você souber construir a frase.
fonte
Bem, isso é bom.
fonte
Golfe básico 84, 9 pontos
Explicação
Pergunte ao usuário se ele deseja sair
Grave a resposta
Se eles realmente desejavam terminar, terminava
Se eles não terminarem, imprimirá Hello World.
fonte
Os hashes e, em seguida, a força bruta destilam os caracteres de "Olá, Mundo!", Os adicionam a
StringBuilder
e os registram em um Logger.fonte
C # - 158
Eu digo a você, desenvolvedores hoje em dia, sem prestar atenção aos princípios do SOLID. Hoje em dia, as pessoas negligenciam o quanto é importante realizar corretamente as tarefas simples.
Primeiro, precisamos começar com os requisitos:
Primeiro, vamos começar com a localização. Para localizar corretamente as strings, precisamos de um alias para a string usar no programa e o local em que queremos a string. Obviamente, precisamos armazenar esses dados em um formato facilmente interoperável, XML. E para fazer o XML corretamente, precisamos de um esquema.
StringDictionary.xsd
Isso define nossa estrutura XML e nos leva a um bom começo. Em seguida, precisamos do próprio arquivo XML, contendo as strings. Torne este arquivo um recurso incorporado no seu projeto.
Com isso fora do caminho, uma coisa que absolutamente não queremos é qualquer string codificada no nosso programa. Use o Visual Studio para criar recursos em seu projeto que usaremos para nossas seqüências de caracteres. Certifique-se de alterar
XmlDictionaryName
para corresponder ao nome do seu arquivo de cadeias XML definido anteriormente.Como somos inversões de dependência, precisamos de um contêiner de dependência para lidar com o registro e a criação de nossos objetos.
IDependencyRegister.cs
IDependencyResolver.cs
Nós podemos fornecer uma implementação simples de ambas as interfaces juntas em uma classe.
DependencyProvider.cs
Começando no nível mais baixo e subindo, precisamos de uma maneira de ler o XML. Após o
S
eI
no SOLID, definimos uma interface que nosso código de dicionário de string XML usa:Pensando no design adequado para o desempenho. A recuperação dessas strings estará no caminho crítico do nosso programa. E queremos ter certeza de que sempre recuperamos a string correta. Para isso, usaremos um dicionário em que a chave é o hash do nome e local da string e o valor contém nossa string traduzida. Mais uma vez, seguindo o princípio da responsabilidade única, nosso dicionário de strings não deve se importar com a maneira como as strings são hash, por isso criamos uma interface e fornecemos uma implementação básica
IStringHasher.cs
Sha512StringHasher.cs
Com isso, podemos definir nosso armazenamento de string XML que lê um arquivo XML de um recurso incorporado e cria um dicionário contendo as definições de string
EmbeddedXmlStringStore.cs
E a
StringInfo
estrutura associada para armazenar as informações da string:StringInfo.cs
Como podemos ter várias maneiras de procurar seqüências de caracteres, precisamos isolar o restante do programa de como exatamente as seqüências são recuperadas. Para isso, definimos
IStringProvider
qual será usado em todo o restante do programa para resolvê-las:ILocaleStringProvider.cs
Com uma implementação:
StringDictionaryStoreLocaleStringProvider.cs
Agora, para lidar com localidades. Definimos uma interface para obter a localidade atual do usuário. Isolar isso é importante, pois um programa em execução no computador do usuário pode ler a localidade fora do processo, mas em um site, a localidade do usuário pode vir de um campo de banco de dados associado ao usuário.
ILocaleProvider.cs
E uma implementação padrão que usa a cultura atual do processo, já que esta amostra é um aplicativo de console:
O restante do nosso programa realmente não se importa se estamos servindo cadeias localizadas ou não, para que possamos ocultar a pesquisa de localização atrás de uma interface:
IStringProvider.cs
Nossa implementação do StringProvider é responsável por usar as implementações fornecidas
ILocaleStringProvider
eILocaleProvider
retornar uma sequência localizadaDefaultStringProvider.cs
Por fim, temos o ponto de entrada do programa, que fornece a raiz da composição e obtém a string, imprimindo-a no console:
Program.cs
E é assim que você escreve um programa Hello World pronto para o microsserviço empresarial, com reconhecimento de localidade.
Pontuações: Arquivos: 17 Espaço para nome Inclui: 11 Classes: 14 Variáveis: 26 Métodos: 17 Instruções: 60 Fluxo de controle: 2 Declarações avançadas (membros da interface, xsd complexTypes): 11 Total: 158
fonte
iX2Web
fonte