Inspirado por Golf me um alfabeto ASCII , do qual esse desafio é (quase) um inverso direto.
Tarefa:
Pegue uma sequência de texto de arte ASCII e produza o conteúdo do texto como texto ASCII comum.
Entrada:
Sequência de texto de arte ASCII.
A entrada conterá apenas instâncias de caracteres ASCII #
, espaços e 4 ou 5 novas linhas (uma nova linha à direita é opcional). Todas as linhas têm o mesmo comprimento. (Ou seja, a última letra da arte ASCII é preenchida com espaços à direita.) Você pode usar algum outro caractere ASCII imprimível em vez da #
entrada, se desejar.
A entrada conterá letras da arte A-Z
ASCII e espaços da arte ASCII (um bloco de espaço em branco 5x5). Sem pontuação. Há apenas uma linha de texto de arte ASCII (5 linhas reais). Não haverá espaços de arte ASCII à direita ou à direita, nem espaços de arte ASCII adjacentes.
O tamanho da letra é de 5x5 caracteres. Há um espaço de 1x5 entre cada letra. O espaço entre as palavras é um bloco 5x5 de espaço em branco (+ 1x5 de espaço em cada lado, porque é apenas mais uma letra). Não haverá espaço 1x5 no final ou no início, apenas entre as letras da arte ASCII.
Saída:
String contendo o texto como caracteres ASCII A-Z
+ espaços. A saída também pode estar em minúscula, se for mais fácil para a sua solução. Caso misto também é permitido.
As cartas de arte ASCII:
### #### ### #### ##### ##### ### # # ##### ##### # # # # #
# # # # # # # # # # # # # # # # # # ## ##
##### #### # # # #### #### # ## ##### # # ### # # # #
# # # # # # # # # # # # # # # # # # # # # #
# # #### ### #### ##### # ### # # ##### ### # # ##### # #
# # ### #### ### #### ### ##### # # # # # # # # # # #####
## # # # # # # # # # # # # # # # # # # # # # #
# # # # # #### # # #### ### # # # # # # # # # # #
# ## # # # # # # # # # # # # # ## ## # # # #
# # ### # ## # # # ### # ### # # # # # # #####
O espaço:
|
| A 5x5 square of spaces.
| (Padded with |s to make it appear in this post.)
|
|
Exemplos:
Entrada:
# # ##### # # ### # # ### #### # ####
# # # # # # # # # # # # # # # #
##### #### # # # # # # # # # #### # # #
# # # # # # # ## ## # # # # # # #
# # ##### ##### ##### ### # # ### # # ##### ####
Saída: HELLO WORLD
Entrada:
### ### ### ##### #####
# # # # # # #
##### ### # # #
# # # # # # #
# # ### ### ##### #####
Saída: ASCII
Entrada:
#### #### ### ###
# # # # # # #
#### #### # # ##
# # # # # #
# # ### ###
Saída: PPCG
Isso é código-golfe , então a resposta mais curta em bytes vence.
Respostas:
Geléia ,
50 4442 bytesExperimente online! (observe que o argumento não requer a nova linha principal, mas como as novas e iniciais não têm efeito, eu incluí uma para tornar a sequência multilinha mais legível por humanos)
Os resultados são caso misto (conforme permitido pelo OP em um comentário ).
Quão?
Divide em novas linhas, transpõe e une sub-fatias de (até) seis para obter as representações de caracteres e reverte cada uma (igualando a conversão base posterior para o caractere final de comprimento 25 a todos os outros de comprimento 30). Em seguida, mapeia
'#'
e' '
para um e zero, respectivamente, usando o fato de que'#'
um ordinal ímpar enquanto' '
um igual. Lê cada um como se fosse um número sete básico. Efetivamente pega o módulo 81 de cada (para gerar 27 valores exclusivos para os 27 casos possíveis) e, finalmente, indexa em uma "string mágica" com os caracteres corretos nos índices corretos (a indexação do módulo é usada com uma string mágica de comprimento 81 para salvar 2 bytes).Aqui está a "string mágica" que eu criei junto com um padrão de regex (sem distinção entre maiúsculas e minúsculas) que ele precisava corresponder (eu adicionei "ed" para torná-lo o comprimento 81):
Como tal, pode ser compactado, procurando onze sub-fatias como palavras no dicionário de Jelly (a maioria delas usa o padrão de espaço inicial):
o que resulta na cadeia comprimida Jelly,
“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»
O restante do código funciona da seguinte maneira:
fonte
Python 2 ,
405335234182171 bytesExperimente online!
Finalmente menor que JS
fonte
[0,2,3,7,...]
e' UBGOTA...
dividi-lo, e usar algum tipo de mapeamento.0:' ',2:'U',3:'V'...
parece tão longo ,,, há tantos:'',
. (Eu sei que você tinha algo semelhante no post original, mas com números muito longos.JavaScript (ES6),
204186184182 bytesEconomizou 18 bytes graças a Neil
Economizou 2 bytes graças a ETHproductions
Economizou 2 bytes graças a YairRand
Demolir:
162144142140 bytes de códigoDemo
Mostrar snippet de código
fonte
(a=s.split`\n`)[0].replace(/......?/g,
comsubstr(n,5)
e sem ojoin
curso.c=>0|c>' '
, e outro comp+='0b'+...
\n
entrada de entrada é inválida. No entanto, acho que você pode usar o modelo literal com nova linha real como entrada, assim como você está fazendo nosplit
método.\n
de uma literal de cadeia no site da chamada no código é bom, porque a cadeia real que é passada para a função inclui apenas o caractere de nova linha, não\` and
n. Passing a string that contains
\ `en
como caracteres adjacentes separados não seria aceitável.Bash + ImageMagick + Tesseract , 161 bytes
Eu queria tentar a abordagem sugerida por @ stewie-griffin e usei o bash + ImageMagick (para converter uma string em uma imagem) e o Tesseract (para fazer o OCR). Aqui está o meu código, que funciona para o caso de teste 'HELLO WORLD', mas falha nos outros. Talvez alguns ajustes nos parâmetros (fonte, tamanho da fonte, kerning, espaçamento) ajudem.
Basta copiar e colar a arte ascii na linha de comando após executar o comando. Termine sua entrada pressionando ^ d.
Saída atual para os casos de teste:
fonte
Scala,
184181 bytesUma solução de string + módulo mágico baseada em
hashCode
:)Experimente online (Scalafiddle)
Mais legível:
Explicações
'#'
ou' '
)% 106 % 79 % 47
) são aplicados para associar um número ∈[0; 47[
para cada caractere ASCII (ver explicações abaixo)Como obter a corda mágica?
Primeiro, eu representei todas as letras assim:
Então, criei um alfabeto contendo representações ASCII de todos os caracteres:
Exemplo:
torna-se
Para cada letra, um código hash absoluto foi calculado (todos os códigos hash são distintos):
Tentei diminuir cada código, mas sempre respeitando o fato de que cada código deve ser único (a lista agrupada pelo código deve ter 27 elementos, 1 para cada letra). Então, eu tentei o primeiro módulo de 200:
Encontrei
106
como o primeiro módulo a ser aplicado:Repeti as etapas anteriores até o menor módulo. Eu encontrei :
Nota: O último módulo que escolhi (
47
) não é o menor aqui:%106%79%47%44
(13 caracteres em vez de%106%79%47
= 10 caracteres). Assim, em bytes, o código deveria ter o mesmo tamanho que o que obtiveEm seguida, apliquei o módulo consecutivo (
% 79 % 47
) até o últimocodes
, para obter os códigos definitivos associados a cada letra:Finalmente, para construir a string mágica:
Exemplo: a letra
A
acima está associada a 46 (380997542 % 106 % 79 % 47
) e o 46º elemento da string mágica é A :)Casos de teste
OLÁ MUNDO :
ASCII:
PPCG:
Edições
.
antesmap
,toArray
emkString
fonte
PHP, 294 bytes
Experimente online!
Expandido
Convertendo a entrada em um formato de imagem
A @Stevie Griffin procura uma solução para obter isso de uma imagem. Eu acho que ele não quer realmente o formato de imagem que eu uso.
O SVG pode conter partes HTML se for incluído em um ForeignObject. Então eu coloquei um elemento pré em um SVG.
Saída de imagem
Solução de alterações de imagem
O SVG é legível por máquina. Depois de salvar o SVG como "i.svg", você só precisa substituí-lo
$_GET[0]
pelapreg_replace("#(^.*e>)(.*)(</p.*$)#s","$2",join(file("i.svg")))
entrada normal + 55 bytesfonte
Powershell,
152146 bytesScript de teste:
Saída:
Nota:
$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
é um atalho para$t.substring($c,5).toCharArray()|%{$s+=$s+$_}
("abcd","efgh").substring(1,2)
retorna a matriz("bc","de")
("bc","de").toCharArray()
retorna a matriz('b','c','d','e')
fonte
C,
225209 bytesObrigado a @ceilingcat por salvar 16 bytes!
Experimente online!
fonte