Ce défi est basé sur une publication sandbox par user48538 . Puisqu'il n'est plus actif sur ce site, j'ai relevé ce défi.
apgsearch , le programme de recherche de soupe distribuée pour Game of Life de Conway et la base de données de résultats de recherche, Catagolue utilise des codes apg pour classer et indiquer les modèles. Les apgcodes eux-mêmes utilisent le format Wechsler étendu , une extension d'une notation de modèle développée par Allan Wechsler en 1992.
Les exemples suivants et les images sont tirés de LifeWiki .
Une chaîne de n caractères dans l'ensemble correspondant à l'expression régulière
[0-9a-v]
désigne une bande de cinq lignes, n colonnes de large. Chaque caractère représente cinq cellules dans une colonne verticale correspondant aux chaînes de bits [00000
,10000
,01000
...00010
,10010
,01010
,11010
...11111
].Par exemple,
27deee6
correspond à un vaisseau spatial lourd :
Le personnage
z
sépare les bandes contiguës à cinq rangées.Par exemple,
0ca178b96z69d1d96
correspond à une nature morte de 31 bits:
Les caractères
w
etx
sont utilisés pour abréger00
et000
, respectivement.w33z8kqrqk8zzzx33
Correspond donc à une navette trans-reine des abeilles :
(10 lignes vierges omises)
Finally, the symbols matching the regex
y[0-9a-z]
correspond to runs of between 4 and 39 consecutive0
s.A good example is
31a08zy0123cko
, corresponding to a ship on quadpole:
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]]
la source
z
ever occur at the very beginning?z
.vv99f60vv99f60uv11320uv19rqz33y133y11322310132231
1yx1
,1yy1
,1yw1
and1yz1
. Maybe they should be tests.Réponses:
Fusain , 50 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Utilise
1
et0
. Explication:Définissez l'arrière-plan, c'est-à-dire toutes les cellules non imprimées du rectangle entourant la sortie, sur
0
.Préfixez les chiffres à l'alphabet minuscule prédéfini.
Boucle sur la chaîne d'entrée.
Si la liste vide prédéfinie n'est pas vide ...
... puis imprimer un nombre de
0
s donné par la somme du nombre extrait de la liste et de l'index du caractère courant dans les chiffres et les lettres. Voir ci-dessous pour ce que ce nombre est toujours.Basculez le caractère actuel.
Si c'est un
z
retour de 5 retours de chariot, nous amenant à la prochaine bande de sortie.Si c'est un
y
, poussez4
vers la liste vide prédéfinie, ce4+n
0
qui entraînera la sortie de s la prochaine fois.Si c'est une
x
sortie de 30
s. (Cela se fait par répétition pour éviter que le littéral ne0
touche lex
ou le littéral suivant.)Si c'est une
w
sortie alors 20
s. (Le¦
est nécessaire pour séparer les deux littéraux de chaîne.)Sinon, indexez le caractère courant dans les chiffres et les lettres, convertissez-le en binaire et imprimez le résultat vers le bas le bit le moins significatif en premier; puis déplacez le curseur vers la droite pour la colonne suivante.
la source
JavaScript (ES8), 197 octets
Prend l'entrée sous forme de chaîne. Renvoie un tableau de chaînes avec '#' et des espaces. La sortie peut inclure des espaces de fin supplémentaires (mais cohérents) sur chaque ligne.
Essayez-le en ligne! (sortie prettifiée)
Comment?
Variables globales
"x"
est utilisé plusieurs fois, il vaut donc la peine de le stocker dans la variable x .parseInt
est utilisée deux fois, donc il vaut la peine de stockage dans la variable P .Prétraitement des zéros répétés
Nous remplaçons d'abord tous les modèles
"w"
,"x"
et"yX"
dans la chaîne d'entrée par le nombre approprié d'espaces. Ces espaces seront ultérieurement interprétés comme"0"
.Décodage
Nous séparons la chaîne résultante, ajoutons une initiale
"x"
et répétons 5 fois (avec i = 0 à 4 ) sur chaque caractère c :Si c est inférieur à
"x"
, nous ajoutons le motif correspondant aux 5 lignes suivantes.Si c est supérieur ou égal à
"x"
, nous allouons 5 nouvelles chaînes vides dans o [] et ajoutons 5 à y . Ceci est déclenché par l'initiale"x"
qui a été ajoutée au début de la chaîne, ou par n'importe quel élément"z"
du contenu d'origine.Rembourrage
Enfin, nous remplissons chaque chaîne dans o [] avec des espaces afin qu'ils aient tous w caractères.
la source
05AB1E ,
14813298 octetsJe suis un lycéen et c'était ma première fois pour jouer au golf et utiliser 05AB1E, donc les commentaires sont appréciés!
Essayez-le en ligne!Essayez-le en ligne!Essayez-le en ligne!
Prend l'entrée en majuscules et sort la matrice transposée en plusieurs lignes de sortie de 1 et de 0. Peut ajouter des zéros supplémentaires.
Si vous souhaitez tester avec des chaînes en minuscules, ajoutez l'
u
en-tête TIO.Si vous voulez une sortie assez imprimée, ajoutez
'1'█:'0'.:
le pied de page TIO.Explication
(J'appelle "lignes" et "colonnes" en face de ce à quoi vous pourriez vous attendre car cela génère la matrice transposée)
L'algorithme de base est:
Il y a quelques autres détails mineurs que vous pouvez voir ci-dessous dans le code développé. Tout ce qui se trouve après les onglets à la fin d'une ligne est un commentaire et peut être ignoré. (Ce schéma de commentaire ne fait pas partie de 05AB1E, soit dit en passant. Je l'ai fait de cette façon car il avait l'air bien.) Les lignes qui ont des commentaires commençant par "@" sont à des fins de débogage et peuvent être omises sans modifier la sortie finale.
la source
,
."yy"
peut être„yy
(05AB1E a à la fois une chaîne de 2 caractères et 3 caractères intégrée).>≠
peut êtreĀ
(authentifié,0
reste fondamentalement0
et tout le reste devient1
).}}
peut être]
(fermez toutes les boucles et if-elses). Je suis sûr que certains golfeurs pro 05AB1E sont capables de jouer au golf des choses plus importantes que moi, voire de diviser par deux le nombre d'octets.APL (Dyalog Unicode) ,
8780776763 octetsmerci à H.PWiz pour avoir économisé 7 octets et ngn pour
13autres 17.Essayez-le en ligne!
NB: Prend l'entrée comme une chaîne majuscule.
Avec une jolie sortie imprimée
Explication
a←⎕D,⎕A
a est la chaîne'0123...89ABCD...XYZ'
'Y.|W|X'⎕R{'0'/⍨+/30 36|a⍳2↑⍵.Match}
remplace XW et Yx par le nombre correspondant de'0'
s (expliqué ci-dessous)35(≠⊆⊢)a⍳
convertit la chaîne en vecteur d'indécies dansa
et se divise35
(c'est-à-dire) en'Z'
créant un vecteur imbriqué↑
convertit le vecteur imbriqué en matrice matelassée se terminant par0
s(5/2)⊤
convertit chacun nombre dans un vecteur binaire résultant en une matrice tridimensionnelle avec des vecteurs binaires le long de l'axe principal⊖
inverse le long de l'axe principal↓
réduit le rang de la matrice de sorte qu'il est,⍉
remodèle en 2 dimensions le résultat à la sortie appropriéela source
a←⎕D,⎕A⋄,↓↑{⊖(5/2)⊤a⍳⍵}¨'Z'(≠⊆⊢)('Y.|W|X'⎕R{'0'/⍨{0::2+'WX'⍳⍵⋄4+a⍳1⊃⍵}⍵.Match})⍞
. La capture d'erreur ne semble pas non plus très golfée⎕R
et ses opérandes sont inutiles2+'WX'⍳⍵
->2+'X'=⍵
{0::2+'X'=⍵⋄4+a⍳1⊃⍵}⍵.Match
->30 36|a⍳2↑⍵.Match
Perl 6 ,
156142 octets14 octets économisés grâce à Jo King. (Correction également d'un petit bug avec l'analyse de
y
et ajout d'un prettifier.)Correction de l'analyse de buggy de
y[wxy]
.Essayez-le en ligne!
Le saut de ligne est là juste pour faire tenir le texte à l'écran. Cela ne fait pas partie du programme.
Comment ça marche
Il s'agit d'une fonction anonyme qui prend une chaîne mutable. (Cela rend l'utilisation de la fonction un peu particulière, car vous ne pouvez lui donner que des variables, pas des littéraux.) Après un certain travail, elle retourne une liste de listes contenant des 0 et des 1, avec la même signification que dans la publication d'origine.
La chaîne d'entrée entre dans la variable
$_
. Nous commençons par utiliser une série d'instructions de substitution dessus afin de nous débarrasser de tous ces raccourcis pour différents nombres de zéros. Tout d'abord, nous devons trier ley
, car dans le cas deyx
ouyw
, lew
(oux
) ne constitue pas un raccourci en soi. Nous recherchonsy(.)
(y
et un caractère, dont il se souvient) et le remplaçons par000{"0"x:36(~$0)}
: les trois zéros sont copiés textuellement, puis nous convertissons le caractère suivant de la base 36 en base 10 (:36(~$0)
) et ajoutons beaucoup plus de zéros. Ensuite, nous remplaçons l'w
utilisation des:g/w/00/
et l'x
utilisation des:g/x/000/
. Enfin, avecs/$/z/
, nous ajoutons unz
à la fin, en ajoutant beaucoup de lignes vides au fond. (Nous verrons la raison plus tard.)Le reste n'est qu'une grande déclaration de carte. Nous mappons sur
.split("z").map: (*~0 x.chars).comb})
, qui est la chaîne d'entrée (sans zéro raccourci), divisée en lignes àz
, chaque ligne étant d'abord complétée avec0 x.chars
(des tonnes de zéros, à savoir autant que la longueur totale de la chaîne d'entrée) à droite puis décomposé en une liste de caractères individuels (.comb
). Enfin, nous le transposons avec[Z]
(réduire avec zip). Le zippage se termine dès que la liste la plus courte est épuisée, ce qui fait que toutes les lignes ont la même longueur. (Le nombre de zéros de fin inutiles à droite est égal à la longueur de la ligne la plus courte. De plus, cette astuce de transposition échoue pour une "matrice" avec une seule ligne. C'est pourquoi nous avons ajouté de force une autre ligne à la fin avant.)Maintenant, nous mappons simplement les lignes (colonnes de la matrice d'origine) et remplaçons chaque caractère rencontré par les 5 bits correspondants. Cela se fait en utilisant
:32($_)
(base 32 à base 10).fmt("%05b")
(format comme une chaîne binaire de largeur 5, complétée par des zéros).flip
(inversez la chaîne, car le LSB est dans la ligne du haut, pas dans le bas).comb
(divisez la chaîne en une liste de personnages). Nous avons utilisé.flatmap
, qui aplatit la liste résultante (sinon nous obtiendrions une liste de listes dans chaque colonne). La transposition du résultat est alors renvoyée implicitement.(Je me sens un peu mal à cause de l'abus de la possibilité de traîner les zéros si fort. Mais cela a considérablement réduit le bytecount :—).)
la source
1yx1
et1yw1
y[0-9a-v]
et quand j'ai trouvé que ce n'était pas le cas, j'ai juste ajouté une solution rapide (et erronée).)000
dans la substitution y parx
Gelée , 66 octets
Yowza!
Un lien monadique qui donne une version transposée comme une liste de listes (ajouter
Z
à la fin pour transposer en arrière).Essayez-le en ligne! Ou voir la suite de tests (avec une jolie sortie imprimée).
la source
Rétine , 203 octets
Essayez-le en ligne! Le lien inclut des cas de test. Solution alternative, également 203 octets:
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Commencez par gérer le cas délicat de la
y
commande. Malheureusement, la lettre après cela peut être uny
ou même unz
, nous devons donc faire attention ici. Toutes les magiey
s sont d'abord transformées en#
s.Une boucle traite ensuite le
#
s. Tout d'abord, un0
est ajouté au#
. S'il s'agit d'un#0
alors qui est remplacé par celui000
qui termine l'opération, sinon le caractère après le#
est décrémenté et la boucle se répète jusqu'à ce que tous les#
s aient été traités.Réparez les
w
s etx
s.Fractionner sur de nouvelles lignes. (
S`z
fonctionne également pour le même nombre d'octets.)Faites 5 copies de chaque ligne, puis effectuez une conversion binaire en mappant les lettres avec le bit approprié
#
et en effaçant ce bit, tandis que les autres lettres deviennent des espaces. Les bits sont traités dans l'ordre 16, 8, 4, 2, puis la dernière traduction gère l'effacement du2
bit et sa conversion1
en même temps. (La version alternative fait chaque copie individuellement, ce qui coûte plus d'octets mais ceux-ci sont enregistrés car la gestion des bits est simplifiée.)Remplissez toutes les lignes à la même longueur.
la source
Python 2 ,
249244 octetsEssayez-le en ligne!
5 octets enregistrés par Jonathan Frech .
la source
while 'y'in
. Je pense que l'indice[-5:][::-1]
peut être joué au golf[:-6:-1]
. L'instruction de retour peut être placée sur la ligne précédente.JavaScript (ES8), 192 octets
Renvoie la transposition ... qui est ensuite réfléchie sur l'axe vertical; faites-moi savoir si cela invalide cette entrée. La sortie est un tableau de chaînes contenant
0
s et1
s.Essayez-le en ligne!
Explication
Pour chaque caractère
c
,k+1
évalue le nombre de lignes à modifier.k = "wxy".search(c) + 1;
, où lasearch
méthode renvoie l'index ou-1
.k
est ensuite décrémenté jusqu'à ce qu'il atteigne-1
en vérifiant~k--
une valeur véridique.Si le caractère actuel est "y", définissez un indicateur de sorte que la valeur base-36 du caractère suivant - 1 devienne la valeur de
k
.Lors de la rencontre d'un "z", les chaînes de pad vers la gauche, incrémentent la quantité de pad de
5
et réinitialisent l'index du tableau sur0
.la source
Haskell, 399 octets
Installer le
split
package:cabal install split
la source