ASCII art «Hello-World!» [Закрыто]


39

Ваша цель - написать самую короткую программу с выводом «Hello-World!» как ASCII арт.

Правила:

  • Он должен быть читаемым человеком, мне не важно его размер (столбцы / строки)
  • Вывод должен содержать только пробелы (""), острые символы ("#") и переводы строк
  • Вывод должен работать с моноширинным шрифтом (но буквы не обязательно используют моноширинный шрифт)
  • В результате каждый символ должен быть отделен друг от друга хотя бы одним пробелом

Пожалуйста, добавьте заголовок с языком и количеством байтов в вашем коде.


5
bash: 33 символа - pastebin.com/HZ1w8z8g Это приемлемо?
manatwork

4
Почему дефис, хотя? ...
Тимви

1
Я предполагаю сделать невозможным или невыполнимым затруднительным использование чего-то предопределенного, например, HQ9 +.
manatwork

1
@PeterTaylor: выходные данные, состоящие из пробелов и хэшей, должны работать с моноширинным шрифтом, но буквы, представленные множеством хэшей, не обязательно должны иметь одинаковую ширину.
Тимви,

Ответы:


18

Мне абсолютно понравился этот

Perl, 126 116 114 102 98   87 (69) символов (только для ascii и без внешних шрифтов)

На данный момент самое короткое решение ascii, которое не использует внешние шрифты.

Ну, я хотел представить какое-то элегантное решение, но @Ilmari Karonen бросил мне вызов unpack... не должен был этого делать :-)

Ну, этот код 92 88 69 символов генерирует ужасный нечитаемый вывод, идентичный @Ilmari Karonen's:

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

Более элегантный вариант без распаковки (88 символов):

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

Но я думаю, что такие |. | Е || .- |||., Д! ничто не напоминает Hello-World! и не должно быть разрешено, поэтому реальное решение здесь - вариант распаковки, 87 символов :

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

Выход:

введите описание изображения здесь

Более элегантный вариант на 98 символов:

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

Выход:

введите описание изображения здесь

Старое решение (114 символов), другой тип кодирования:

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

Выход:

введите описание изображения здесь


Забыл восклицание в конце, т.е. Hello-World! Кроме того, они должны быть в нижнем регистре e, но я знаю, что вы сделали верхний регистр, чтобы сделать его читаемым в виде шрифта высотой пять пикселей ...

47

JavaScript, 178 байт

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"}

Это работает в Firefox 27 Scratchpad.

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

Я узнаю Arial :-D
Тимви

4
Это мой любимый Вы использовали интересный метод, чтобы прийти к решению. Замечательно!
Дарт Egregious

2
Гениально, я верю, что вы только что создали Figlet для JavaScript;)
WallyWest

Дагнаммит, это была моя первая мысль! Вот вместо этого голос против. :)
Джордан Грэй,

37

Mathematica 101 99 98

Это растеризует выражение, получает двоичные данные изображения, преобразует каждое 1 в «#», каждое 0 в «» (пустое пространство) и отображает выходные данные в сетке 12 на 130 символов.

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

Здравствуйте

Один персонаж сэкономил благодаря Джонатану Ван Матре.


1
Почему толщина варьируется между l?
MrZander

Я сделал растеризацию для выражения в виде одного изображения. Если бы я делал это буквально, буквы были бы идентичны. Кроме того, при увеличении размера сетки растеризации выходные данные стремятся приблизиться к качеству напечатанных символов. Но большая сетка приводит к относительно меньшему «#», до такой степени, что они кажутся простыми пикселями. Остается вопрос: почему два изображения на изображении получают разные веса?
DavidC

3
@MrZander, это та самая причина, по которой шрифты намекают: при попытке вписать шрифты в пиксельную сетку с низким разрешением, как в ASCII-графике, или ширина экрана не всегда одинакова, потому что шрифт не может иметь основанные на целых пикселях основы всех размеров. , Вот хорошее объяснение с картинками.
Джои

1
Возможно, самый красивый
Ронан Дейхеро

1
Джонатан Ван Матр, спасибо. Первый параметр может быть уменьшен до 99, но я бы не хотел уменьшать второй из-за качества вывода. (Я понимаю, что это соревнование по коду, но у меня есть гордость.)
DavidC

25

Delphi 85 байт

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

Я знаю, это не самое красивое решение, но не было правила, согласно которому нельзя использовать внешние ресурсы.
Результат: Результат


12
+1 за креативность использования # как фона, а не переднего плана.
gerrit

1
Вы можете объявить s как TStringsвзамен. (Но сохраняйте экземпляр с TStringList.)
manatwork

Файл, который вы загружаете из чего-то, что на самом деле поставляется вместе с Delphi, или вы написали это сами? Если последнее, я думаю, вам нужно посчитать его длину как часть вашего счета.
Ильмари Каронен

@ Ilmari, я уверен, что Delphi не поставляется с файлом с рисунком ASCII «Hello-World» :) Более того, в ответе описано, что он использует внешние ресурсы.
TLama

3
@TLama: Я тоже так предположил, я просто пытался выразить это вежливо. Я хочу сказать, что даже если бы были разрешены внешние ресурсы, эта программа все равно не работала бы на чьем-либо компьютере, кроме компьютера его автора (и, фактически, у нас нет никаких доказательств того, что она работает даже на его компьютере). Кроме того , я могу побить его счет со следующим сценарием Perl: do X. Содержание «внешнего ресурса» Xосталось неуказанным (оно работает для меня, не так ли?), Но я привел несколько возможных предложений ниже ...
Илмари Каронен

15

Perl 5, 54 байта / 71 печатный символ ASCII

Примечание: это вторая версия этого ответа. Для оригинальной 64-байтовой / 95-символьной версии с использованием PHP и gzinflate () см. Историю этого ответа .

Вот версия ASCII для печати из 71 символа:

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

54-байтовая версия содержит непечатаемые символы, поэтому я предоставляю ее в виде шестнадцатеричного дампа. В системах Unixish вы можете использовать, xxd -rчтобы превратить шестнадцатеричный дамп обратно в исполняемый скрипт Perl:

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                           ...$.'

Оба должны быть запущены с, perl -M5.010чтобы включить функцию Perl 5.10+ say. Они будут производить следующий вывод:

Снимок экрана "Hello-World!"  ASCII искусство

(Показан в виде скриншота, потому что огромная высота строки в SE делает ASCII-код уродливым и трудным для чтения. Строчная буква «е» выглядит неловко, но я считаю, что это можно считать читабельным, хотя и едва ли.)


Ps. Если вывод решения выше кажется вам слишком минималистичным, вот вариант из 92 символов, который производит вывод, аналогичный решению Томаса :

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

Вот скриншот:

Снимок экрана "Hello-World!"  ASCII искусство


Pps. Я почти уверен, что это ( GolfScript, 51 символ ) - самое короткое решение для печати ASCII, если не считать тех, которые просто вызывают banner / FIGLet или чит-код другим способом:

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

Вывод такой же, как для моего решения Perl с 71 символом выше.


Я бы сказал, что вы только что пересекли границу читабельности :-)
Томас

1
Это намного более читабельно в моем терминале, чем здесь, на SE, из-за огромного межстрочного интервала здесь.
Ильмари Каронен

Я имею в виду, это нечитаемо в любом случае. Кстати, я могу сделать вывод в 92 символов без внешнего алгоритма сжатия :-)
Томас

@ Томас: Вы правы, молния, кажется, не является победным ответом здесь. Я бы дал тебе +1 за это, если бы не сделал. Кстати, я могу сделать это за 71 символ; смотри выше. :-)
Ильмари Каронен

1
Илмари, ты не должен был бросать мне вызов unpack:-) Нашел решение из 69 символов (87 с хорошим результатом моего).
Томас

8

Shell + Figlet (35)

$ figlet -w 90 -f banner Hello-World!
#     #                                   #     #                             ### 
#     # ###### #      #       ####        #  #  #  ####  #####  #      #####  ### 
#     # #      #      #      #    #       #  #  # #    # #    # #      #    # ### 
####### #####  #      #      #    # ##### #  #  # #    # #    # #      #    #  #  
#     # #      #      #      #    #       #  #  # #    # #####  #      #    #     
#     # #      #      #      #    #       #  #  # #    # #   #  #      #    # ### 
#     # ###### ###### ######  ####         ## ##   ####  #    # ###### #####  ### 

Что это за шрифт? Они просто выглядят как маленькие буквы в верхнем регистре.
Cruncher

это баннер -f bannerЭто был первый шрифт, который я использовал # вместо * или | а также _.
мрачное


Если изменить «90» на «9», получится высокий и худой привет, однако, поскольку OP не заботится о столбцах или строках, это должно быть приемлемо.
alexyorke

Иногда избиратели сбивают меня с толку. Почему получается, что чистый результат равен +8, а другой ответ на фиглет - чистый -3?
Цифровая травма

8

Питон 260 215 186 152

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

Питон 196 183 130 114 (но некрасиво)

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

Я использовал сжатые данные в кодировке base64. и код декодирует его из кодировки base64, а затем распаковывает его.


Вау, это действительно растягивает разборчивость!

7

PHP - 183 байта

Используя искусство ASCII в sebcap26 в качестве источника ...

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

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

6

Brainfuck, 372 байт

(Я знаю. Но просто для полноты, должно быть бред, ^^ Это не станет намного короче, так как есть небольшие повторения. Уже первый и второй цикл строки ...)

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

Переводчик здесь: http://koti.mbnet.fi/villes/php/bf.php


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

Комбинируя генератор чисел и изображения @ ASKASK с моими циклами и дополнительной настройкой, мы получаем:

Brainfuck, 343 339 336 334 байт

Выглядит ужаснее, чем моя оригинальная версия.

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

(изображение см. в ответе @ ASKASK)


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')

Выход:

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

Объяснение:

Текст ASCII сжимается в строку, где каждый бит представляет пиксель :

  • 0 для SPACE
  • 1 для #

Смещение 33 применяется для получения только печатаемых символов.


Скобки и returnоператор первой жирной стрелки не нужны.
manatwork

@manatwork Я пытался удалить его, но потом он больше не компилировался. Вы уверены, что?
Флоран


@manatwork Спасибо!
Флоран,

charCodeAt(0)может быть уменьшен до charCodeAt().
Чиру

4

Скриптинг , 38 символов (76 байт)

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

Выход:

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

4
На странице информации о код-гольфе написано: «Если вы используете Unicode, для подсчета байтов следует использовать UTF-8». Если я не ошибаюсь, длина вашей программы составляет 114 байт . (76 байтов, о которых вы упомянули, будут для UTF-16 без спецификации.)
res

@res: Я изменил это, так как нет смысла требовать этого. Мой интерпретатор Sclipting прекрасно понимает UTF-16, поэтому это правильная программа, закодированная как UTF-16.
Тимви

1
Тимви, дело имеет значение
Томас

3
@ user689 - на самом деле "Hello-World!" с восклицательным знаком в конце ...

1
Я полагаю, что «принятые сообществом» означают «принятые, без обсуждения в сообществе , небольшим количеством людей, которые могут это сделать».
Res

3

Brainfuck, 362 байта

Извините, @ johannes-h, я видел ваш и был вдохновлен сделать свой собственный. Он использует комбинацию более быстрой генерации чисел в начале и более простого изображения, чтобы генерировать результат в меньшем количестве байтов. Однако он не использует циклы где-либо еще, так что это для оптимизации.

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

который генерирует:

фильм


Гектометр Насколько короче генерация чисел? потому что изменение изображения выглядит для меня обманом (по крайней мере, при прямом сравнении наших решений - конечно, это действительно актуально в этом конкурсе) ^^ Но я собираюсь изучить ваше позже :) Вы можете взять мой цикл для первого две строки однако. Это намного короче (было около 10-20 байт, если я правильно помню)
Йоханнес Х.

получил вашу версию до 343 байт, смотрите мой ответ
Йоханнес Х.

и даже короче, заменяя больше повторений петлями. 339 сейчас.
Йоханнес Х.

У меня нет хорошей репутации, чтобы комментировать вашу, но если вы внимательно посмотрите на свою новую версию, вы найдете там «> <», которую можно удалить, чтобы убрать два байта :)
ASKASK

3

ImageMagick + sed, 71 байт

Я не вижу никаких других записей в ImageMagick, так что вот моя последняя ставка на землю:

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

Я думаю, что sedчасть, вероятно, может быть еще в гольфе.

Попробуйте онлайн .

Выход:

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


2

Постскриптум, 154 133

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

т.е.

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

Только для ASCII, источником вдохновения для ASCII-art был ответ Йоханнеса Х. :-)

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

(более читабельно в терминале)

Perl, 102

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

Тот же вывод, что и выше. Я знаю, что проиграл оба ответа Perl выше, но я все равно публикую его. По крайней мере, я пытался и двигался в правильном направлении (и не видел кратчайшего ответа) :-).


2

Pure Bash, без внешних утилит - 133 символа:

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

Использует сдвиг вправо и влево (разделить и умножить на 2) и xor, чтобы найти один бит.

Данные о шрифте, украденные из Blender / Ilmari Karonen.

Протестировано в Bash 3.2 и 4.2

Кстати, это всего 166 символов:

echo "# #  #  # #        #   #        #   # #
# # # # # #  #     # # #  #   # #  ## #
### #   # # # # ## # # # # # #  # # #  
# #  ## # #  #      # #   #  #  #  ## #"

1

Python 3, 114

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

Вывод (4 символа высотой e и W украдены у @Ilmari Karonen ):

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

И короче (107):

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

Выход:

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

Это в основном нечитаемо. Ваш Мир со 2-го выхода на самом деле Uorld.
Сильвиу Бурча

@ SilviuBurcea: выглядит лучше на реальном эмуляторе терминала. Кроме того, «Человекочитаемый» дает вам немного простора для маневра. Я уверен, что вы можете догадаться, что `" HELLO ⊔ORLD! " средства.
Блендер

Используйте шестнадцатеричные константы и сбрите несколько символов
Floris

@Floris: я попробовал это. Двухсимвольный префикс делает их такими же длинными, примерно до 20 цифр.
Блендер

1

Python 154 символов, (размер Char 5X7)

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

Выход

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

1

Bash:

(103 89 байт)

Код:

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

Выход:

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

Меньший, но менее читаемый (на основе http://mckgyver.pbworks.com/f/1240440791/3PixelFont.jpg ):

Код:

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

Выход:

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

1

Javascript / ES6 (108 байт)

Скопируйте в консоль:

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

Выход:

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

(Требуется совместимый с ECMAScript6 браузер, т. Е. Firefox 22+)

Вдохновленный @maximeeuziere, @ p01, @aemkei


.join('\n')может быть уменьшен до места, .join(` `)где пробел является действительным символом новой строки.
Чиру

1

Авторы: xem, aemkei, p01, jonas

Выполните это в консоли JS.

JavaScript, кросс-браузерный, 133 132 126 117 байт

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

JavaScript, ES6, работает на Firefox, 108 байт

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

Результат:

>
# #     # #       # #        #   # #
### ### # # ###   # # ### ## # ### #
# # ##  # # # # # ### # # #  # # #  
# # ### # # ###   # # ### #  # ### #

@ p01 сделал более короткую версию (118 байт) здесь: twitter.com/p01/status/433230019419471872
aemkei

1

HTML, 209 символов

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

Это считается? :)


1

Оболочка, 20 знаков:

banner Hello-world\!

Для этого, конечно, вам нужна bannerпрограмма. В Debian вы можете получить его, установив bsdmainutilsпакет.

Это печатает прекрасно отредактированную версию вашего сообщения, предназначенную для печати на одном из старых принтеров с непрерывной подачей, поэтому вывод вышеприведенного текста составляет 322 строки в длину и 123 столбца в ширину, и вы поворачиваете распечатку сбоку, чтобы прочитать сообщение. Вы можете повесить полученную бумагу на стену как баннер, отсюда и название.

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

РЕДАКТИРОВАТЬ: похоже, Debian также имеет sysvbannerпакет, который устанавливает баннерную программу, которая печатает текст по горизонтали для отображения на терминале. Однако, это печатает только первые 10 символов сообщения, так что это немного раздражает для этой проблемы с гольф-кодом!


1
Я верю, что ты хотел написать banner hello-world.
Флорис

@ Флорис, спасибо за хедз-ап. Исправлена.
Steveha

1
Обратите внимание, что баннер появился на Unix v7 в 1979 году и встречается практически на каждом Unix.
СЧ

@sch, я согласен, что bannerдоступно практически для любой UNIX. Я просто поместил пакет Debian как удобное доказательство того, что я не просто что-то придумывал, для людей, которые не знали об этом. В наши дни я не ожидал бы найти bannerустановленный по умолчанию в UNIX, как я бы больше не ожидал найти принтер с непрерывной подачей в компьютерном классе. Но любой кодовый гольф для создания текста баннера действительно должен иметь bannerпрограмму где-нибудь. Это часть нашей богатой культурной истории как компьютерных фанатов. :-)
steveha

1

Баш, 175 170 байт

Вам нужно потратить немало символов, чтобы получить красивый результат !

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

Выход:

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

Вы можете уменьшить его с помощью lzma / unlzma
Эммануэль

0

F # - 204 символа

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))

Выход:

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

0

Питон + пифиглет - 87 символов

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

Выход

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

Чтобы установить pyfiglet, запустите:

$ pip install pyfiglet

0

Python с pyfiglet: 66 с использованием argv, 69 без

66:

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

69:

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

Елки должны называться, например:

python asciiart.py 'Hello-World!'

второй:

python asciiart.py.

Выход:

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

(Ну, это выглядит как-то дерьмово с этим шрифтом. Тем не менее :))

[править] удалил устаревшую черту из аргумента.


Почему дополнительная черта перед выходом?
Ильмари Каронен

Моя ошибка, это вывод из того, что использует argv, где я использовал тире перед аргументом (дело привычки, так как я все время использую bash). Я отредактирую это, спасибо.
Таку

0

Javascript 137 (134)

Использует биты целых чисел для представления острых предметов и пробелов. Протестировано с Firefox 27.

137 символов

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 символа (повернут на 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)

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

0

Python3 (126)

Между символами есть дополнительное пространство, чтобы сделать его более читабельным. Технически это решение на 125 символов.

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

Выход:

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

0

Баш 37 , 33

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

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

Который так же, как:

echo "Hello-world" | toilet

От man toilet

TOIlet - отображать крупный красочный персонаж

При этом tr "'\"m" "#"все "символы заменяются на #.


trпараметры будут короче, чем в кавычках. Я имею в виду tr \'\"m \#вместо tr "'\"m" "#".
manatwork

О, хорошо, я не знал об этом. Спасибо @manatwork
fedorqui

Подожди секунду. На toiletвыходе не было ни одной кавычки. Почему вы включили его в tr1-й параметр? Только чтоtr \"m \# достаточно.
Манатворк

@ Manatwork Я думаю, мне нужно больше кофе :)
fedorqui

0

Smalltalk, 151

хотя эта игра в гольф уже закончена, для справки:

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]

выход:

 ***  ***             ***       ***                                                         ***           **       
  *    *                *         *                                                           *            *       
  *    *                *         *                                                           *            *       
  *    *     ***        *         *        ***              ***   ***    ***     *** ***      *        *** *       
  ******    *   *       *         *       *   *              *     *    *   *      **   *     *       *   **       
  *    *   *     *      *         *      *     *             *  *  *   *     *     *          *      *     *       
  *    *   *******      *         *      *     *              * * *    *     *     *          *      *     *       
  *    *   *            *         *      *     *              * * *    *     *     *          *      *     *       
  *    *    *    *      *         *       *   *               ** **     *   *      *          *       *   **       
 ***  ***    ****    *******   *******     ***                *   *      ***     ******    *******     *** **      

Вы должны использовать только символы «» (пробелы) и «#» (также символы новой строки).
Мукул Кумар

моя ошибка; вывод был из предыдущего прогона; код правильный "{$ #. $} at: p + 1".
blabla999
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.