Programa Hello World mais curto, sem ponto e vírgula

14

Recentemente, vi algumas perguntas no SO que perguntavam se você poderia criar um programa Hello World sem usar ponto e vírgula usando C #. O desafio é fazer isso novamente, mas com a menor quantidade de código possível!

Bali C
fonte
3
Presumo que isso seja um desafio específico ao idioma? Caso contrário, há muitos idiomas em que essa tarefa seria trivial. (Por exemplo, 'Hello World'é um programa GolfScript válido que imprime Hello WorldEmbora. HQ9 + será fácil vencê-lo.)
Ilmari Karonen
@llmari Desculpe, sim, eu atualizei a pergunta. Eu o teria marcado em C #, mas ele não existe e não tenho o representante para criá-lo, obrigado.
Bali C

Respostas:

12

C #, 76

class X{static void Main(){if(System.Console.Write("Hello, World!")is X){}}}

Eu tentei isso no meu VS2012 e funciona muito bem, mesmo que seja uma surpresa poder aplicar o isoperador ao void...

Timwi
fonte
15

Caracteres C # 85

class H{static void Main(){if(System.Console.Out.WriteAsync("Hello, world!")is H){}}}
mizer
fonte
Qual versão do .NET é essa? O .NET 4 parece não conter uma definição para TextWriter.WriteAsync ().
Primo
3
@primo .NET 4.5 faz.
26412 Bob
12

C # (114)

class M{static void Main(){if(typeof(System.Console).GetMethods()[78].Invoke(null,new[]{"Hello, world!"})is M){}}}

Observe que o índice adequado para Write(string)/ WriteLine(string)pode ser diferente no seu sistema. No entanto, como existem apenas 106 métodos no total, tenho quase certeza Write(string)ou WriteLine(string)haverá um número de índice de dois dígitos em todos os sistemas, portanto a contagem de caracteres deve ser geralmente válida.

Demonstração: http://ideone.com/5npky (o Writemétodo aparentemente é o índice 23 aqui)

mellamokb
fonte
Esta solução é brilhante. +1
primo
Eu também pensei que era irônico que, depois de colocá-lo juntos, ele saiu exatamente 1 carácter mais curto do que seu :)
mellamokb
7
Pode salvar três caracteres mudando nullpara 0. Obter uma contagem de caracteres agradável de 111 :)
Timwi
8

115 bytes

class H{static void Main(){if(((System.Action)(()=>System.Console.Write("Hello, world!"))).DynamicInvoke()is H){}}}

Provavelmente é possível produzir algo um pouco mais curto, mas tenho certeza de que você precisará fazer algum tipo de chamada assíncrona.

primo
fonte
4

C # 96 95 94 caracteres

Um pouco de trapaça, mas funciona se você tiver o IronRuby instalado:

class P{static void Main(){if(IronRuby.Ruby.CreateEngine().Execute("puts'Hello World'")>1){}}}
Cristian Lupascu
fonte
2
Você pode salvar 1 caractere substituindo ==por um operador de comparação de um caractere.
Peter Taylor
@PeterTaylor Atualizei o código. Obrigado por esta ótima sugestão!
Cristian Lupascu
Também removi o espaço entre putse a corda. puts'Hello World'é código Ruby válido
Cristian Lupascu