Inspirado por Golf me, un alfabeto ASCII , del cual este desafío es (casi) un inverso directo.
Tarea:
Tome una cadena de texto de arte ASCII y envíe el contenido del texto como texto ASCII normal.
Entrada:
Cadena de texto ASCII-art.
La entrada solo contendrá instancias de caracteres ASCII #
, espacios y 4 o 5 líneas nuevas (una línea nueva es opcional). Todas las líneas tienen la misma longitud. (Es decir, la última carta de arte ASCII se rellena con espacios finales.) Puede usar algún otro carácter ASCII imprimible en lugar de #
en la entrada si lo desea.
La entrada contendrá letras A-Z
ASCII-art y espacios ASCII-art (un bloque de espacios en blanco de 5x5). Sin puntuación Solo hay una línea de texto ASCII-art (5 líneas reales). No habrá espacios de arte ASCII finales o iniciales, ni habrá espacios de arte ASCII adyacentes.
El tamaño de la letra es de 5x5 caracteres. Hay un espacio de 1x5 entre cada letra. El espacio entre palabras es un bloque de espacios en blanco de 5x5 (+ 1x5 de espacio en cada lado, porque es solo otra letra). No habrá espacio 1x5 al final o al principio, solo entre letras ASCII-art.
Salida:
Cadena que contiene el texto como caracteres ASCII A-Z
+ espacios. La salida también puede estar en minúsculas, si eso es de alguna manera más fácil para su solución. También se permiten mayúsculas y minúsculas.
Las letras del arte ASCII:
### #### ### #### ##### ##### ### # # ##### ##### # # # # #
# # # # # # # # # # # # # # # # # # ## ##
##### #### # # # #### #### # ## ##### # # ### # # # #
# # # # # # # # # # # # # # # # # # # # # #
# # #### ### #### ##### # ### # # ##### ### # # ##### # #
# # ### #### ### #### ### ##### # # # # # # # # # # #####
## # # # # # # # # # # # # # # # # # # # # # #
# # # # # #### # # #### ### # # # # # # # # # # #
# ## # # # # # # # # # # # # # ## ## # # # #
# # ### # ## # # # ### # ### # # # # # # #####
El espacio:
|
| A 5x5 square of spaces.
| (Padded with |s to make it appear in this post.)
|
|
Ejemplos:
Entrada:
# # ##### # # ### # # ### #### # ####
# # # # # # # # # # # # # # # #
##### #### # # # # # # # # # #### # # #
# # # # # # # ## ## # # # # # # #
# # ##### ##### ##### ### # # ### # # ##### ####
Salida: HELLO WORLD
Entrada:
### ### ### ##### #####
# # # # # # #
##### ### # # #
# # # # # # #
# # ### ### ##### #####
Salida: ASCII
Entrada:
#### #### ### ###
# # # # # # #
#### #### # # ##
# # # # # #
# # ### ###
Salida: PPCG
Este es el código de golf , por lo que gana la respuesta más corta en bytes.
Respuestas:
Jalea ,
50 4442 bytesPruébalo en línea! (tenga en cuenta que el argumento no requiere la nueva línea inicial, pero dado que las nuevas líneas iniciales y finales no tienen ningún efecto, incluí una para hacer que la cadena de varias líneas sea más legible para los humanos)
Los resultados son mixtos (según lo permitido por el OP en un comentario ).
¿Cómo?
Se divide en nuevas líneas, se transpone y une subgrupos de (hasta) seis para obtener las representaciones de los caracteres y revierte cada uno (igualando la conversión de base posterior para el carácter final de longitud 25 a todos los demás de longitud 30). Luego asigna
'#'
y' '
a uno y cero respectivamente, usando el hecho de que'#'
tiene un ordinal impar mientras que' '
tiene uno par. Lee cada uno como si fuera un número base siete. Efectivamente toma el módulo 81 de cada uno (para obtener 27 valores únicos para los 27 casos posibles), y finalmente se indexa en una "cadena mágica" con los caracteres correctos en los índices correctos (la indexación de módulo se usa con una cadena mágica de longitud 81 para guardar 2 bytes).Aquí está la "cadena mágica" que creé junto con un patrón de expresiones regulares (que no distingue entre mayúsculas y minúsculas) que necesitaba para coincidir (agregué "ed" para que tuviera una longitud de 81):
Como tal, puede estar comprimido, buscando once sub-cortes como palabras en el diccionario de Jelly (la mayoría de los cuales usa el espacio inicial predeterminado):
que da como resultado la cadena comprimida Jelly,
“¥ŒƲVĊ⁾|W£⁼³ƭÇuʋụzḢĖ0ḢẆẠØsĠỌỊ»
El resto del código funciona de la siguiente manera:
fuente
Python 2 ,
405335234182171 bytesPruébalo en línea!
Finalmente más corto que JS
fuente
[0,2,3,7,...]
y' UBGOTA...
repartirlo, y utilizar algún tipo de mapeo.0:' ',2:'U',3:'V'...
parece tan largo, hay tantos:'',
. (Sé que tenías algo similar en la publicación original, pero con números muy largos.JavaScript (ES6),
204186184182 bytesGuardado 18 bytes gracias a Neil
Guardado 2 bytes gracias a ETHproductions
Guardado 2 bytes gracias a YairRand
Descompostura:
162144142140 bytes de códigoManifestación
Mostrar fragmento de código
fuente
(a=s.split`\n`)[0].replace(/......?/g,
consubstr(n,5)
y sin,join
por supuesto.c=>0|c>' '
, y otro conp+='0b'+...
\n
entrada no es válida. Sin embargo, creo que puede usar la plantilla literal con la nueva línea real como entrada, tal como lo hace en elsplit
método.\n
de un literal de cadena en el sitio de la llamada en el código está bien, porque la cadena real que se pasa a la función incluye solo el carácter de nueva línea, no tanto\` and
n. Passing a string that contains
\ 'n
como caracteres adyacentes separados no estaría bien.Bash + ImageMagick + Tesseract , 161 bytes
Quería probar el enfoque sugerido por @ stewie-griffin y elegí bash + ImageMagick (para convertir una cadena en una imagen) y Tesseract (para hacer el OCR). Aquí está mi código, que funciona para el caso de prueba 'HELLO WORLD', pero falla los otros. Tal vez sea útil algún ajuste en los parámetros (fuente, tamaño de fuente, interletraje, espaciado).
Simplemente copie y pegue el arte ascii en la línea de comandos después de ejecutar el comando. Termine su entrada presionando ^ d.
Salida actual para los casos de prueba:
fuente
Scala,
184181 bytesUna solución de cadena mágica + módulo basada en
hashCode
:)Probar en línea (Scalafiddle)
Más legible:
Explicaciones
'#'
o' '
)% 106 % 79 % 47
Se aplican 3 módulos consecutivos ( ) para asociar un número ∈[0; 47[
para cada carácter ASCII (ver explicaciones a continuación)¿Cómo obtener la cuerda mágica?
Primero, representé todas las letras como esta:
Luego, creé un alfabeto que contenía representaciones ASCII de todos los caracteres:
Ejemplo:
se convierte
Para cada letra, se calculó un código hash absoluto (todos los códigos hash son distintos):
Luego intenté disminuir cada código, pero siempre respetando el hecho de que cada código debe ser único (la lista agrupada por el código debe tener 27 elementos, 1 por cada letra). Así que probé los primeros 200 módulos:
Encontré
106
como el primer módulo que se aplicará:Repetí los pasos anteriores hasta el módulo más pequeño. Encontré :
Nota: El último módulo que elegí (
47
) no es el más pequeño aquí:%106%79%47%44
(13 caracteres en lugar de%106%79%47
= 10 caracteres). Entonces, en bytes, el código debería haber tenido el mismo tamaño que el que obtuveLuego, apliqué el módulo consecutivo (
% 79 % 47
) al últimocodes
, para obtener los códigos definitivos asociados a cada letra:Finalmente, para construir la cuerda mágica:
Ejemplo: la letra
A
anterior está asociada a 46 (380997542 % 106 % 79 % 47
), y el elemento 46 de la cadena mágica es A :)Casos de prueba
HOLA MUNDO :
ASCII:
PPCG:
Ediciones
.
antesmap
,toArray
ymkString
fuente
PHP, 294 bytes
Pruébalo en línea!
Expandido
Convertir la entrada a un formato de imagen
@ Stevie Griffin busca una solución para obtener esto de una imagen. Creo que él no quiere realmente el formato de imagen que uso.
SVG puede contener partes HTML si luego se incluye en un ForeignObject. Así que puse un elemento pre en un SVG.
Salida de imagen
Resolviendo a partir de cambios de imagen
SVG es legible por máquina, por lo que después de guardar el SVG como "i.svg" solo necesita reemplazarlo
$_GET[0]
conpreg_replace("#(^.*e>)(.*)(</p.*$)#s","$2",join(file("i.svg")))
la entrada normal + 55 Bytesfuente
PowerShell,
152146 bytesScript de prueba:
Salida:
Nota:
$t|% s*g $c,5|% t*y|%{$s+=$s+$_}
es atajo para$t.substring($c,5).toCharArray()|%{$s+=$s+$_}
("abcd","efgh").substring(1,2)
devuelve la matriz("bc","de")
("bc","de").toCharArray()
devuelve la matriz('b','c','d','e')
fuente
C,
225209 bytes¡Gracias a @ceilingcat por guardar 16 bytes!
Pruébalo en línea!
fuente