Вдохновленный Гольфом мне алфавит ASCII , этот вызов (почти) является прямым обратным.
Задача:
Возьмите строку текста ASCII-art и выведите содержимое текста в виде обычного текста ASCII.
Входные данные:
Строка ASCII-арт текста.
Входные данные будут содержать только экземпляры символов ASCII #
, пробелы и 4 или 5 символов новой строки (завершающий символ новой строки является необязательным). Все строки имеют одинаковую длину. (То есть последняя буква ASCII-искусства дополняется завершающими пробелами.) Вы можете использовать другой печатный символ ASCII вместо #
ввода, если хотите.
Входные данные будут содержать буквы A-Z
ASCII-art и пробелы ASCII-art (блок пробелов 5x5). Без знаков препинания. Есть только одна строка текста ASCII-art (5 фактических строк). Здесь не будет ни конечных, ни ведущих ASCII-арт-пространств, ни смежных ASCII-арт-пространств.
Размер письма 5х5 символов. Между буквами 1x5. Пробел между словами - это пробел 5x5 (+ 1x5 с каждой стороны, потому что это просто еще одна буква). В конце или в начале не будет пробела 1x5, только между ASCII-буквами.
Выход:
Строка, содержащая текст в виде символов ASCII A-Z
+ пробелы. Вывод также может быть в нижнем регистре, если это как-то проще для вашего решения. Смешанный случай также допускается.
ASCII-арт письма:
### #### ### #### ##### ##### ### # # ##### ##### # # # # #
# # # # # # # # # # # # # # # # # # ## ##
##### #### # # # #### #### # ## ##### # # ### # # # #
# # # # # # # # # # # # # # # # # # # # # #
# # #### ### #### ##### # ### # # ##### ### # # ##### # #
# # ### #### ### #### ### ##### # # # # # # # # # # #####
## # # # # # # # # # # # # # # # # # # # # # #
# # # # # #### # # #### ### # # # # # # # # # # #
# ## # # # # # # # # # # # # # ## ## # # # #
# # ### # ## # # # ### # ### # # # # # # #####
Космос:
|
| A 5x5 square of spaces.
| (Padded with |s to make it appear in this post.)
|
|
Примеры:
Входные данные:
# # ##### # # ### # # ### #### # ####
# # # # # # # # # # # # # # # #
##### #### # # # # # # # # # #### # # #
# # # # # # # ## ## # # # # # # #
# # ##### ##### ##### ### # # ### # # ##### ####
Выход: HELLO WORLD
Входные данные:
### ### ### ##### #####
# # # # # # #
##### ### # # #
# # # # # # #
# # ### ### ##### #####
Выход: ASCII
Входные данные:
#### #### ### ###
# # # # # # #
#### #### # # ##
# # # # # #
# # ### ###
Выход: PPCG
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Ответы:
Желе ,
50 4442 байтаПопробуйте онлайн! (обратите внимание, что для аргумента не требуется начальная новая строка, но поскольку начальные и конечные новые строки не действуют, я включил одну, чтобы сделать многострочную строку более удобочитаемой для человека)
Результаты в смешанном регистре (как разрешено ФП в комментарии ).
Как?
Разбивает на новые строки, транспонирует и объединяет подслои (до) шести вместе, чтобы получить представления символов и инвертировать каждое (приравнивая последующее базовое преобразование для последнего символа длины 25 ко всем остальным длинам 30). Затем отображает
'#'
и' '
на единицу и ноль соответственно, используя тот факт, что'#'
имеет нечетный порядковый номер' '
имеет четный. Читает каждый, как если бы это был базовый номер семь. Эффективно берет по модулю 81 каждого (чтобы получить 27 уникальных значений для 27 возможных случаев) и, наконец, индексирует в «волшебную строку» с правильными символами при правильных индексах (индексация по модулю используется с волшебной строкой длины 81 для сохранения 2 байта).Вот «волшебная строка», которую я создал вместе с (регистронезависимым) шаблоном регулярных выражений, которому нужно соответствовать (я добавил «ed», чтобы сделать его длиной 81):
Как таковой, он может быть сжат, просматривая одиннадцать срезов как слова в словаре Jelly (большинство из которых использует начальный пробел по умолчанию):
что приводит к сжатой желе струне,
“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»
Остальная часть кода работает следующим образом:
источник
Python 2 ,
405335234182171 байтПопробуйте онлайн!
Наконец короче JS
источник
[0,2,3,7,...]
и' UBGOTA...
разделить его, и использовать какое-то отображение.0:' ',2:'U',3:'V'...
выглядит так долго ,, есть так много:'',
. (Я знаю, что у вас было что-то похожее в оригинальном посте, но с очень длинными цифрами.JavaScript (ES6),
204186184182 байтаСохранено 18 байтов благодаря Neil
Сохранено 2 байта благодаря ETHproductions
Сохранено 2 байта благодаря YairRand
Сломать:
162144142140 байт кодадемонстрация
Показать фрагмент кода
источник
(a=s.split`\n`)[0].replace(/......?/g,
сsubstr(n,5)
и без,join
конечно.c=>0|c>' '
, а другойp+='0b'+...
\n
входные данные недопустимы. Тем не менее, я думаю, что вы можете использовать шаблонный литерал с реальным символом новой строки в качестве входных данных, как вы делаете вsplit
методе.\n
строкового литерала на сайте вызова в коде - это нормально, потому что фактическая строка, передаваемая в функцию, включает в себя только символ новой строки, а не оба\` and
n. Passing a string that contains
\ `, иn
как отдельные соседние символы не будет в порядке.Bash + ImageMagick + Tesseract , 161 байт
Я хотел попробовать подход, предложенный @ stewie-griffin, и выбрал bash + ImageMagick (для преобразования строки в изображение) и Tesseract (для распознавания текста). Вот мой код, который работает для теста HELLO WORLD, но не работает с остальными. Может быть, поможет некоторая настройка параметров (шрифт, размер шрифта, кернинг, интервалы).
Просто скопируйте и вставьте ascii art в командную строку после запуска команды. Завершите ввод, нажав ^ d.
Токовый выход для тестовых случаев:
источник
Scala,
184181 байтВолшебная струна + по модулю решение на основе
hashCode
:)Попробуйте онлайн (Скалафиддл)
Более читабельно:
Пояснения
'#'
или' '
)% 106 % 79 % 47
) применяются, чтобы связать число ∈[0; 47[
для каждого символа ASCII (см. Пояснения ниже)Как получить волшебную строку?
Во-первых, я представлял все буквы так:
Затем я создал алфавит, содержащий представления ASCII всех символов:
Пример :
становится
Для каждой буквы был вычислен абсолютный хеш-код (все хеш-коды различны):
Затем я попытался уменьшить каждый код, но всегда учитывал тот факт, что каждый код должен быть уникальным (список, сгруппированный по коду, должен иметь 27 элементов, по 1 на каждую букву). Итак, я попробовал первые 200 модулей:
Я нашел
106
в качестве первого модуля, который будет применен:Я повторял предыдущие шаги до самых маленьких по модулю. Я нашел :
Примечание: последнее выбранное мной по модулю (
47
) здесь не самое маленькое:%106%79%47%44
(13 символов вместо%106%79%47
= 10 символов). Таким образом, в байтах код должен иметь тот же размер, что и тот, который я получилЗатем я применил последовательный модуль (
% 79 % 47
) к последнемуcodes
, чтобы получить окончательные коды, связанные с каждой буквой:Наконец, чтобы построить волшебную строку:
Пример: буква
A
выше связана с 46 (380997542 % 106 % 79 % 47
), а 46-й элемент магической строки - A :)Контрольные примеры
ПРИВЕТ, МИР :
ASCII:
PPCG:
Правки
.
доmap
,toArray
иmkString
источник
PHP, 294 байта
Попробуйте онлайн!
расширенный
Преобразование ввода в формат изображения
@ Stevie Griffin искать решение, чтобы получить это из изображения. Я думаю, что он не хочет формат изображения, который я использую.
SVG может содержать HTML-части, если они затем включены в ForeignObject. Поэтому я положил предварительный элемент в SVG.
Вывод изображения
Решение от изменений изображения
SVG является машиночитаемыми так что после сохранения SVG , как «i.svg» вам нужно только заменить
$_GET[0]
сpreg_replace("#(^.*e>)(.*)(</p.*$)#s","$2",join(file("i.svg")))
на пути с нормальными входными + 55 байтисточник
Powershell,
152146 байтТестовый скрипт:
Выход:
Заметка:
$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
это ярлык для$t.substring($c,5).toCharArray()|%{$s+=$s+$_}
("abcd","efgh").substring(1,2)
возвращает массив("bc","de")
("bc","de").toCharArray()
возвращает массив('b','c','d','e')
источник
C
225209 байтСпасибо @ceilingcat за сохранение 16 байт!
Попробуйте онлайн!
источник