Задача на самом деле очень проста. Выберите 5 различных букв (вы можете просто выбрать 5, которые позволят вам самый короткий код, если хотите) и вывести их на консоль. Однако поворот заключается в том, что они должны быть из следующего списка:
AAA BBBB CCCC DDDD EEEEE FFFFF GGG H H
A A B B C D D E F G H H
AAAAA BBBB C D D EEEE FFFF G GG HHHHH
A A B B C D D E F G G H H
A A BBBB CCCC DDDD EEEEE F GGG H H
IIIII J K K L M M N N OOO
I J K K L MM MM NN N O O
I J KKK L M M M N N N O O
I J J K K L M M N NN O O
IIIII JJJ K K LLLLL M M N N OOO
PPPP QQQ RRRR SSSS TTTTT U U V V W W
P P Q Q R R S T U U V V W W
PPPP Q Q RRRR SSS T U U V V W W
P Q QQ R R S T U U V V W W W
P QQQQ R R SSSS T UUU V W W
X X Y Y ZZZZZ
X X Y Y Z
X Y Z
X X Y Z
X X Y ZZZZZ
Дополнительные правила:
- 5 одинаковых букв не допускаются, повторного выбора нет.
- Каждая буква должна использовать заглавную букву как символ ascii, чтобы нарисовать ее.
- Вывод каждой буквы должен быть в «одной строке» и иметь 5 пробелов между буквами.
- Вы можете выбрать любые 5 букв, которые вы хотите, это позволит вам повторно использовать некоторый код и снизить количество байтов. Выяснение, какие буквы позволят вам сделать это наиболее эффективно, является частью проблемы.
- Конечные пробелы являются приемлемыми.
- Допускается один завершающий перевод строки, но не более одного завершающего перевода строки.
- Это код-гольф, выигрывает наименьшее количество байт.
Примеры:
ABCDE
AAA BBBB CCCC DDDD EEEEE
A A B B C D D E
AAAAA BBBB C D D EEEE
A A B B C D D E
A A BBBB CCCC DDDD EEEEE
EFLIP
EEEEE FFFFF L IIIII PPPP
E F L I P P
EEEE FFFF L I PPPP
E F L I P
EEEEE F LLLLL IIIII P
ПСИХ
CCCC RRRR AAA ZZZZZ Y Y
C R R A A Z Y Y
C RRRR AAAAA Z Y
C R R A A Z Y
CCCC R R A A ZZZZZ Y
Не бойтесь каждый раз отправлять более одного ответа с разными буквами или разными стратегиями, это можно сделать разными способами.
code-golf
ascii-art
kolmogorov-complexity
Урна волшебного осьминога
источник
источник
J
с.\n
, я позволю это.Ответы:
Желе , 41 байт
LICTE
TryItOnline!
идея
Используйте декодирование длины серии с буквами, которые имеют максимально возможное среднее значение, при этом длина каждой строки в каждом «пиксельном значении» должна быть только одна длина строки.
Положите ровное начало как «L», чтобы избежать различных значений декодирования длин серий для строк.
Поместите одну другую букву (не удалось найти 5) из трех средних строк в конце, чтобы можно было добавить арифметическое наименьшее различие.
Требуется выходной; длина пробега; и они преобразованы из базы 11:
Три значения
399633415
,431646160
и1179122455
в базе250
как индексы Желе кодовых страниц тогдаðƁ ƥ
,ȷɓSɠ
иJrŀṘ
которые могут быть использованы для инкапсулирования информации по длине прогона.Код
источник
Древесный уголь ,
5149 байтов (ECXKI)Выходы
Попробуйте онлайн!
Используя символы, которые являются вертикально симметричными, рисует верхние половины и затем отражает. Большинство из них используют Polygon (
G
) и PolygonHollow (GH
) для рисования серии связанных отрезков линий с определенным символом.I
легче сделать с помощью MultiPrint (P
), используяT
в качестве направления.Примечание. PolygonHollow просто рисует указанные сегменты, не заполняя многоугольник и не заполняя его. Многоугольник будет заполнен и заполнен (не то, что мы хотим), если многоугольник можно заполнить простой линией в одном из восьми основных или межкардинальных направлений. В противном случае он ведет себя как PolygonHollow для экономии одного байта.
Порядок символов был выбран так, чтобы требовать только горизонтальных перемещений от конечной точки одного к началу следующего. Вот как работает курсор:
источник
GH
в документы]PowerShell v2 +,
138128114112106105 байт (LICTD)Идея состоит в том, чтобы увеличить расстояние между буквами, чтобы мы могли получать повторные сжатия.
Занимает трюк дедупликации в среднем ряду из ответа Флорента . Сэкономили 6 байтов благодаря Бену Оуэну , используя умножение строк для средних трех строк, и дополнительный байт благодаря Мэтту .
Вывод похож на следующий: 227 байт, для сокращения на 53,7% -
источник
$("L11 I1 C11 T1 D D`n"*3)
вместо средних 3-х строкJavaScript,
110109 байт (ОБЛАКО)Показать фрагмент кода
Выход составляет 227 байт:
источник
ES6 (Javascript),
194, 181 байт (IGOLF / ANY)Это длинное и не очень оптимизированное (по крайней мере, пока), но его можно изменить для печати любого конкретного сообщения, изменяя только растровые данные.
РЕДАКТИРОВАТЬ: заменено внутреннее уменьшение на карту , используйте битовый сдвиг для заполнения
Golfed
демонстрация
теория
Возьми письмо:
преобразовать его в двоичную матрицу (растровое изображение)
сделайте то же самое для других 4 букв, отсканируйте строку, снимая «верхние» 5 бит с каждой
11111 01110 01110 10000 11111
преобразовать в шестнадцатеричную строку (здесь нужно использовать base36 или даже печатный ASCII)
0x1f73a1f
примените тот же алгоритм к другим 4 строкам, чтобы получить растровое изображение.
Визуализация в обратном порядке.
источник
[32979487,4736528,4834846,4769296,32979952]
короче своего шестнадцатеричного представления/(1|0)/g
на,/\d/g
чтобы сохранить несколько байтов. Также\n
может быть заменено актуальной новой строкой.PHP,
1071041029486 байтХорошо, я уверен, что у меня есть наименьший возможный источник с этим методом. Я написал скрипт для генерации и затем gzip каждую возможную комбинацию из пяти букв. Существует два решения, которые соответствуют самым коротким сжатым - LODIC и LDOIC. Я иду с первым, потому что это веселее сказать.
Источник:
Выход:
источник
'
s: строка будет считаться константой со своим значением.05AB1E , 44 байта
Это было весело.
Я чувствую, что мне нужно вернуться и попробовать еще раз сыграть в гольф, когда у меня будет время.
Использует кодировку CP-1252 .
Вдохновленный carusocomputing в ответ .
ECOIH
Попробуйте онлайн!
объяснение
‘ÓÑOIHH‘
толкает строку"ECOOIHH"
.SðýJ3×S
соединяет строку пробелами, повторяет ее трижды и преобразует в список.Результирующий список есть
['E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H', 'E', ' ', 'C', ' ', 'O', ' ', 'O', ' ', 'I', ' ', 'H', ' ', 'H']
.•Td<UÕ‘áÓ?¢tWvkÔÚ•
толкает номер564631055513119191317171314619131717500
.S)ø
молнии список и номер вместе.ü×J
выполняет парное повторение строк и соединяет их вместе.Результатом является строка
EEEEE CCCC OOO IIIII H HE C O O I H HEEEE C O O I HHHHH
.3äû»
разбивает это на 3 части, добавляет первый и второй кусок в обратном порядке и объединяет их новыми строками.источник
•Td<UÕ‘áÓ?¢tWvkÔÚ•
толкает число564631055513119191317171314619131717500
», потому что почему бы и нет ...JavaScript (ES6), 96 байт (DIOCL)
Идея здесь состоит в том, чтобы не только сделать средние три строки идентичными, но и сделать первую строку почти идентичной последней. Поскольку есть только 4 буквы, которые идеально подходят под это описание
CDIO
,L
это следующий лучший вариант, так как для него требуется только 4 добавленных символа в конце строки.Как с ответом Флорента , это фрагмент, который возвращает результат. Добавьте 3 байта, если это должна быть функция.
Тестовый фрагмент
Показать фрагмент кода
источник
D
первый.C
мимоI
иO
аI
сразу послеC
, хотя интересно делать это, улучшая мое пакетное решение, по той же причине.Bash + coreutils с figlet, 55440 решений,
112106 байт каждыйВыход:
Эй, у нас уже есть программа для ASCII искусства! Баннер шрифт почти делает работу, за исключением того, что выводит 7x7 письмо. Хм, давайте просто удалим 3-й и 5-й столбцы, а также 2-й и 5-й строки и посмотрим, что это дает ...
Оказывается, многие буквы будут выводиться требуемым образом, а именно, BDEFHJLPTU Z.
Достаточно заменить аргументы первой команды set любой комбинацией этих букв, чтобы все еще получить правильный результат! Следовательно, это дает нам 11 * 10 * 9 * 8 * 7 = 55440 решений, каждое из которых имеет длину 106 байт.
источник
05AB1E ,
102908969 байт (EOIXC)Попробуйте онлайн!
Выход (230 байт):
Объяснение:
Теория заключалась в том, чтобы выбирать вертикально симметричные буквы, а затем кодировать первые 3 строки и палиндромизировать их. По сути, я закодирован как {#} of {Letter} в 2 байтовых парах. Я уверен, что есть лучший способ сделать это.
-20 байт, спасибо Эмигне, я скоро буду в чате, чтобы задать несколько вопросов;).
источник
•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚîòvÅr葾)jM•34B2ð:
. Войдите в чат 05AB1E, если у вас есть вопросы по поводу кодировки.45ô
может быть3ä
.A
не является вертикально симметричным, и ни один не являетсяF
. Будете догадываться, что как только вы начнете использоватьG
или выше, это разрушит то, о чем вы говорите, верно? Кроме того, с моей методологией сжатия я хотел избежать писем, у которых было более 1 вхождения в строке. Если вы хотите сыграть в эту игру и победить меня, я бы приветствовал этот пример :).0
вO
(центральный ряд, правая сторона)•Cv¶ÉH&9;´ß{ø‰¿šq3d$µ_©Û¶«K>Ò±sÒ9ÍÊC4ÊÚúNÏŒº9¨gÚSÞ•
исправляет тотO
же счетчик байтов.JavaScript ES6, 168 байт, CHAMP
Мы можем перестать смотреть, ребята, у нас есть
CHAMP
здесьисточник
Brainf ***
512411 байтЛучше повторить:
Этот лучше справляется с оптимизацией ленты, жертвуя установочными символами для печати символов. Лента в этом похожа
'C' 'E' ' ' 'F' 'I' 'L' '\n'
, улучшая эффективность. Я выбрал их, потому что им не хватает внутреннего пространства, поэтому им не нужно больше переходить назад и вперед между персонажем и пространством, чем это необходимоЕсли вы хотите прочитать, что он делает:
Выход:
Бывшая подача:
Я решил пойти с ABCDE, потому что это значительно упрощает настройку ленты для вывода, но время и символы, которые я потратил на переход от буквы к '' для всего отрицательного пространства внутри A, B и D и размещения я думаю, что конец строки в конце ленты как бы убил меня.
Я закончил с лентой, которая имела значения,
0 0 'A' 'B' 'C' 'D' 'E' ' ' \n
а затем вывод оттудаВыход:
источник
[<]>
3 раза, чтобы сохранить 6 байтов.Vim,
116 байт99 байтELITC
Гольф под 100 с помощью @DrMcMoylex.
Он содержит непечатаемые символы, поэтому я добавил их ниже (стиль Vim), чтобы вы могли их видеть.
TryItOnline!
Он в основном использует тот же декодер длины пробега, что и желейный ответ. Я использовал буквы, где я мог (надеюсь) повторить верхнюю часть снизу, и все середины были бы одинаковыми. После того, как верх, низ и середина созданы, я редактирую символы, чтобы сделать их правильными:
Я должен добавить два пробела к I, потому что я не допустил двухзначных чисел (поэтому мне не нужен разделитель. Это приводит к 9 пробелам, где мне нужно 11.
источник
Y
вместоVy
,FI
вместо?I<cr>
,{
вместоgg
,w
вместоfl
. 3) Если вы используетеr
вместоR
, вы можете удалить<esc>
.MATL , 49 байт
Попробуйте онлайн!
Это производит буквы
TIHZN
:объяснение
T
относительно легко построить с нуля.I
может быть получено по существу какT
плюс его вертикальное отражение.H
являетсяI
транспонированной.N
этоZ
транспонированная и вертикально отражается.источник
V ,
62, 53 байтаПопробуйте онлайн!
Это выводит
C I D O Z
:источник
Perl, 109 байт (ABCDE)
Примечание : здесь содержатся непечатаемые символы, экранированные для простоты тестирования здесь,
xxd
дамп ниже.Сохраняет двоичное представление позиций букв в виде числа, затем распаковывает обратно в двоичный файл, заменяя
0
s пробелами и1
s на соответствующие буквы, используя поиск. Хранить буквенные представления довольно легко, но заменить их оказалось сложнее, чем я надеялся. Я уверен, что есть лучшие способы сделать это, поэтому я вполне мог бы продолжать играть с этим.Чтобы воссоздать файл, запустите
xxd -r > favourite-letter.pl
, вставьте ниже и нажмите Ctrl+ D:использование
источник
Python 2, 124 байта
Аналогично моему другому ответу , но с лучшим выбором букв. Выводы это:
источник
Befunge, 120 байт (CKYTF)
Источник
Выход
Попробуйте онлайн!
В случае, если это имеет значение, я должен указать, что мой вывод имеет пробел в каждой строке. Правила явно не запрещают это, поэтому я надеюсь, что все в порядке. Если нет, просто сочтите это неконкурентной записью.
объяснение
Буквы слова кодируются в виде простой последовательности из 25 целых чисел, причем каждое целое число представляет собой двоичное представление из 5 пикселей. Поскольку Befunge требует от вас выполнения вычисления для создания экземпляра любого целого числа больше 9, буквы были выбраны таким образом, чтобы минимизировать количество требуемых вычислений, и упорядочены таким образом, чтобы потенциальные повторяющиеся значения могли дублироваться, а не пересчитываться.
Нам также нужно сохранить значение ASCII каждой буквы со смещением на 32 в массиве, который индексируется по модулю 5 убывающего индекса (поэтому он равен 0 4 3 2 1 ...). Причина смещения на 32 заключается в том, что значение можно умножить на бит пикселя (1 или 0), а затем добавить к 32, чтобы получить требуемый пробел или символ.
Этот массив буквенных значений хранится в первых 5 байтах кода, поэтому к нему легко получить доступ. Это также затем повлияло на выбор букв, так как эти значения должны быть значимыми при интерпретации как последовательность кода. Это последовательность
#&49+
. В#
перепрыгивает&
и49+
просто толкает 13 в стек , который впоследствии игнорируется.источник
&
, но ваша программа фактически не принимает ввод ... что происходит?Рубин,
110107102 байта (DOCIL)Печать
РЕДАКТИРОВАТЬ: сохранить некоторые символы, избегая
join
и перемещая вещиисточник
Befunge-98 ,
10998 байт (FUNGE / ANY)Попробуйте онлайн!
Ввод (115 символов):
Ввод - это целочисленная версия двоичного числа с форматом, в
aaaaabbbbbb
которомaaaaa
это обратная карта символа для печати (например, вторая строка в N - этоNN N
, значит, маска10011
), иbbbbbb
это символ ascii для печати, минус 32 ,Я также создал программу befunge-98 для создания своих входов:
Попробуйте онлайн!
Вывод (255 символов):
Объяснение:
Это, вероятно, довольно играбельно; Я почти не думал о возможных сокращениях.
Теоретически это может напечатать любую последовательность 5x5 ascii art.
Спасибо Джеймсу Холдернсу за помощь в выборе трехзначных цифр!
источник
48*
можно заменить на'
(так как в конце концов это 98) и88*
заменить на'@
. Спасибо, что помогли мне выбраться из тройных цифр!C #,
290279267265 байтИзменить: 12 байтов сохранены благодаря @milk! И еще 2 благодаря @TheLethalCoder
Golfed:
Ungolfed:
Выходы:
источник
Func<string,string>j=a=>a.Replace("|",g)+"\r\n";
Stax , 33 байта "BCDEO"
Запустите и отладьте его
Я выбрал письма, которые
Эти свойства означают, что каждая буква может быть представлена сеткой 3х3. Вот 9 регионов, представленных цифрами.
Рассмотрим букву «Б». Он может быть представлен 3 восьмеричными цифрами:
656
. Каждая цифра содержит три бита, которые определяют, какие регионы включены для этой буквы. Эта техника также работает для "CDEO".Распакованная, разархивированная и прокомментированная, программа выглядит следующим образом.
Запустите этот
источник
Питон 3,
234228227166 байт (ОБЛАКО):Печать:
источник
Python 3, 178 байт
Не победит, но не использует сжатие. Это делает это:
Любая помощь приветствуется, я, наверное, что-то пропустил. Я не использовал Python 2, потому что вы не можете сделать
p=print
, и это экономит 17 байтов. Попробуйте это на repl.it.источник
p=print
вы можете использовать одинprint
оператор с аргументом kwsep='\n'
.Рубин, 101 байт (TIFLE)
Я выбрал буквы, которые требовали один блок букв (1,4 или 5 букв) в каждой строке. F, L и E выровнены по левому краю, но T и I требуют начальных пробелов, где печатается одна буква (вертикальная часть). Код для добавления этих пробелов выглядит так, как будто его можно улучшить.
ungolfed
источник
C 176 байт
Если неявные целые числа разрешены, то возможно отрезать еще 8 байтов.
Выход: EDCBA
Как это работает: макрос R просто повторяет фрагмент кода 5 раз. Учитывая, как часто пятерки появляются в этой задаче, очень полезно. Теперь: вот что делает T (int). T принимает целое число и использует его как битовое поле, чтобы определить, где печатать буквы и где печатать пробелы. Например, если дано
T(0b11111111100111111110011100)
, это будет выход:EEEEE DDDD CCCC BBBB AAA
. Он постепенно начинает отсчитывать, какую букву он печатает. Сначала он печатает E, затем D, затем C, затем B, затем A. Вызов f () напечатает всю вещь.источник
Пакет, 135 байтов (DOCILe)
Примечание: первая строка заканчивается 5 пробелами.
источник
BASH,
95111 байтов (EBASH)Golfed
объяснение
Base64 поверх потока байтов LZMA
демонстрация
отказ
Да, я хорошо понимаю, что это не совсем переносимо, поэтому я заплатил байт, чтобы подавить предупреждения xz с -q в первом случае> :)
источник
Python 2,
208194193 байтаЭто мой первый в мире код гольф;) Забавно заниматься
Выход:
Использование словаря разрушает порядок сортировки букв, но это не было обязательным требованием.
источник
Perl 94 байта.
Первые 4 букв (
D
,O
,I
,C
) специально выбраны , чтобы иметь верхние и нижние строки подобные, а средние похожи. Так как других похожих букв нет, я выбрал «L», чтобы иметь возможность применить тот же алгоритм и добавить недостающий 4L.Я сохранил несколько дополнительных байтов, заменив
\n
в коде новую строку.Результат:
источник