Este desafío se basa en una publicación de sandbox por user48538 . Como ya no está activo en este sitio, asumí este desafío.
apgsearch , el programa distribuido de búsqueda de sopas para Conway's Game of Life y la base de datos de resultados de búsqueda, Catagolue usa apgcodes para clasificar y denotar patrones. Los apgcodes usan el formato Wechsler extendido , una extensión de una notación de patrón desarrollada por Allan Wechsler en 1992.
Los siguientes ejemplos y las imágenes están tomadas de LifeWiki .
Una cadena de n caracteres en el conjunto que coincide con la expresión regular
[0-9a-v]
denota una tira de cinco filas, n columnas de ancho. Cada personaje denota cinco celdas de una columna vertical que corresponde a las cadenas de bits [00000
,10000
,01000
...00010
,10010
,01010
,11010
...11111
].Por ejemplo,
27deee6
corresponde a una nave espacial de peso pesado :
El carácter
z
separa las tiras contiguas de cinco filas.Por ejemplo,
0ca178b96z69d1d96
corresponde a una naturaleza muerta de 31 bits:
Los caracteres
w
yx
se utilizan para abreviar00
y000
, respectivamente.Entonces
w33z8kqrqk8zzzx33
corresponde a un transbordador trans-queen bee :
(10 filas en blanco omitidas)
Finalmente, los símbolos que coinciden con la expresión regular
y[0-9a-z]
corresponden a carreras de entre 4 y 390
s consecutivos .Un buen ejemplo es
31a08zy0123cko
, correspondiente a un barco en quadpole :
El reto
Escriba un programa o una función para analizar una cadena del formato Wechsler extendido, definido anteriormente, e imprima (o devuelva) el patrón correspondiente a esta cadena.
Puede suponer que la cadena no está vacía y no comienza ni termina con z
.
Puede usar cualquier formato de salida razonable, por ejemplo, una cadena, una matriz, una matriz 2d. Puede usar cualquiera de los dos valores para representar 0
y 1
, dado que los declara en la respuesta.
Puede omitir las líneas de ceros finales en la salida o agregar líneas de ceros finales adicionales. También puede agregar / omitir ceros finales en cada línea, siempre que todas las líneas tengan la misma longitud en la salida.
Puede devolver la transposición de la matriz, si eso es más conveniente.
Este es el código de golf , por lo que gana el código más corto.
Casos de prueba
153 => [[1, 1, 1], [0, 0, 1], [0, 1, 0], [0, 0, 0], [0, 0, 0]]
27deee6 => [[0, 1, 1, 0, 0, 0, 0], [1, 1, 0, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1], [0, 0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0]]
0ca178b96z69d1d96 => [[0, 0, 0, 1, 1, 0, 1, 1, 0], [0, 0, 1, 0, 1, 0, 1, 0, 1], [0, 1, 0, 0, 1, 0, 0, 0, 1], [0, 1, 1, 0, 0, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 0, 0, 0], [1, 0, 0, 0, 0, 0, 1, 0, 0], [1, 0, 1, 0, 1, 0, 1, 0, 0], [0, 1, 1, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]
w33z8kqrqk8zzzx33 => [[0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0], [0, 0, 1, 1, 1, 0, 0], [0, 1, 0, 0, 0, 1, 0], [1, 0, 1, 1, 1, 0, 1], [0, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
31a08zy0123cko => [[1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1], [0, 0, 0, 0, 0, 0, 0, 0, 1, 1]]
o5995ozes88sezw33 => [[0, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 1, 0], [1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 1], [1, 1, 0, 0, 1, 1], [1, 1, 1, 1, 1, 1], [0, 1, 0, 0, 1, 0], [0, 0, 1, 1, 0, 0], [0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]
y3343x6bacy6cab6x343zkk8yy8kkzgo8gywg8ogz0123yw321zzgo4syws4ogzgh1yy1hgz221yy122zy3c2cx6d53y635d6xc2c => [[0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0], [1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1], [0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
fuente
z
Alguna vez ocurrirá desde el principio?z
.vv99f60vv99f60uv11320uv19rqz33y133y11322310132231
1yx1
,1yy1
,1yw1
y1yz1
. Quizás deberían ser pruebas.Respuestas:
Carbón de leña , 50 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Usos
1
y0
. Explicación:Establezca el fondo, es decir, las celdas sin imprimir del rectángulo que encierra la salida, en
0
.Prefije los dígitos al alfabeto en minúscula predefinido.
Pase sobre la cadena de entrada.
Si la lista vacía predefinida no está vacía ...
... luego imprima un número de
0
s dado por la suma del número extraído de la lista y el índice del carácter actual en los dígitos y letras. Vea a continuación cuál es ese número siempre.Cambia el personaje actual.
Si se trata de una
z
salida de 5 retornos de carro, nos lleva a la siguiente tira de salida.Si es a
y
, entonces empuje4
a la lista vacía predefinida, haciendo4+n
0
que se muestre s la próxima vez.Si es una
x
salida de 30
s. (Esto se hace por repetición para evitar que el literal0
toque elx
o el siguiente literal).Si se trata de una
w
salida de 20
s. (Se¦
necesita para separar los dos literales de cadena).De lo contrario, indexe el carácter actual en los dígitos y letras, conviértalo a binario e imprima el resultado hacia abajo con el bit menos significativo primero; luego mueva el cursor hacia la derecha para la siguiente columna.
fuente
JavaScript (ES8), 197 bytes
Toma la entrada como una cadena. Devuelve una matriz de cadenas con '#' y espacios. La salida puede incluir espacios finales adicionales (pero consistentes) en cada línea.
Pruébalo en línea! (salida prettified)
¿Cómo?
Variables globales
"x"
se usa varias veces, por lo que vale la pena almacenarlo en la variable x .parseInt
se utiliza dos veces, por lo que vale la pena almacenarlo en la variable P .Preprocesamiento de ceros repetidos
Primero reemplazamos todos los patrones
"w"
,"x"
y"yX"
en la cadena de entrada con el número apropiado de espacios. Estos espacios serán luego interpretados como"0"
.Descodificación
Dividimos la cadena resultante, anteponemos una inicial
"x"
e iteramos 5 veces (con i = 0 a 4 ) en cada carácter c :Si c es menor que
"x"
, agregamos el patrón correspondiente a las siguientes 5 filas.Si c es mayor o igual que
"x"
, asignamos 5 nuevas cadenas vacías en o [] y sumamos 5 a y . Esto se desencadena por la inicial"x"
que se agregó al comienzo de la cadena, o por cualquiera"z"
en el contenido original.Relleno
Finalmente, rellenamos cada cadena en o [] con espacios para que todos tengan w caracteres.
fuente
05AB1E ,
14813298 bytesSoy un estudiante de secundaria y esta fue mi primera vez para jugar al golf y usar 05AB1E, por lo que agradecemos los comentarios.
Pruébalo en línea!Pruébalo en línea!Pruébalo en línea!
Toma la entrada en mayúscula y saca la matriz transpuesta como múltiples líneas de salida de 1s y 0s. Puede agregar ceros adicionales.
Si desea probar con cadenas en minúsculas, agregue
u
el encabezado TIO.Si desea una salida impresa bonita, agregue
'1'█:'0'.:
el pie de página TIO.Explicación
(Estoy llamando "filas" y "columnas" opuestas a lo que podría esperar porque genera la matriz transpuesta)
El algoritmo básico es:
Hay algunos otros detalles menores que puede ver a continuación en el código expandido. Todo después de las pestañas al final de una línea es un comentario y puede ignorarse. (Este esquema de comentarios no es parte de 05AB1E, por cierto. Lo hice de esta manera porque se veía bien). Las líneas que tienen comentarios que comienzan con "@" son para propósitos de depuración y pueden omitirse sin cambiar el resultado final.
fuente
,
."yy"
puede ser„yy
(05AB1E tiene una cadena incorporada de 2 y 3 caracteres).>≠
puede serĀ
(verdad, básicamente0
permanece0
y todo lo demás se convierte1
).}}
puede ser]
(cerrar todos los bucles y if-elses). Estoy seguro de que algunos de los golfistas profesionales 05AB1E pueden jugar al golf cosas más importantes que yo, posiblemente incluso reduciendo a la mitad el número de bytes.APL (Dyalog Unicode) ,
8780776763 bytesgracias a H.PWiz por guardar 7 bytes y ngn por otros
1317.Pruébalo en línea!
NB: toma la entrada como una cadena en mayúscula.
Con una bonita salida impresa
Explicación
a←⎕D,⎕A
a es la cadena'0123...89ABCD...XYZ'
'Y.|W|X'⎕R{'0'/⍨+/30 36|a⍳2↑⍵.Match}
reemplaza XW e Yx con el número correspondiente de'0'
s (se explica más adelante)35(≠⊆⊢)a⍳
convierte la cadena en un vector de indenciasa
y se divide en35
(es decir) al'Z'
crear un vector anidado↑
convierte el vector anidado en un relleno de matriz termina con0
s(5/2)⊤
convierte cada uno número en un vector binario que da como resultado una matriz tridimensional con vectores binarios a lo largo del eje primario que se⊖
invierte a lo largo del eje primario↓
reduce el rango de la matriz, por lo que es bidimensional,⍉
reestructura el resultado a la salida adecuadafuente
a←⎕D,⎕A⋄,↓↑{⊖(5/2)⊤a⍳⍵}¨'Z'(≠⊆⊢)('Y.|W|X'⎕R{'0'/⍨{0::2+'WX'⍳⍵⋄4+a⍳1⊃⍵}⍵.Match})⍞
. El error de captura tampoco parece muy complejo⎕R
y sus operandos son innecesarios2+'WX'⍳⍵
->2+'X'=⍵
{0::2+'X'=⍵⋄4+a⍳1⊃⍵}⍵.Match
->30 36|a⍳2↑⍵.Match
Perl 6 ,
156142 bytes14 bytes guardados gracias a Jo King. (También se corrigió un pequeño error al analizar
y
y agregó un prettifier).Se corrigió el análisis de errores de
y[wxy]
.Pruébalo en línea!
El salto de línea está ahí solo para que el texto quepa en la pantalla. No es parte del programa.
Como funciona
Es una función anónima que toma una cadena mutable. (Esto hace que el uso de la función sea un poco peculiar, porque solo puede darle variables, no literales). Después de un poco de trabajo, devuelve una lista de listas que contienen 0 y 1, con el mismo significado que en la publicación original.
La cadena de entrada viene en la variable
$_
. Comenzamos usando una serie de declaraciones de sustitución para deshacernos de todos esos shorthands para varios números de ceros. Primero, necesitamos resolver ely
, porque en el caso deyx
oyw
, elw
(ox
) no constituye una abreviatura en sí mismo. Buscamosy(.)
(y
y un carácter, que recuerda) y lo reemplazamos por000{"0"x:36(~$0)}
: los tres ceros se copian textualmente, luego convertimos el siguiente carácter de la base 36 a la base 10 (:36(~$0)
) y agregamos muchos ceros más. Luego, reemplazamos los quew
usans:g/w/00/
y los quex
usans:g/x/000/
. Finalmente, cons/$/z/
, agregamos unz
hacia el final, agregando muchas líneas vacías al fondo. (Veremos la razón más tarde).El resto es solo una gran declaración de mapa. Estamos mapeando
.split("z").map: (*~0 x.chars).comb})
, que es la cadena de entrada (sin cero shorthands), dividida en líneas enz
, con cada línea primero rellenada con0 x.chars
(toneladas de ceros, es decir, tantos como la longitud total de la cadena de entrada) a la derecha y luego desglosado en una lista de caracteres individuales (.comb
). Finalmente, lo transponemos con[Z]
(reducir con zip). La compresión finaliza en cuanto se agota la lista más corta, lo que da como resultado que todas las líneas tengan la misma longitud. (El número de ceros finales inútiles a la derecha es igual a la longitud de la línea más corta. Además, este truco de transposición falla para una "matriz" con solo una fila. Es por eso que agregamos a la fuerza otra fila al final antes).Ahora, solo mapeamos las filas (columnas de la matriz original) y reemplazamos cada carácter encontrado con los 5 bits correspondientes. Eso se hace usando
:32($_)
(base 32 a base 10).fmt("%05b")
(formato como una cadena de bits de ancho 5, rellenada con ceros).flip
(invierta la cadena, porque el LSB está en la fila superior, no en la inferior).comb
(divida la cadena en una lista de caracteres). Hemos utilizado.flatmap
, lo que aplana la lista resultante (de lo contrario, obtendríamos una lista de listas en cada columna). La transposición del resultado se devuelve implícitamente.(Me siento un poco mal por abusar de la posibilidad de seguir ceros con tanta fuerza. Pero redujo el bytecount considerablemente :—).)
fuente
1yx1
y1yw1
y[0-9a-v]
y cuando descubrí que no era el caso, simplemente agregué una solución rápida (e incorrecta).)000
en la sustitución y conx
Gelatina , 66 bytes
Yowza!
Un enlace monádico que produce una versión transpuesta como una lista de listas (agregue
Z
al final para volver a transponer).Pruébalo en línea! O vea el conjunto de pruebas (con una salida impresa bonita).
fuente
Retina , 203 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Solución alternativa, también 203 bytes:
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Primero maneje el caso incómodo del
y
comando. Lamentablemente, la carta después de esto puede ser unay
o incluso unaz
, por lo que debemos tener cuidado aquí. Todas las magiay
s se convierten primero en#
s.Un ciclo luego procesa el
#
s. Primero,0
se antepone a#
. Si se trata de un#0
cambio000
que completa la operación, de lo contrario, el carácter después del#
decremento y el bucle se repite hasta que#
se hayan procesado todos los correos electrónicos.Arregla los
w
s yx
s.Dividir en nuevas líneas. (
S`z
también funciona para el mismo recuento de bytes).Haga 5 copias de cada línea, luego realice la conversión binaria asignando letras con el bit apropiado
#
y borrando ese bit, mientras que otras letras se convierten en espacios. Los bits se procesan en el orden 16, 8, 4, 2, y luego la última traducción maneja borrar el2
bit y convertir el1
bit al mismo tiempo. (La versión alternativa hace cada copia individualmente, lo que cuesta más bytes, pero se guardan porque el manejo de bits se simplifica).Rellene todas las líneas a la misma longitud.
fuente
Python 2 ,
249244 bytesPruébalo en línea!
5 bytes guardados por Jonathan Frech .
fuente
while 'y'in
. Creo que[-5:][::-1]
se puede jugar al subíndice[:-6:-1]
. La declaración de devolución se puede poner en la línea anterior.JavaScript (ES8), 192 bytes
Devuelve la transposición ... que luego se refleja a través del eje vertical; avíseme si eso invalida esta entrada. La salida es una matriz de cadenas que contienen
0
sy1
s.Pruébalo en línea!
Explicación
Para cada carácter
c
, sek+1
evalúa el número de filas a modificar.k = "wxy".search(c) + 1;
, donde elsearch
método devuelve el índice o-1
.k
luego se disminuye hasta que llega-1
al verificar~k--
un valor verdadero.Si el carácter actual es "y", establezca una bandera para que el valor base 36 del siguiente carácter - 1 se convierta en el valor para
k
.Al encontrar una "z", las cadenas de almohadilla a la izquierda, incrementan la cantidad de almohadilla
5
y restablecen el índice de matriz a0
.fuente
Haskell, 399 bytes
Instalar
split
paquete:cabal install split
fuente