Najkrótszy program Hello World bez średników

14

Niedawno widziałem kilka pytań na temat SO, które zadały pytanie, czy możesz stworzyć program Hello World bez użycia średników za pomocą C #. Wyzwanie polega na zrobieniu tego ponownie, ale przy możliwie jak najkrótszym kodzie!

Bali C.
źródło
3
Zakładam, że ma to być wyzwanie specyficzne dla języka? W przeciwnym razie istnieje wiele języków, w których to zadanie byłoby banalne. (Na przykład 'Hello World'jest to prawidłowy program do drukowania w GolfScript Hello World. Chociaż HQ9 + z łatwością go pokona.)
Ilmari Karonen,
@llmari Przepraszamy, tak, zaktualizowałem pytanie. Oznacziłbym go jako C #, ale nie istnieje i nie mam przedstawiciela, który mógłby go utworzyć, dzięki.
Bali C

Odpowiedzi:

12

C #, 76

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

Próbowałem tego w moim VS2012 i działa dobrze, mimo że jest dość niespodzianką, że można zastosować isoperatora do void...

Timwi
źródło
15

Znaki C # 85

class H{static void Main(){if(System.Console.Out.WriteAsync("Hello, world!")is H){}}}
mizer
źródło
Która to wersja .NET? .NET 4 nie wydaje się zawierać definicji TextWriter.WriteAsync ().
primo
3
@primo .NET 4.5 robi.
Bob
12

C # (114)

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

Zauważ, że właściwy indeks dla Write(string)/ WriteLine(string)może być inny w twoim systemie. Jednakże, ponieważ istnieją tylko 106 Metody sumie jestem prawie pewien, albo Write(string)czy WriteLine(string)będzie dwucyfrowy numer indeksu na każdym systemie, więc liczba znaków powinny być generalnie zachowują ważność.

Demo: http://ideone.com/5npky ( Writemetoda najwyraźniej tutaj znajduje się indeks 23)

mellamokb
źródło
To rozwiązanie jest genialne. +1
primo
Pomyślałem też, że to ironiczne, że po złożeniu wyszło dokładnie 1 postać krótsza niż twoja :)
mellamokb
7
Można zapisać trzy znaki, zmieniając nullna 0. Zdobądź niezłą liczbę znaków 111 :)
Timwi
8

115 bajtów

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

Prawdopodobnie możliwe jest wyprodukowanie czegoś nieco krótszego, ale jestem prawie pewien, że będziesz potrzebować wykonać jakieś asynchroniczne połączenie.

primo
źródło
4

C # 96 95 94 znaki

Trochę oszukiwać, ale działa, jeśli masz zainstalowany IronRuby:

class P{static void Main(){if(IronRuby.Ruby.CreateEngine().Execute("puts'Hello World'")>1){}}}
Cristian Lupascu
źródło
2
Możesz zapisać 1 znak, zastępując ==jednoznakowym operatorem porównania.
Peter Taylor
@PeterTaylor Zaktualizowałem kod. Dzięki za tę wspaniałą sugestię!
Cristian Lupascu,
Usunąłem również spację między putsciągiem a łańcuchem. puts'Hello World'jest poprawnym kodem ruby
Cristian Lupascu,