Это немного похоже на эту запись, покрытую пылью, но я надеюсь, что мое вращение делает ее достаточно уникальной. Не смог найти ничего отговаривающего меня от публикации этого, но там довольно море.
Тем не мение! Соревнование:
Ваш код получает строку символов; Он преобразует это в версию той же строки в стиле ASCII-арта, но с уловом.
Входное преобразование
- Поддерживаются только символы AZ и 0-9.
- Строчные буквы преобразуются в прописные
- Все остальное молча удаляется
Рисунок персонажа
- Каждый «пиксель» увеличенного шрифта взят из входной строки
- N-й пиксель равен n-му символу во входной строке. Если n больше длины входной строки, вернитесь назад к началу
- Отдельные буквы нарисованы слева направо, сверху вниз
- Последующие буквы выбирают свой индекс «пиксельных символов» с того места, где остановилась последняя буква (например, при длине ввода 10, если первая буква имела 9 пикселей, первый пиксель второй буквы будет отображаться с 10-м входным символом, вторая пиксель будет нарисован с 1-м входным символом)
- Каждая буква нарисована в сетке 5x5, заполненной пробелами. Вы можете найти шрифт, который вы будете использовать, предварительно обработанный для вас, в этой папке или чуть ниже в этом посте.
- Каждая буква нарисована на одной строке, поэтому общее количество разрывов строк в вашем выводе будет 4
- Каждое письмо разделено 2 колонками пробелов
Шрифт
000
0 00
0 0 0
00 0
000
111
1
1
1
11111
2222
2
222
2
22222
3333
3
333
3
3333
44
4 4
44444
4
4
55555
5
5555
5
5555
6666
6
6666
6 6
666
77777
7
7
7
7
888
8 8
888
8 8
888
999
9 9
9999
9
9999
AAA
A A
AAAAA
A A
A A
BBBB
B B
BBBB
B B
BBBB
CCCC
C
C
C
CCCC
DDDD
D D
D D
D D
DDDD
EEEEE
E
EEE
E
EEEEE
FFFFF
F
FFF
F
F
GGGG
G
G GG
G G
GGGG
H H
H H
HHHHH
H H
H H
IIIII
I
I
I
IIIII
JJJJJ
J
J
J
JJ
K K
K K
KKK
K K
K K
L
L
L
L
LLLLL
M M
MM MM
M M M
M M
M M
N N
NN N
N N N
N NN
N N
OOO
O O
O O
O O
OOO
PPPP
P P
PPPP
P
P
QQ
Q Q
Q QQ
Q Q
QQ Q
RRRR
R R
RRRR
R R
R R
SSSS
S
SSS
S
SSSS
TTTTT
T
T
T
T
U U
U U
U U
U U
UUU
V V
V V
V V
V V
V
W W
W W
W W W
WW WW
W W
X X
X X
X
X X
X X
Y Y
Y Y
Y
Y
Y
ZZZZZ
Z
Z
Z
ZZZZZ
Да, я знаю, что 4 и Q безобразны
Пример
вход
0123456789
Выход
012 567 6789 0123 34 45678 9012 34567 234 567
3 45 8 0 4 5 6 9 3 8 5 6 8 9
6 7 8 9 123 567 78901 0123 4567 9 789 0123
90 1 0 4 8 2 4 8 9 0 0 1 4
234 12345 56789 9012 3 5678 012 1 234 5678
Другой пример
вход
a3 B'2
Выход
A3B B2A3 2A3B 2A3B
2 A B 2 A 2
3B2A3 2A3 3B2A A3B
B 2 B 3 B 2
A 3 2A3B 2A3B A3B2A
Стандартные лазейки запрещены. Код гольф, поэтому не будет зеленой галочки.
[A-Z\d]
- я не думаю, что фильтрация недопустимых символов добавляет что-то сложное.Ответы:
Python 2 ,
413411373364352345 байт-1 байт благодаря Кевину Круйссену .
-9 байт благодаря Джо Кинг .
-1 байт благодаря Линн .
Строка данных содержит непечатаемые, экранированная версия ниже.
Попробуйте онлайн!
Поскольку каждый символ имеет 25 пикселей, он может быть легко закодирован в 25 бит. Базовое число 126
'uM\x04<L\x10x\x14Se#ye\x0f>El4NpD@$\tgh>\x1d\x10\x15I,\x0em]a\x0e\x03B>e\x15,\x0c]\x03?kFL\x01\x0byglxV!\x18\x16\x0c\x0b\x10\x0b%w832wGj%uT{Hr*K,*[P\n6.&ED#T\x0c}^\x1c\x0fD\x17LI&p7\x17f\\d`*\x01l\x1bG\x12!Fac\x05\x08\x0eG\rz?!\x1aA'
кодирует все символы, кодируется младшими0
значащими 25 битами,1
следующими 25 битами иZ
кодируется 25 старшими значащими битами. Отдельный символ кодируется в следующем порядке:(
00
наименее значимый,25
самый значимый бит )Пробелы кодируются нулем, непустые - единицей. Пример :
Ungolfed
Попробуйте онлайн!
источник
+' '
должны быть+' '
. Хороший ответ, так что +1 от меня..upper()
хотя вам нужно где-нибудь, иначе внутренние буквы заканчиваются строчными буквами>1
.APL (Dyalog Unicode) ,
228225224214 байтовПолная программа. Запрашивает стандартный ввод для строки. Печать на стандартный вывод. Около половины кода просто декодирует закодированный алфавит.
_
…_
Представляет следующую 143-байтовую строку в кодировке LZ4 в кавычках:"⊥\u0004pæ€}€\\⊃⌿Æ€â<Å€∧€ÀÆ€Ð┬:Ëcü\u0000≥ðè⊤õ⍨¢∧·èý\u0005þÐÕ\u001EÐ :\u001Eè⌊×ßi[B⊂ɫoãà oéìÐ⍙⊃Ý∣à)≥èB⊃\u001B\u001F⊥ä{⌿⍨ G⍺\u001B⌿Æ\u001F∇x└îR`:└è→⊂\u0000ê∧⍒\u0003ɫqè$$ÛD⊥â∊\u001B\u001Eéu|\u001B@4A|⍪┌nàkááЀ€€€€€€"
Попробуйте онлайн!
_
…_
143-байтовая LZ4-кодированная строка в кавычках⎕AV⍳
ɩ ndices о том , что в A Tomic V Ector (набор символов)¯125+
добавьте -125 к этому (чтобы получить 8-битные целые числа со знаком)¯1(219⌶)
LZ4 распаковывать0(220⌶)
десериализация в логический массив из 36 слоев, 5 строк и 5 столбцов(
…)⌷
Индексировать это, используя следующие индексы:⎕A
прописные lphabet⎕D,
предварять D igitsa←
хранить вa
(для более lphabet)(
…)∩
Пересечение следующего и того (удаляет неверный ввод):⍞
запрос на ввод текста из стандартного ввода (консоль)1(819⌶)
свернуть в верхний регистр (819
похожеBig
, 1 для да большой, а не маленький)i←
хранить вi
(для я Nput)a⍳
ɩ ndices о том , что вa
⊂
заключить (чтобы индексировать каждый из которых представляет ведущую координату)t←
хранить вt
(для t ext),
Равельr←
хранить вr
(для т )+/
сумма (то есть количество символов, необходимое для рисования произведения)i⍴⍨
циклический г eshape входного сигнала на эту длинуr\
расширить это; вставить пробелы в 0 с, потреблять буквы в 1 с(
…) Измените форму⍴t
форма текста↓
разбить массив N на 5 на 5 на матрицу N на 5 художественных линий⍉
транспонировать в матрицу 5 на N художественных линий (это выравнивает соответствующие строки символов)По умолчанию APL разделяет простые элементы вложенного массива двумя пробелами.
источник
Python 2 , 428 байт
Попробуйте онлайн!
Буквы кодируются следующим образом:
Каждая уникальная часть (их 23) преобразуется в двоичную, и перед ним добавляется 1. Затем он конвертируется в базу 36.
Результирующие цифры base-36:
Начальная
1
буква удалена, поэтому у нас есть один символ:Каждая буква (
A-Z0-9
) затем кодируется в пять из этих новых символов.В пять списков:
Чтобы сопоставить входные данные с индексом в этих списках, порядковый номер изменяется:
Поскольку порядковые номера не 0-35, а слегка смешаны, 5 списков переставлены и объединены:
Для каждого символа во входных данных, его 5 букв найдены и преобразованы в целые числа (base36):
Если номер ниже
30
,36
добавляется (недостающее1
мы убрали ранее)Затем число преобразуется обратно в двоичный код, а
0
s и1
s преобразуются ви
.
. Два пробела добавляются в конце во время преобразования.Например.
Для каждого
.
в результате он заменяется следующим символом из ввода (повторяется с помощьюx
)источник
Java 8,
917907 байтСнизит ли это гольф, чтобы, по крайней мере, вдвое сократить текущий подсчет байтов?
Попробуйте онлайн.
Объяснение:
источник
i=-1
внутри лямбда. Но, может быть, я ошибаюсь, и это не разрешено в соответствии с мета? РЕДАКТИРОВАТЬ: Нечто подобное делается довольно часто в C ответах.int i;f->{for(;i++<10;)print(i);}
на 1 байт меньше, чемf->{for(int i=0;i++<10;)print(i);}
.i=-1
внутри лямбда-функции. Ваш пример не работает, если вы запускаете одну и ту же лямбду дважды, а мой - что является ключевым отличием.int i;f->{for(i=0;i++<10;)print(i);}
будет разрешено, например, (хотя на самом деле не короче).Japt v2.0a0
-R
,213211210209206193191190 байтовВключает ведущий пробел в каждой строке.
Попробуйте или протестируйте все символы (дополнительные байты из-за того, что TIO еще не поддерживает Japt v2)
объяснение
Справочная таблица
Каждая группа из 4 символов в строке (представленная
...
здесь для экономии места и потому что она содержит кучу непечатных элементов) является двоичным представлением каждого символа (0
для пробелов,1
для символов) с удаленными символами новой строки и преобразованными в base-100.пример
Код
источник
Рубин , 366 байт
Попробуйте онлайн!
Это может быть много в гольфе, но сейчас у меня не хватает времени и идей. Это было сложнее, чем я сначала думал, просто заставить его работать.
Как это устроено:
Это не так сложно понять, я просто объясню, как алфавит кодируется на примере. Каждая строка каждого символа преобразуется в двоичный файл, а затем в base-36.
Первым шагом является удаление всех не буквенно-цифровых символов из входной строки.
Затем я создаю таблицу поиска для окончательного рендеринга, потому что я хочу напечатать строку за строкой.
После этого, перебирая алфавитную строку, я создаю двоичный шаблон букв.
Наконец, я заменяю 0 пробелами и 1 символами из таблицы поиска.
Не стесняйтесь играть в гольф дальше, я знаю, что это может быть на 20-30 байт короче (используя gsub вместо tr и т. Д.), Но сейчас мне это не интересно, если только я не смогу значительно уменьшить таблицу алфавитов.
источник
Древесный уголь ,
172164 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Поставьте цифры перед предварительно заданным прописным алфавитом.
Прописные буквы ввода и отфильтровывают все неподдерживаемые символы.
Зациклите оставшиеся символы.
Зацикливайтесь на каждой строке, неявно печатая каждый результат в отдельной строке.
Сжатая строка - это большая целочисленная константа @ ovs, преобразованная в двоичную и обращенная. Затем он нарезается на 180 подстрок по 5 символов, и соответствующая подстрока для текущего символа и строки затем зацикливается.
Если бит был установлен, то циклически печатать следующий символ отфильтрованного ввода, в противном случае печатать пробел.
Поместите курсор готовым для печати следующего символа.
источник
Perl 5 с
-nlaF/[^A-Za-z0-9]+|/
, 247 байтПопробуйте онлайн!
объяснение
Сначала создается таблица соответствия с
%l
использованиемpack
данных ed. Эти данные представляют собой 900-битную двоичную строку каждого символа, упакованную как 25-битную двоичную строку (хранится в виде 113 байтов - всего на 1 байт больше, чем уголь!), Аналогично некоторым другим ответам, поэтомуA
:который, используя
0
для пространства и1
дляA
это:и без разрывов строки это:
После того , как поиск инициализируются, мы перебирать каждый действительный полукокс в
@F
(который заполняется с помощью Perl в-a
опции utosplit) , добавляя к каждому из 5 элементов списка@;
для каждой строки в массиве из поиска, заменяя все1
с сuc$F[$i++%@F]
который является$i
й символ (по модулю@F
это длина@F
), преобразованный вu
pperc
ase, и все0
s с$"
которыми по умолчанию пробел. Как только каждый индекс@;
заполнен для каждого символа в@F
,say
печатает каждую строку с завершающей новой строкой.Примечание : строка после
unpack
содержит непечатаемые, которые экранируются с использованием\xXX
нотации. Проверка на 247 баллов .источник
SOGL V0.12 ,
165164163 байтаПопробуй здесь!
Объяснение:
источник
JavaScript (Node.js) ,
365347 байтСохранено 1 байт благодаря @Scoots
Возвращает массив из 5 строк. Включает ведущий пробел в каждом ряду.
3736 байтов теряются при преобразовании всего в верхний регистр и сопоставлении[A-Z0-9]
: - /Попробуйте онлайн!
Кодировка символов
Символы кодируются в обратном порядке и преобразуются в пользовательский base-80 со смещением 4 , используя диапазон ASCII [35..114] .
Значения с 35 по 79 напрямую отображаются на соответствующий символ ASCII, а значения с 0 по 34 отображаются на символы с 80 по 114 . Это позволяет декодировать, просто взяв код ASCII по модулю 80 .
Например, «F» кодируется как
"RZW["
:Начиная с i = v = 4 , он декодируется обратно в 25-битное целое число, выполняя:
В полном коде мы фактически обрабатываем неограниченный slice () закодированного потока, что означает, что мы, вероятно, будем выполнять итерацию значительно более 4 раз. Это не проблема, потому что все итерации с i <0 будут влиять только на десятичную часть результата, которая в любом случае игнорируется побитовыми операциями, которые следуют сразу.
Попробуйте онлайн!
источник
toUpperCase
сi
флагом в RegEx?[A-Z\d]
вместо[A-Z0-9]
?C (gcc) ,
792690 байтПопробуйте онлайн!
Удалось сжать это под 800 с некоторой переменной повторного использования. Было решено хранить шрифт в виде массиваint
s, хотя сохранение его в виде одной длинной строки выглядело как привлекательная идея, поэтому многие из 8-битных кусков шрифта не были удобным удобным ASCII-символом, который обрабатывали escape-коды больше символов, чемint
сделал массив.Редактировать: Получив менее 700, переключившись на строковое кодирование, в конце концов - в некоторой степени вдохновленный многими другими ответами, здесь я собрал воедино представление base-92 с использованием (большей части) печатных символов ASCII. Представление включает в себя обратную косую черту, для которой требуется экранирование, но это происходит только один раз в шрифте.
Кроме этого, не так уж и много кричащего - ввод (состоящий из первого аргумента командной строки) копируется в массив стека, за исключением любых символов, которых нет в шрифте, а строчные буквы заменяются на их в верхнем регистре вычисляется символ "пикселя", с которого начинается каждая полная буква (с использованием
__builtin_popcount
имеет мучительно длинное имя, но все же было лучше, чем любой метод подсчета битов, который я мог придумать), а затем печать проходит построчно. Компилятор, конечно, в несколько раз выводит длину программы в виде предупреждений.Несколько ниже для вашего удовольствия от просмотра:
источник
Excel VBA, 816 байт
Функция анонимного непосредственного окна VBE, которая принимает данные из диапазона
[A1]
и выводит их на консоль.Насколько я знаю, это первый ответ VBA, который использует
base64
сжатие.Примечание. Этот ответ зависит от
Microsoft XML, v3.0
ссылки на VBA.Пример ввода / вывода
Неуправляемый и объясненный
Основная часть этого решения хранит большой шрифт в виде базовой строки. Для этого сначала нужно преобразовать шрифт в двоичный файл, где он
1
представляет собой пиксель, а0
не пиксель. Например, для0
, это представляется какПри таком подходе буквенно-цифровые цифры могут быть представлены как
Эти сегменты были объединены и преобразованы в MSXML base 64, что делает
Подпрограмма ниже принимает это, обратно преобразовывает в двоичный файл и использует эту ссылку, из которой строит выходную строку, строку за строкой, захватывая сначала верхние 5 пикселей каждого символа, затем вторую строку и так далее, пока строка не будет построена ,
Затем подпрограмма перебирает выходную строку и заменяет «включенные» пиксели символами из входной строки.
источник
K (нгн / к) ,
230231 байт(+1 байт после изменения языка)
Попробуйте онлайн!
где
a
строковый литерал в кавычках, который кодирует шрифт. K рассматривает строки как последовательности байтов, поэтому программа, содержащая такой литерал, является действительной, но ее нельзя запустить на TIO, поскольку ее HTML-форма пытается интерпретировать ее как UTF-8 и портит ее.Количество байтов рассчитывается как:
119 сообщили TIO
-2 для обозначения функции
f:
-1 для заполнителя
a
2 за пару цитат
""
113 для длины строкового литерала,
a
который не содержит символов, требующих экранированияисточник