Sztuka ASCII „Hello-World!” [Zamknięta]

39

Twoim celem jest napisanie najkrótszego programu, który wyświetli „Hello-World!” jako art. ASCII

Zasady:

  • Musi być czytelny dla człowieka, nie dbam o jego rozmiar (cols / wiersze)
  • Dane wyjściowe muszą zawierać tylko spacje („”), ostre („#”) i znaki nowej linii
  • Dane wyjściowe muszą działać z czcionką o stałej szerokości (ale litery nie muszą używać czcionki o stałej szerokości)
  • W rezultacie każda postać musi być oddzielona od siebie przynajmniej jedną spacją

Dodaj tytuł z językiem i liczbą bajtów w kodzie.

sebcap26
źródło
5
bash: 33 znaków - pastebin.com/HZ1w8z8g Czy to możliwe?
manatwork
4
Dlaczego myślnik? ...
Timwi
1
Przypuszczam, że mogę uniemożliwić lub niewykonalnie utrudnić korzystanie z czegoś predefiniowanego, takiego jak HQ9 +.
manatwork
1
@PeterTaylor: Dane wyjściowe składające się ze spacji i skrótów muszą działać z czcionką o stałej szerokości, ale litery reprezentowane przez wiele skrótów nie muszą mieć tej samej szerokości.
Timwi
1
Powiązane, ale różne: powiedz światu „Witaj” w sztuce ASCII
Ilmari Karonen

Odpowiedzi:

18

Absolutnie mi się podobało

Perl, 126 116 114 102 98   87 (69) znaków (tylko ASCII i bez czcionek zewnętrznych)

Na razie najkrótsze rozwiązanie ascii, które nie korzysta z zewnętrznych czcionek.

Chciałem przedstawić jakieś eleganckie rozwiązanie, ale @Ilmari Karonen rzucił mi wyzwanie unpack... nie powinienem tego robić :-)

Cóż, ten kod 92 88 69 znaków generuje angielski nieczytelny wynik identyczny jak @Ilmari Karonen:

say map{y/01/ #/r}unpack"((b6)7a)*",'eT@j@DE
UUBjdeE
wTujjTA
eUBTddE'

Bardziej elegancki wariant bez rozpakowania (88 znaków):

map{print$"x$_,$/x/4/,"#"x!/7/}7&ord,7&ord>>3for'HRyYOKLIIjIRHBa@AJIAIIIJaQHQNSRH'=~/./g

Ale myślę, że takie |. | E || .- |||., D! nic nie jest podobne do Hello-World! i nie powinno być dozwolone, więc trafia się tutaj prawdziwe rozwiązanie - rozpakuj wariant, 87 znaków :

say map{y/01/ #/r}unpack"((b6)9a)*",'E`D@HB@Hd
EcD@HB@Hd
ggDsIbaIf
e`dDhRRHE
ECICPaQPf'

Wynik:

wprowadź opis zdjęcia tutaj

Bardziej elegancki wariant przy 98 znakach:

map{print$"x$_,$/x/1/,"#"x!/7/}7&ord,7&ord>>3for'PW{nw^QD[w}vK@X@PcP@jCDjXQk[rRRbSQD\CWbXeX'=~/./g

Wynik:

wprowadź opis zdjęcia tutaj

Starsze rozwiązanie (114 znaków), inny rodzaj kodowania:

print'#'x(3&ord),$"x($:=15&ord>>2),$/x!$:for'EmM}U}]MBEQSM}U}]MBOFNMQOKUMSKUOBEM]MMM]IIIMIUQIAEQWMMgFROYQOB'=~/./g

Wynik:

wprowadź opis zdjęcia tutaj

Tomas
źródło
Zapomniałem okrzyk na końcu, tj. Hello-World! Powinny też być e
47

JavaScript, 178 bajtów

c=document.createElement("canvas").getContext("2d");c.fillText("Hello-World!",0,7);d=c.getImageData(1,0,56,7).data;s="";for(i=3;i<1568;i+=4){s+=d[i]?"#":" ";s+=(i+1)%224?"":"\n"}

Działa to w przeglądarce Firefox 27 Scratchpad.

#   #        #  #          #   #   #          #     #  #
#   #        #  #          #  # #  #          #     #  #
#   #   ##   #  #   ##      # # # #   ##   ## #   ###  #
#####  #  #  #  #  #  #     # # # #  #  #  #  #  #  #  #
#   #  ####  #  #  #  # ##  # # # #  #  #  #  #  #  #  #
#   #  #     #  #  #  #     # # # #  #  #  #  #  #  #   
#   #   ###  #  #   ##       #   #    ##   #  #   ###  #
sebcap26
źródło
Poznałem Arial :-D
Timwi
4
To jest moje ulubione. Użyłeś interesującej metody, aby dojść do rozwiązania. Wspaniale!
Darth Egregious
2
Pomysłowy, wierzę, że właśnie stworzyłeś Figlet dla JavaScript;)
WallyWest
Dagnammit, to była moja pierwsza myśl! Oto upvote zamiast tego. :)
Jordan Gray
37

Mathematica 101 99 98

To rasteryzuje wyrażenie, uzyskuje dane obrazu binarnego, konwertuje każdy 1 na „#”, każdy 0 na „” (puste miejsce) i wyświetla dane wyjściowe w siatce 12 na 130 znaków.

GraphicsGrid[ImageData@ImageResize[Binarize@Rasterize@Style["Hello-World!",99],130] 
  /.{1→"",0→"#"}]

cześć

Jedna postać oszczędzona dzięki Jonathanowi Van Matre.

DavidC
źródło
1
Dlaczego grubość różni się między literami L?
MrZander
Zrobiłem rasteryzację wyrażenia jako pojedynczy obraz. Gdybym zrobił to litera po literze, litery L byłyby identyczne. Ponadto, zwiększając rozmiar siatki rasteryzacyjnej, wyniki mają tendencję do zbliżania się do jakości drukowanych znaków. Ale większa siatka powoduje stosunkowo mniejsze „#”, do tego stopnia, że ​​wydają się być zwykłymi pikselami. Pozostaje pytanie: dlaczego 2 l na zdjęciu otrzymują różne ciężary?
DavidC
3
@MrZander, to jest właśnie powód, dla którego czcionki mają podpowiedzi: Podczas próby dopasowania czcionek do siatki pikseli o niskiej rozdzielczości, tak jak w sztuce ASCII lub na ekranie, szerokość rdzenia nigdy nie jest naprawdę jednolita, ponieważ czcionka nie może mieć rdzenia o szerokości integralnej w pikselach we wszystkich rozmiarach . Oto ładne wyjaśnienie ze zdjęciami.
Joey,
1
prawdopodobnie najlepiej wyglądający
Ronan Dejhero
1
Jonathan Van Matre, dzięki. Pierwszy parametr można zmniejszyć do 99, ale nie chciałbym zmniejszać drugiego ze względu na jakość wyjściową. (Zdaję sobie sprawę, że jest to wyzwanie związane z golfem, ale mam swoją dumę.)
DavidC
25

Delphi 85 bajtów

var s:tstringlist;begin s:=tstringlist.Create;s.LoadFromFile('\a');Write(s.Text);end.

Wiem, że nie jest to najładniejsze rozwiązanie, ale nie było reguły, która mówi, że nie można korzystać z zasobów zewnętrznych.
Wynik: Wynik

Teun Pronk
źródło
12
+1 za kreatywność wykorzystania # jako tła zamiast pierwszego planu.
gerrit
1
Zamiast tego możesz zadeklarować s TStrings. (Ale zachowaj instancję za pomocą TStringList.)
manatwork
Czy plik, który ładujesz, pochodzi z czegoś, co faktycznie jest dostarczane z Delphi, czy sam go napisałeś? Jeśli to drugie, myślę, że musisz liczyć jego długość jako część swojego wyniku.
Ilmari Karonen
@Ilmari, jestem pewien, że Delphi nie jest dostarczane z plikiem ze sztuką ASCII „Hello-World” :) Ponadto, w odpowiedzi opisano, że wykorzystuje zasoby zewnętrzne.
TLama,
3
@TLama: Też tak przypuszczałem, starałem się grzecznie to sformułować. Chodzi mi o to, że nawet gdyby dozwolone były zasoby zewnętrzne, program ten nadal nie działałby na komputerach innych niż jego autora (i tak naprawdę nie mamy dowodu , że działa nawet na jego komputerze). Również mogę pokonać swój wynik z poniższego skryptu Perl: do X. Treść „zasobu zewnętrznego” Xpozostaje nieokreślona (działa dla mnie, prawda?), Ale podam kilka możliwych sugestii poniżej ...
Ilmari Karonen
15

Perl 5, 54 bajty / 71 znaków ASCII do wydruku

Uwaga: jest to druga wersja tej odpowiedzi. W przypadku oryginalnej wersji 64-bajtowej / 95-znakowej używającej PHP i gzinflate () zobacz historię tej odpowiedzi .

Oto 71-znakowa wersja ASCII do wydruku:

y/01/ #/,say for unpack'(B40)4',unpack u,'4I*`1`(JJI!$FFNRJU52HIJ0*))H'

Wersja 54-bajtowa zawiera znaki niedrukowalne, więc udostępniam ją jako zrzut heksadecymalny. W systemach uniksowych możesz użyć, xxd -raby zmienić zrzut szesnastkowy z powrotem w wykonywalny skrypt Perla:

0000000: 792f 3031 2f20 232f 2c73 6179 2066 6f72  y/01/ #/,say for
0000010: 2075 6e70 6163 6b27 2842 3430 2934 272c   unpack'(B40)4',
0000020: 27a4 a011 008a aaa4 1126 9aec aad5 54a8  '........&....T.
0000030: a6a4 0a24 9a27                           ...$.'

Oba należy uruchomić, perl -M5.010aby włączyć funkcję Perla 5.10+ say. Wyprodukują one następujące dane wyjściowe:

Zrzut ekranu „Hello-World!”  Art. ASCII

(Pokazany jako zrzut ekranu, ponieważ ogromna wysokość linii na SE sprawia, że ​​sztuka ASCII jest brzydka i trudna do odczytania. Mała litera „e” jest trochę niezręczna, ale uważam, że można ją zakwalifikować jako czytelną, jeśli tylko ledwo.)


Ps. Jeśli wynik powyższego rozwiązania wydaje Ci się zbyt minimalistyczny, oto 92-znakowy wariant, który daje wynik podobny do rozwiązania Tomasa :

y/01/ #/,say for unpack'(B56)*',unpack u,'CH!(`"(`"":,2``B``@GGDC\'(C#(YI!)("I)"2*,),`4,03D'

Oto zrzut ekranu:

Zrzut ekranu „Hello-World!”  Art. ASCII


Pps. Jestem prawie pewien, że to ( GolfScript, 51 znaków ) jest najkrótszym rozwiązaniem ASCII do wydruku, jeśli nie liczyć tych, które nazywają banner / FIGLet lub które oszukują w inny sposób:

'iJ@Q@HmURBIMM{JkUUJeMRAQIM'{2base(;{' #'=}/}%39/n*

Dane wyjściowe są takie same jak dla mojego powyższego 71-znakowego rozwiązania Perl.

Ilmari Karonen
źródło
Powiedziałbym, że właśnie przekroczyłeś granicę czytelności :-)
Tomas
1
Jest znacznie bardziej czytelny w moim terminalu niż tutaj na SE, ze względu na ogromne odstępy między liniami.
Ilmari Karonen
W każdym razie jest to nieczytelne. BTW Mogę wyprodukować twój wynik w 92 znakach , bez zewnętrznego algorytmu kompresji :-)
Tomas
@Tomas: Masz rację, zipowanie nie wydaje się tutaj zwycięską odpowiedzią. Dałbym ci za to +1, gdybym tego jeszcze nie zrobił. BTW, mogę to zrobić w 71 znakach; patrz wyżej. :-)
Ilmari Karonen
1
Ilmari, nie powinieneś rzucać mi wyzwania unpack:-) Znalazłem rozwiązanie 69 znaków (87 z ładnym wyjściem mojego).
Tomas
8

Skorupa + Figlet (35)

$ figlet -w 90 -f banner Hello-World!
#     #                                   #     #                             ### 
#     # ###### #      #       ####        #  #  #  ####  #####  #      #####  ### 
#     # #      #      #      #    #       #  #  # #    # #    # #      #    # ### 
####### #####  #      #      #    # ##### #  #  # #    # #    # #      #    #  #  
#     # #      #      #      #    #       #  #  # #    # #####  #      #    #     
#     # #      #      #      #    #       #  #  # #    # #   #  #      #    # ### 
#     # ###### ###### ######  ####         ## ##   ####  #    # ###### #####  ### 
ponury
źródło
Co to za czcionka? Te wyglądają jak małe duże litery.
Cruncher
banner -f bannerTo pierwsza znaleziona przeze mnie czcionka, która używa # zamiast * lub | i _.
ponury
Zmiana „90” na „9” daje wysoki i chudy świat cześć, jednak ponieważ OP nie dba o kolumny ani wiersze, powinno być do przyjęcia.
alexyorke
Czasami wyborcy mnie zaskakują. Jak to się dzieje, że wynik netto wynosi +8, ale druga odpowiedź figletu daje wynik netto -3?
Cyfrowa trauma
8

Python 260 215 186 152

>>> print'eJyNkFEKwDAIQ/93isC7/x3LyIJullHrR1BfJSIJPUHTlmiUPHbxC7L56wNCgZAxv3SjDWIxsoOb\nzMaBwyHYPJ5sVPNYxXism74vcIsFZlYyrg=='.decode('base64').decode('zip')
#   #        #  #          #   #   #          #     #  #
#   #        #  #          #  # #  #          #     #  #
#   #   ##   #  #   ##      # # # #   ##   ## #   ###  #
#####  #  #  #  #  #  #     # # # #  #  #  #  #  #  #  #
#   #  ####  #  #  #  # ##  # # # #  #  #  #  #  #  #  #
#   #  #     #  #  #  #     # # # #  #  #  #  #  #  #   
#   #   ###  #  #   ##       #   #    ##   #  #   ###  #

Python 196 183 130 114 (ale brzydszy)

>>> print'eJxTVlBWgCAgAQHKqBywAJeyAgJCZREcZWUYyaUMIpUVEKqRNcLEueDqEaZBLVVWQDITADIdFBw='.decode('base64').decode('zip')
# #  #  # #        # # #        #   # #
# # # # # #  #     # # #  #  ## #  ## #
### ##  # # # # ## # # # # # #  # # #
# #  ## # #  #      # #   #  #  #  ## #

Użyłem spakowanych danych w kodowaniu base64. a kod dekoduje go z kodowania base64, a następnie rozpakowuje.

Elizeusz
źródło
Wow, to naprawdę rozciągająca się czytelność!
7

PHP - 183 bajtów

Wykorzystanie sztuki ASCII sebcap26 jako źródła ...

foreach(str_split(base64_decode('iASAERACCYgEgBKQAgmIxIwKoxo5+SSSCqSSSYnkksqkkkmJBJIKpJJIiOSMBEMSOQ'))as$i=>$j)echo strtr(sprintf("%8s%s",decbin(ord($j)),($i+1)%7?"":"\n"),'01',' #');

#   #        #  #          #   #   #          #     #  #
#   #        #  #          #  # #  #          #     #  #
#   #   ##   #  #   ##      # # # #   ##   ## #   ###  #
#####  #  #  #  #  #  #     # # # #  #  #  #  #  #  #  #
#   #  ####  #  #  #  # ##  # # # #  #  #  #  #  #  #  #
#   #  #     #  #  #  #     # # # #  #  #  #  #  #  #   
#   #   ###  #  #   ##       #   #    ##   #  #   ###  #

źródło
6

Brainfuck, 372 bajtów

(Wiem. Ale tylko dla kompletności, musi być bzdura ^^ To nie będzie krótsze, ponieważ jest mało powtórzeń. Pętla pierwszej i drugiej linii już ...)

++++++++[>++++>++++<<-]>+++>>++++++++++>>+>++[-<<<<<.>.<.>..>>>[-<<<.>>>]<[-<<<.>>>]<<..<.>>>++[-<<.<.>..........<.>....>>]<<<.>.<.>>.>+>>]<<<<<...>.<.>.<.>.<.>.<.>..<..>..<...>.<.>..<.>..<.>..<..>...<..>.<.>..<...>.<.>>.<<.>.<.>.<.>...<.>.<.>.<.>..<.>.....<.>.<...>.<.>.<.>..<.>.<.>...<.>.<.>..<.>>.<<.>.<.>.<...>.<.>.<.>..<..>.......<..>.<..>...<..>..<.>...<.>..<..>..<.

Tłumacz tutaj: http://koti.mbnet.fi/villes/php/bf.php


# #     # #          #     #          #    # #
# #  #  # #          #     #          #    # #
### # # # #  ##  ### #  #  #  ##   ## #  ### #
# # #   # # #  #     # ### # #  # #   # #  #
# # ### # #  ##       ## ##   ##  #   #  ##  #

Łącząc generator liczb i obraz @ ASKASK z moimi pętlami i dodatkowe strojenie, otrzymujemy:

Brainfuck, 343 339 336 334 bajtów

Wygląda jednak brzydiej niż moja oryginalna wersja.

+++++[->++++++>+++++++>++<<<]>++>>>+>>++[-<<<<.<.>.<..>>>[-<<<.>>>]>[-<<<.>>>]<<<<..>.<.>>>++[-<<.<.........>.<...>>>]<<.<.>.>.>>+>]<<<<..<<+++++[->>.<.<]>.>.<..>...<.>.<.>.<.>.<..>.<...>..<.>.<..>..<.>.>.<.<.>.<.>.<...>.<.>.<.>.<.>.<.....<++++++[->>.<.<]>..>.<.>.<.>.>.<.<.>.<..>.<..>.<.>.<..>.<.......>...<...>.<..>.<...>.<..>.<..>.

(zdjęcie patrz odpowiedź @ ASKASK)

Johannes H.
źródło
5

EcmaScript 6, 172 161

'¡I%e!c0ĄJ¥eìo0¸ËefMs0µKcÊIs0´Ê¢1éo'.split(0).map(s=>s.split('').map(c=>{for(i=8,s='';i--;)s+=(c.charCodeAt(0)-33)&(1<<i)?'#':' ';return s;}).join('')).join('\n')

Wynik:

#         # #        #   #   #           #    #
###   ##  # #  ##    #   #   #  ##  # ## #  ###
#  # #### # # #  #   #   #   # #  # ##   # #  #
#  # #    # # #  #    # # # #  #  # #    # #  #
#  #  ### # #  ##      #   #    ##  #    #  ###

Wyjaśnienie:

Tekst ASCII jest kompaktowany w ciąg, w którym każdy bit reprezentuje piksel :

  • 0 dla SPACE
  • 1 dla #

Przesunięcie 33 jest stosowane, aby uzyskać tylko znaki do wydrukowania.

Florent
źródło
Nawiasy i returninstrukcja pierwszej grubej strzałki nie są konieczne.
manatwork
@manatwork Próbowałem go usunąć, ale potem nie był już kompilowany. Jesteś pewien?
Florent
1
Firefox 27.0: i.stack.imgur.com/VyqnC.png
manatwork
@manatwork Thanks!
Florent,
charCodeAt(0)można zredukować do charCodeAt().
Chiru,
4

Sclipting , 38 znaków (76 bajtów)

갦륈똄릵꺕녔꺒녪냕녪낷뚕년꺒녦냉괄낵要감嚙긂밃⓶掘⓶終丟併껧뜴꼧밍替現겠合終

Wynik:

# # ## #  #   #     #   #  #  ##  #  ##  #
# # #  #  #  # #    #   # # # # # #  # # #
### ## #  #  # # ## # # # # # ##  #  # # #
# # #  #  #  # #    # # # # # # # #  # #  
# # ## ## ##  #      # #   #  # # ## ##  #
Timwi
źródło
4
Strona informacyjna „ golf-kod ” mówi „Jeśli używasz Unicode, liczba bajtów powinna używać UTF-8”. Jeśli się nie mylę, twoja długość programu wynosi 114 bajtów . (Wspomniane 76 bajtów dotyczyłoby UTF-16 bez BOM.)
res
@res: Zmieniłem to, ponieważ nie ma sensu tego wymagać. Mój interpreter Sclipting doskonale rozumie UTF-16, więc jest to prawidłowy program zakodowany jako UTF-16.
Timwi
1
Timwi, sprawy mają znaczenie
Tomas
3
@ user689 - właściwie „Hello-World!” z wykrzyknikiem na końcu ...
1
Przypuszczam, że „zaakceptowany przez społeczność” oznacza „zaakceptowany bez dyskusji społeczności przez niewielką liczbę osób posiadających taką możliwość”.
res
3

Brainfuck, 362 bajtów

Przepraszam @ johannes-h, widziałem twój i zainspirowałem się do stworzenia własnego. Wykorzystuje kombinację szybszego generowania liczb na początku i prostszego obrazu, aby wygenerować wynik w mniejszej liczbie bajtów. Nie używa jednak pętli nigdzie indziej, więc można go zoptymalizować.

+++++[->++++++>+++++++>++<<<]>++>.<.>.<.....>.<.>.<.........>.<...>.<.........>.<...>.<.>.>.<.<.>.<..>.<..>.<.>.<.........>.<...>.<.........>.<...>.<.>.>.<...<.>.<.>.<.>.<.>.<..>.<..>...<.>.<.>.<.>.<..>.<...>..<.>.<..>..<.>.>.<.<.>.<.>.<...>.<.>.<.>.<.>.<.....>.<.>.<.>.<.>.<.>.<.>.<...>.<.>.<.>.>.<.<.>.<..>.<..>.<.>.<..>.<.......>...<...>.<..>.<...>.<..>.<..>.

który generuje:

fotka

ZAPYTAJ
źródło
Hm O ile krótsze jest generowanie liczb? bo zmiana obrazu wygląda dla mnie na oszustwo (przynajmniej przy bezpośrednim porównaniu naszych rozwiązań - oczywiście w tym konkursie całkowicie poprawne) ^^ BUt Zajmę się twoim później :) Możesz wziąć moją pętlę po raz pierwszy dwie linie jednak. Jest o wiele krótszy (o ile dobrze pamiętam, miał około 10-20 bajtów)
Johannes H.
obniżyłem twoją wersję do 343 bajtów, zobacz moją odpowiedź
Johannes H.
a nawet krótszy, zastępując więcej powtórzeń pętlami. 339 teraz.
Johannes H.
Nie mam dość reputacji, by komentować twoją, ale jeśli przyjrzysz się bliżej swojej nowej wersji, znajdziesz tam „> <”, który można usunąć, aby zabrać dwa bajty :)
ZAPYTAJ
3

ImageMagick + sed, 71 bajtów

Nie widzę żadnych innych wpisów ImageMagick, więc oto mój spóźniony udział w ziemi:

convert +antialias label:Hello-World! xpm:-|sed '8,+9y/ /#/;s/[^#]/ /g'

Myślę, że ta sedporcja może być jeszcze bardziej golfa.

Wypróbuj online .

Wynik:

  # # # # ## # # # # #     
  # # # # # ## ## # # #     
  # # # # # ### # # # #     
  # # #### # # #### # # # #### # # # ### # #     
  ###### # # # # ## ## # # # ### ## ## # ## ## #     
  # # ###### # # # ### # # # # # # # # # # #     
  # # # # # # # ## ## # # # # # # #     
  # # ## ## # # ## ## ## ## ## ## # # ## ##        
  # # #### # # #### ## ## #### # # ### # #     

Cyfrowa trauma
źródło
2

Postscriptum, 154 133

<~GasbQ8I>GO#QsOD7:?,pa&5XCgo@jeLPX:a4F9kN1nu1B@8KjD"^]WgY[MA.2VBjpTNo5$Pi%uI9Lr>,9`~>/FlateDecode filter 999 string readstring pop =

to znaczy

    <~GasbQ8I>GO#QsOD7:?,pa&5XCgo@jeLPX:a4F9kN1nu1B@8KjD"^]WgY[MA.2VBjpTNo5$Pi%uI
9Lr>,9`~>
/FlateDecode filter 
999 string readstring pop 
=

Jedynym źródłem ASCII, inspiracją dla sztuki ASCII była odpowiedź Johannesa H. :-)

# #     # #         #    #          #    # #
# #  #  # #         #    #          #    # #
### # # # #  ##  ## #    #  ##   ## #  ### #
# # #   # # #  #    # ## # #  # #   # #  #
# # ### # #  ##      #  #   ##  #   #  ##  #

(bardziej czytelny w terminalu)

Perl, 102

print$-%44?'':"\n",vec(unpack(u,'<!040`A!:4@`A`*%7918REEM1":T4)75E(#&1"0``'),$-++,1)?'#':' 'for 0..219

Taki sam wynik jak powyżej. Wiem, że przegrałem z powyższymi odpowiedziami Perla, ale i tak je publikuję. Przynajmniej próbowałem i jechałem we właściwym kierunku (i nie widziałem najkrótszej odpowiedzi) :-).

użytkownik 2846289
źródło
2

Pure Bash, bez zewnętrznych narzędzi - 133 znaków:

c=" #";for x in 0x{5250088045,55520A914D,74556AAA54,535205124D};do while((s=(t=x)^(x/=2)*2,t));do L=${c:s:1}$L;done;echo "$L";L=;done

Wykorzystuje przesunięcie w prawo i w lewo (dzielenie i mnożenie przez 2) oraz xor, aby znaleźć jeden bit.

Dane czcionki skradzione z Blender / Ilmari Karonen.

Testowane w Bash 3.2 i 4.2

Nawiasem mówiąc, to tylko 166 znaków:

echo "# #  #  # #        #   #        #   # #
# # # # # #  #     # # #  #   # #  ## #
### #   # # # # ## # # # # # #  # # #  
# #  ## # #  #      # #   #  #  #  ## #"
Wstrzymano do odwołania.
źródło
1

Python 3, 114

print('\n'.join(bin(x)[2:]for x in[353530052677,366448644429,499649260116,357858349645]).translate({48:32,49:35}))

Wyjście (4-znakowy wysoki e i W skradziony z @Ilmari Karonen ):

# #  #  # #        #   #        #   # #
# # # # # #  #     # # #  #   # #  ## #
### #   # # # # ## # # # # # #  # # #  
# #  ## # #  #      # #   #  #  #  ## #

I krótszy (107):

print('\n'.join(bin(x)[2:]for x in[11993933918769,16391913257513,12021315382193]).translate({48:32,49:35}))

Wynik:

# # ### #   #   ###   # # ### ##  #   ##   #
### ### #   #   # #   # # # # ### #   # #  #
# # ### ### ### ###   ### ### # # ### ##   #
Mikser
źródło
Jest to w większości nieczytelne. Twój świat z 2. wyjścia to tak naprawdę Uorld.
Silviu Burcea
@SilviuBurcea: Wygląda lepiej na rzeczywistym emulatorze terminali. Ponadto „czytelny dla człowieka” daje ci trochę miejsca na poruszanie się. Jestem pewien, że możesz zgadnąć, co to jest „HELLO ⊔ORLD!” znaczy.
Blender
Użyj stałych heksadecymalnych i zgol kilka znaków
Floris
@Floris: Próbowałem tego. Dwuznakowy prefiks sprawia, że ​​są one równie długie, aż do około 20 cyfr.
Blender
1

Python 154 znaków, (rozmiar Char 5X7)

print'\n'.join(map(''.join,zip(*(''.join("# "[int(e)]for e in"{:07b}".format(ord(c))[1:])for c in"€÷÷÷€ÿñêêòÿ€ÿ€ÿñîîñÿûûÿŸáþÁ¿ÁþáŸÿñîîñÿàïÿ€ÿÿñîî€ÿ‚"))))

Wydajność

#   #      # #         #   #   #         #     # #
#   #      # #         #  # #  #         #     # #
#   #  ##  # #  ##      # # # #   ##  ## #   ### #
##### #  # # # #  #     # # # #  #  # #  #  #  # #
#   # #### # # #  # ##  # # # #  #  # #  #  #  # #
#   # #    # # #  #     # # # #  #  # #  #  #  #  
#   #  ### # #  ##       #   #    ##  #  #   ### #
Abhijit
źródło
1

Grzmotnąć:

(103 89 bajtów)

Kod:

base64 -d<<<rohBEmRiqIihFVRS7IitVWRSqIihVVRQru5Aoldi|xxd -b|sed -e's/ //g;s/1/#/g;s/0/ /g'|cut -b'9-55'

Wynik:

# # ### #   #    #     #   #  #  ##  #   ##   #
# # #   #   #   # #    #   # # # # # #   # #  #
### ##  #   #   # # ## # # # # # ##  #   # #  #
# # #   #   #   # #    # # # # # # # #   # #   
# # ### ### ###  #      # #   #  # # ### ##   #

Mniejszy, ale mniej czytelny (na podstawie http://mckgyver.pbworks.com/f/1240440791/3PixelFont.jpg ):

Kod:

base64 -d<<<V0nCLsmQdklaqslQV23BTq2Q|xxd -b|sed -e's/ //g;s/1/#/g;s/0/ /g;'|cut -c'9-52'

Wynik:

 # # ### #  #  ###    #   # ### ##  #  ##  #
 ### ##  #  #  # # ## # # # # # ##  #  # # #
 # # ### ## ## ###     # #  ### # # ## ##  #
christofsteel
źródło
1

JavaScript / ES6 (108 bajtów)

Skopiuj do konsoli:

[,0xa0a028045,0xeeae2bb5d,0xacaabaa54,0xaeae2ba5d].map(a=>a.toString(2).replace(/./g,b=>' #'[b])).join('\n')

Wynik:

"
# #     # #       # #        #   # #
### ### # # ###   # # ### ## # ### #
# # ##  # # # # # ### # # #  # # #  
# # ### # # ###   # # ### #  # ### #"

(Wymaga przeglądarki kompatybilnej z ECMAScript6, tj. Firefox 22+)

Inspirowany przez @maximeeuziere, @ p01, @aemkei

Musterknabe
źródło
.join('\n')można sprowadzić do .join(` `)miejsca, w którym spacja jest rzeczywistym znakiem nowej linii.
Chiru,
1

Autorzy: xem, aemkei, p01, jonas

Wykonaj to w konsoli JS.

JavaScript, przeglądarka, 133 132 126 117 bajtów

for(i=s="";l=[43117609029,64070269789,46349920852,46890400349][i++];)for(j=0,s+="\n";c=l.toString(2)[j++];)s+=" #"[c]

JavaScript, ES6, działa na Firefox, 108 bajtów

[,0xa0a028045,0xeeae2bb5d,0xacaabaa54,0xaeae2ba5d].map(a=>a.toString(2).replace(/./g,b=>' #'[b])).join('\n')

Wynik:

>
# #     # #       # #        #   # #
### ### # # ###   # # ### ## # ### #
# # ##  # # # # # ### # # #  # # #  
# # ### # # ###   # # ### #  # ### #
Xem
źródło
@ p01 stworzył krótszą wersję (118 bajtów) tutaj: twitter.com/p01/status/433230019419471872
aemkei
1

HTML, 209 znaków

<pre># #     # #                      #   # #
# #     # #        # # #         #   # #
###  ## # #  #     # # #  #  ##  #  ## #
# # ##  # # # # ## # # # # # # # # # #
# # ### # #  #      # #   #  #   # ### #</pre>

Czy to się liczy? :)

Florrie
źródło
1

Shell, 20 znaków:

banner Hello-world\!

Aby to zadziałało, oczywiście potrzebujesz bannerprogramu. W systemie Debian można go uzyskać, instalując bsdmainutilspakiet.

Spowoduje to wydrukowanie pięknie wyrenderowanej wersji wiadomości, zaprojektowanej do drukowania na jednej ze starych drukarek z ciągłym podawaniem, dzięki czemu wynik powyższego tekstu ma długość 322 wierszy i szerokość 123 kolumn, a następnie odwracasz wydruk na bok, aby przeczytać wiadomość. Możesz zawiesić powstały papier na ścianie jako sztandar, stąd nazwa.

http://en.wikipedia.org/wiki/Banner_%28Unix%29

EDYCJA: Wygląda na to, że Debian ma również sysvbannerpakiet, który instaluje program bannerowy, który drukuje tekst w poziomie w celu wyświetlenia na terminalu. Jednak drukuje to tylko pierwsze 10 znaków wiadomości, więc jest to trochę denerwujące dla tego problemu z golfem!

steveha
źródło
1
Myślę, że chciałeś pisać banner hello-world.
Floris
@Floris, dzięki za heads-up. Naprawiony.
steveha
1
Zauważ, że banner pojawił się na Uniksie v7 w 1979 roku i można go znaleźć praktycznie na każdym Uniksie.
sch
@sch, zgadzam się, że bannerjest dostępny dla praktycznie każdego systemu UNIX. Po prostu umieściłem pakiet Debian jako wygodny dowód, że nie wymyśliłem czegoś dla ludzi, którzy nie wiedzieli o tym. W dzisiejszych czasach nie spodziewałbym się, że będę bannerdomyślnie zainstalowany w systemie UNIX, podobnie jak nie spodziewałbym się już, że znajdę drukarkę z ciągłym podawaniem w laboratorium komputerowym. Ale każdy golfowy kod przy tworzeniu tekstu banerowego naprawdę powinien mieć bannergdzieś w nim program. To część naszej bogatej historii kultury jako maniaków komputerowych. :-)
steveha
1

bash, 175 170 bajtów

Musisz zmarnować sporo postaci, aby uzyskać niezły wynik !

base64 -d<<<H4sICKaT9FICAzAxAK2RQQ7AIAgE776CZP7/x1ZjERebcJAL0QybhcV6YdWizAPNaUatQQLFpj6h+c/XA05WF9Wtk9WJcxz4oe6e1YPQa7Wiut2wfjJ16STY30lSnNIlzvdpHhd6MiTOB65NYc+LAgAA|zcat

Wynik:

#     #                                         #     #                                   ###
#     #  ######  #       #        ####          #  #  #   ####   #####   #       #####    ###
#     #  #       #       #       #    #         #  #  #  #    #  #    #  #       #    #   ###
#######  #####   #       #       #    #  #####  #  #  #  #    #  #    #  #       #    #    #
#     #  #       #       #       #    #         #  #  #  #    #  #####   #       #    #
#     #  #       #       #       #    #         #  #  #  #    #  #   #   #       #    #   ###
#     #  ######  ######  ######   ####           ## ##    ####   #    #  ######  #####    ###
diabelnie
źródło
Możesz go zmniejszyć za pomocą lzma / unlzma
Emmanuel
0

F # - 204 znaków

for s in(Seq.map(Seq.unfold(function|0L->None|i->Some(" #".[int(i%2L)],i/2L)))[173948798213L;174770890021L;191304848727L;182715110773L;45277009173L;191279670629L])do printfn"%s"(new string(Seq.toArray s))

Wynik:

# #     # #        # #         #   # #
# #  #  # #  #     # #  #   ## #   # #
### # # # # # #    # # # # #   #  ## #
# # ### # # # # ## # # # # #   # # # #
# # #   # # # #    ### # # #   # # #  
# #  ## # #  #     # #  #  #   #  ## #
mattnewport
źródło
0

Python + pyfiglet - 87 znaków

from pyfiglet import figlet_format     
print(figlet_format('Hello-World!', font='banner'))

Wydajność

#     #                                   #     #                             ### 
#     # ###### #      #       ####        #  #  #  ####  #####  #      #####  ### 
#     # #      #      #      #    #       #  #  # #    # #    # #      #    # ### 
####### #####  #      #      #    # ##### #  #  # #    # #    # #      #    #  #  
#     # #      #      #      #    #       #  #  # #    # #####  #      #    #     
#     # #      #      #      #    #       #  #  # #    # #   #  #      #    # ### 
#     # ###### ###### ######  ####         ## ##   ####  #    # ###### #####  ### 

Aby zainstalować pyfiglet, uruchom:

$ pip install pyfiglet
jfs
źródło
0

Python z pyfiglet: 66 przy użyciu argv, 69 bez

66:

from pyfiglet import*
print(figlet_format(sys.argv[1],font='3x5'))

69:

from pyfiglet import*
print(figlet_format('Hello-World!',font='3x5'))

jodły muszą być nazywane na przykład:

python asciiart.py „Hello-World!”

druga:

python asciiart.py.

Wynik:

    # #      #   #          # #          #    #  #  
    # # ###  #   #  ###     # # ### ###  #  ###  #  
    ### ##   #   #  # # ### ### # # #    #  # #  #  
    # # ###  ##  ## ###     ### ### #    ## ###     
    # #                     # #                  #  

(Cóż, wygląda to trochę kiepsko z tą czcionką. Niemniej :))

[edytuj] usunął przestarzałą myślnik z argumentu.

Taku
źródło
Dlaczego dodatkowa kreska przed wyjściem?
Ilmari Karonen
Mój błąd, to dane wyjściowe z tej używającej argv, gdzie użyłem myślnika przed argumentem (kwestia przyzwyczajenia, ponieważ cały czas używam bash). Zmienię to, dziękuję.
Taku,
0

JavaScript 137 (134)

Używa bitów liczb całkowitych do przedstawienia ostrych i białych spacji. Testowane z Firefoksem 27.

137 znaków

s="";[0xadb73eead9,g=0xa9252aaa94,0xed252aac95,g+1,0xad272aee99].map(n=>{for(;n>0;n/=2)n%2?[s="#"+s,n--]:s=" "+s;s="\n"+s});console.log(s)

# # ## #  #  ###  # # # ### ### #  ##  #
# # #  #  #  # #  # # # # # # # #  # # #
### ## #  #  # #  # # # # # ##  #  # # #
# # #  #  #  # #  # # # # # # # #  # #  
# # ## ## ## ###  ##### ### # # ## ##  #"

134 znaków (obrócony o 180 °)

s="";[0xadb73eead9,g=0xa9252aaa94,0xed252aac95,g+1,0xad272aee99].map(n=>{s+="\n";for(;n>0;n/=2)n%2?[s+="#",n--]:s+=" "});console.log(s)

"
#  ## ## # # ### #####  ### ## ## ## # #
  # #  # # # # # # # #  # #  #  #  # # #
# # #  #  ## # # # # #  # #  #  # ## ###
# # #  # # # # # # # #  # #  #  #  # # #
#  ##  # ### ### # # #  ###  #  # ## # #"
schwer
źródło
0

Python3 (126)

Pomiędzy znakami jest dodatkowa przestrzeń, aby była lepiej czytelna. Więc technicznie jest to rozwiązanie 125 znaków.

print(' '.join(['','\n'][i%40==0]+['#',' '][int('72liw1j4glyc34dum02j2a4ipxa8b7vvp65x511',36)//2**i%2==0]for i in range(200)))

Wynik:

#   #   # #   #     #     # # #     #   #   #   # # #   # # #   #     # #     # 
#   #   #     #     #     #   #     #   #   #   #   #   #   #   #     #   #   # 
# # #   # #   #     #     #   #     #   #   #   #   #   # #     #     #   #   # 
#   #   #     #     #     #   #     #   #   #   #   #   #   #   #     #   #     
#   #   # #   # #   # #   # # #     # # # # #   # # #   #   #   # #   # #     #
schwer
źródło
0

Bash 37 , 33

toilet<<<"Hello-world"|tr \"m \#

 #    #        ###    ###                                       ###        # 
 #    #  ###     #      #     ###         #     #  ###    # ##    #     #### 
 ###### ##  #    #      #    ## ##        ## # ## ## ##   ##  #   #    ## ## 
 #    # #####    #      #    #   #   ###   #####  #   #   #       #    #   # 
 #    # #####    ###    ###  #####          # #   #####   #       ###  ##### 

Który jest taki sam jak:

echo "Hello-world" | toilet

Z man toilet

TOIlet - wyświetla duży kolorowy znak

Ze tr "'\"m" "#"wszystkich "znaków są zastępowane #.

fedorqui
źródło
trParametry byłyby krótsze, niż te, które podano. Mam na myśli tr \'\"m \#zamiast tr "'\"m" "#".
manatwork
Och, dobra, nie byłam tego świadoma. Dzięki @manatwork
fedorqui
Poczekaj sekundę. Dane toiletwyjściowe nie zawierały pojedynczego cudzysłowu. Dlaczego umieściłeś go w tr1. parametrze? Wystarczy tr \"m \#.
manatwork
@manatwork Myślę, że potrzebuję więcej kawy :)
fedorqui
0

Smalltalk, 151

chociaż ta gra w golfa jest już zakończona, dla porównania:

i:=((Form extent:115@14)displayString:'Hello world'x:0y:12;asImage).0to:13 do:[:y|i valuesAtY:y from:0to:114 do:[:x :p|({$#.$ }at:p+1)print].Stdout cr]

wydajność:

 ***  ***             ***       ***                                                         ***           **       
  *    *                *         *                                                           *            *       
  *    *                *         *                                                           *            *       
  *    *     ***        *         *        ***              ***   ***    ***     *** ***      *        *** *       
  ******    *   *       *         *       *   *              *     *    *   *      **   *     *       *   **       
  *    *   *     *      *         *      *     *             *  *  *   *     *     *          *      *     *       
  *    *   *******      *         *      *     *              * * *    *     *     *          *      *     *       
  *    *   *            *         *      *     *              * * *    *     *     *          *      *     *       
  *    *    *    *      *         *       *   *               ** **     *   *      *          *       *   **       
 ***  ***    ****    *******   *******     ***                *   *      ***     ******    *******     *** **      
blabla999
źródło
Musisz używać tylko znaków „” (spacje) i „#” (także znaki nowej linii).
Mukul Kumar
mój błąd; dane wyjściowe pochodziły z poprzedniego przebiegu; kod jest poprawny „{$ #. $} na: p + 1”.
blabla999