Esse desafio é baseado em uma postagem de sandbox por user48538 . Como ele não está mais ativo neste site, assumi esse desafio.
apgsearch , o programa distribuído de pesquisa de sopas do Game of Life de Conway e o banco de dados de resultados de pesquisa, Catagolue usa apgcodes para classificar e denotar padrões. Os próprios apgcodes usam o formato estendido de Wechsler , uma extensão de uma notação padrão desenvolvida por Allan Wechsler em 1992.
Os exemplos a seguir e as imagens foram tiradas da LifeWiki .
Uma sequência de n caracteres no conjunto correspondente ao regex
[0-9a-v]
indica uma faixa de cinco linhas, n colunas de largura. Cada carácter indica a cinco células em uma coluna vertical correspondentes às bitstrings [00000
,10000
,01000
...00010
,10010
,01010
,11010
...11111
].Por exemplo,
27deee6
corresponde a uma nave espacial pesada :
O caractere
z
separa tiras contíguas de cinco linhas.Por exemplo,
0ca178b96z69d1d96
corresponde a uma natureza morta de 31 bits:
Os caracteres
w
ex
são usados para abreviar00
e000
, respectivamente.Portanto,
w33z8kqrqk8zzzx33
corresponde a um transporte de abelhas trans-rainha :
(10 linhas em branco omitidas)
Finalmente, os símbolos correspondentes ao regex
y[0-9a-z]
correspondem a execuções entre 4 e 390
s consecutivos .Um bom exemplo é que
31a08zy0123cko
corresponde a um navio no quadrilátero :
The Challenge
Write a program or a function to parse a string of the extended Wechsler format, defined above, and print (or return) the pattern corresponding to this string.
You may assume that the string is nonempty, and does not start or end with z
.
You may use any reasonable output format, e.g., a string, a matrix, a 2d array. You may use any two values to represent 0
and 1
, given that you declare them in the answer.
You may omit the trailing zeroes lines in the output, or add extra trailing zeroes lines. You may also add/omit trailing zeroes on each line, as long as all lines have the same length in the output.
You may return the transpose of the array, if that is more convenient.
This is code-golf, so the shortest code wins.
Test cases
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]]
fonte
z
ever occur at the very beginning?z
.vv99f60vv99f60uv11320uv19rqz33y133y11322310132231
1yx1
,1yy1
,1yw1
and1yz1
. Maybe they should be tests.Respostas:
Charcoal, 50 bytes
Try it online! Link is to verbose version of code. Uses
1
and0
. Explanation:Set the background, i.e. any unprinted cells of the rectangle enclosing the output, to
0
.Prefix the digits to the predefined lower case alphabet.
Loop over the input string.
If the predefined empty list is not empty...
... then print a number of
0
s given by the sum of the number popped from the list and the index of the current character in the digits and letters. See below for what that number always is.Switch over the current character.
If it's a
z
then output 5 carriage returns, taking us to the next output strip.Se for um
y
, empurre4
para a lista vazia predefinida, causando4+n
0
a saída de s na próxima vez.Se for uma
x
saída 30
s. (Isso é feito via repetição para evitar que o literal0
toque nox
ou no literal a seguir.)Se for uma
w
saída 20
s. (¦
É necessário separar os dois literais de cadeia de caracteres.)Caso contrário, indexe o caractere atual nos dígitos e letras, converta em binário e imprima primeiro o resultado para baixo menos significante; depois mova o cursor para a direita na próxima coluna.
fonte
JavaScript (ES8), 197 bytes
Recebe a entrada como uma sequência. Retorna uma matriz de strings com '#' e espaços. A saída pode incluir espaços à direita extras (mas consistentes) em cada linha.
Experimente online!(saída pretificada)
Quão?
Variáveis globais
"x"
é usado várias vezes, então vale a pena armazená-lo na variável x .parseInt
é usada duas vezes, de modo que vale a pena armazenando-o para a variável P .Pré-processamento de zeros repetidos
Primeiro, substituir todos os padrões
"w"
,"x"
e"yX"
na cadeia de entrada com o número apropriado de espaços. Esses espaços serão posteriormente interpretados como"0"
.Decodificação
Dividimos a sequência resultante, acrescentamos uma inicial
"x"
e iteramos 5 vezes (com i = 0 a 4 ) em cada caractere c :Se c for menor que
"x"
, anexamos o padrão correspondente às próximas 5 linhas.Se c for maior ou igual a
"x"
, alocamos 5 novas cadeias vazias em o [] e adicionamos 5 a y . Isso é acionado pela inicial"x"
que foi adicionada no início da string ou por alguma"z"
no conteúdo original.Preenchimento
Finalmente, colocamos cada string em o [] com espaços para que todos tenham w caracteres.
fonte
05AB1E ,
14813298 bytesSou estudante do ensino médio e essa foi minha primeira vez no golfe e no 05AB1E; portanto, os comentários são apreciados!
Experimente online!Experimente online!Experimente online!
Pega a entrada como maiúscula e gera a matriz transposta como várias linhas de saída de 1s e 0s. Pode adicionar zeros extras.
Se você deseja testar com seqüências de caracteres minúsculas, adicione
u
o cabeçalho TIO.Se você deseja uma saída bem impressa, adicione
'1'█:'0'.:
o rodapé do TIO.Explicação
(Estou chamando "linhas" e "colunas" oposto ao que você pode esperar, porque gera a matriz transposta)
O algoritmo básico é:
Existem outros detalhes menores que você pode ver abaixo no código expandido. Tudo depois das guias no final de uma linha é um comentário e pode ser ignorado. (A propósito, esse esquema de comentários não faz parte do 05AB1E. Fiz dessa maneira porque ficou bonito.) As linhas que possuem comentários começando com "@" são para fins de depuração e podem ser omitidas sem alterar a saída final.
fonte
,
."yy"
pode ser„yy
(05AB1E tem uma string de 2 e 3 caracteres).>≠
pode serĀ
(verdade, basicamente0
permanece0
e tudo o mais se torna1
).}}
pode ser]
(feche todos os loops e if-elses). Tenho certeza de que alguns jogadores profissionais do 05AB1E são capazes de jogar coisas mais substanciais do que eu, possivelmente até reduzindo pela metade a contagem de bytes.APL (Dyalog Unicode) ,
8780776763 bytesobrigado a H.PWiz por salvar 7 bytes e ngn por outros
1317.Experimente online!
NB: Aceita a entrada como uma sequência em maiúsculas.
Com saída bastante impressa
Explicação
a←⎕D,⎕A
a é a string que'0123...89ABCD...XYZ'
'Y.|W|X'⎕R{'0'/⍨+/30 36|a⍳2↑⍵.Match}
substitui XW e Yx pelo número correspondente de'0'
s (explicado mais abaixo)35(≠⊆⊢)a⍳
converte a string em vetor de indeciesa
e divide-se em35
(ie)'Z'
criar um vetor aninhado↑
converte o vetor aninhado em um preenchimento de matriz termina com0
s(5/2)⊤
converte cada número em um vetor binário, resultando em uma matriz tridimensional com vetores binários ao longo do eixo primário,⊖
inverte-o ao longo do eixo primário,↓
reduz a classificação da matriz, de modo que seja bidimensional,⍉
redimensiona o resultado para a saída apropriadafonte
a←⎕D,⎕A⋄,↓↑{⊖(5/2)⊤a⍳⍵}¨'Z'(≠⊆⊢)('Y.|W|X'⎕R{'0'/⍨{0::2+'WX'⍳⍵⋄4+a⍳1⊃⍵}⍵.Match})⍞
. A captura de erro também não parece muito golfy⎕R
e seus operandos são desnecessários2+'WX'⍳⍵
->2+'X'=⍵
{0::2+'X'=⍵⋄4+a⍳1⊃⍵}⍵.Match
->30 36|a⍳2↑⍵.Match
Perl 6 ,
156142 bytes14 bytes salvos graças a Jo King. (Também corrigimos um pequeno erro ao analisar o
y
e adicionamos um prettificador.)Corrigida a análise de buggy de
y[wxy]
.Experimente online!
A quebra de linha existe apenas para ajustar o texto na tela. Não faz parte do programa.
Como funciona
É uma função anônima que aceita uma sequência mutável. (Isso torna o uso da função um pouco peculiar, porque você pode fornecer apenas variáveis, não literais.) Após algum trabalho, ele retorna uma lista de listas contendo 0 e 1, com o mesmo significado que na postagem original.
A cadeia de entrada vem em na variável
$_
. Começamos usando uma série de instruções de substituição, a fim de nos livrarmos de todas essas atalhos para vários números de zeros. Primeiro, precisamos resolver oy
porque, no caso deyx
ouyw
, ow
(oux
) não constitui uma abreviação por si só. Procuramosy(.)
(y
e um caractere que ele lembra) e o substituímos por000{"0"x:36(~$0)}
: os três zeros são copiados literalmente, depois convertemos o próximo caractere da base 36 para a base 10 (:36(~$0)
) e adicionamos muito mais zeros. Em seguida, substituímos ow
usos:g/w/00/
e ox
usos:g/x/000/
. Finalmente, coms/$/z/
adicionamos umz
no final, adicionando muitas linhas vazias ao fundo. (Veremos o motivo mais tarde.)O resto é apenas uma grande declaração do mapa. Estamos mapeando sobre
.split("z").map: (*~0 x.chars).comb})
, que é a string de entrada (sem zero atalhos), dividida em linhas emz
, com cada linha sendo preenchida primeiro com0 x.chars
(toneladas de zeros, ou seja, o comprimento total da string de entrada) à direita e depois dividido em uma lista de caracteres individuais (.comb
). Finalmente, nós a transpomos com[Z]
(reduza com zip). O zíper termina assim que a lista mais curta é esgotada, o que resulta em todas as linhas com o mesmo comprimento. (O número de zeros à direita inúteis à direita é igual ao comprimento da linha mais curta. Além disso, esse truque de transposição falha em uma "matriz" com apenas uma linha. É por isso que adicionamos à força outra linha no final antes.)Agora, apenas mapeamos as linhas (colunas da matriz original) e substituímos cada caractere encontrado pelos 5 bits correspondentes. Isso é feito usando
:32($_)
(base 32 a base 10).fmt("%05b")
(formato como uma cadeia de bits da largura 5, preenchida com zeros).flip
(inverta a cadeia, porque o LSB está na linha superior, não na parte inferior).comb
(divida a cadeia em uma lista de personagens). Nós usamos.flatmap
, que nivela a lista resultante (caso contrário, obteríamos uma lista de listas em cada coluna). A transposição do resultado é retornada implicitamente.(Sinto-me um pouco mal por abusar da possibilidade de rastrear zeros com tanto esforço. Mas reduziu consideravelmente o número de bytes: --).)
fonte
1yx1
e1yw1
y[0-9a-v]
e quando eu descobri que não é o caso, eu apenas acrescentou uma (e errado) solução rápida.)000
na substituição y porx
Geléia , 66 bytes
Yowza!
Um link monádico que produz uma versão transposta como uma lista de listas (adicione
Z
ao final para transpor de volta).Experimente online! Ou veja a suíte de testes (com saída bastante impressa).
fonte
Retina , 203 bytes
Experimente online! O link inclui casos de teste. Solução alternativa, também 203 bytes:
Experimente online! O link inclui casos de teste. Explicação:
Primeiro, lide com o caso estranho do
y
comando. Infelizmente, a carta depois disso pode ser umay
ou até umaz
, por isso temos que ter cuidado aqui. Todas as mágicasy
são primeiro transformadas em#
s.Um loop processa os
#
s. Primeiro, a0
é anexado ao#
. Se este for um,#0
então é alterado para o000
qual conclui a operação, caso contrário, o caractere após o#
é decrementado e o loop se repete até que todos os#
s tenham sido processados.Corrija os
w
es ex
s.Dividir em novas linhas. (
S`z
também funciona para a mesma contagem de bytes.)Faça 5 cópias de cada linha e execute a conversão binária mapeando as letras com o bit apropriado
#
e limpando esse bit, enquanto outras letras se tornam espaços. Os bits são processados na ordem 16, 8, 4, 2 e, em seguida, a última tradução trata de limpar o2
bit e convertê1
-lo ao mesmo tempo. (A versão alternativa faz cada cópia individualmente, o que custa mais bytes, mas estes são salvos porque o tratamento de bits é simplificado.)Coloque todas as linhas no mesmo comprimento.
fonte
Python 2 ,
249244 bytesExperimente online!
5 bytes salvos por Jonathan Frech .
fonte
while 'y'in
. Eu acho que o subscrito[-5:][::-1]
pode ser jogado[:-6:-1]
. A declaração de retorno pode ser colocada na linha anterior.JavaScript (ES8), 192 bytes
Retorna a transposição ... que é refletida no eixo vertical; deixe-me saber se isso invalida esta entrada. Saída é uma matriz de cadeias contendo
0
s e1
s.Experimente online!
Explicação
Para cada caractere
c
,k+1
avalia o número de linhas a serem modificadas.k = "wxy".search(c) + 1;
, onde osearch
método retorna o índice ou-1
.k
é então decrementado até atingir-1
, verificando~k--
um valor verdadeiro.Se o caractere atual for "y", defina um sinalizador para que o valor base-36 do próximo caractere - 1 se torne o valor para
k
.Ao encontrar um "z", as seqüências de caracteres do teclado à esquerda, aumentam a quantidade do teclado
5
e redefina o índice da matriz para0
.fonte
Haskell, 399 bytes
Instale o
split
pacote:cabal install split
fonte