To wyzwanie jest oparte na poście w piaskownicy przez user48538 . Ponieważ nie jest już aktywny na tej stronie, podjąłem to wyzwanie.
apgsearch , rozproszony program wyszukiwania zup dla Gry Życia Conwaya oraz baza danych wyników wyszukiwania, Catagolue używa apgcodes do klasyfikowania i oznaczania wzorców. same apgcodes używają rozszerzonego formatu Wechsler , rozszerzenia notacji wzorców opracowanej przez Allana Wechslera w 1992 roku.
Poniższe przykłady i zdjęcia pochodzą z LifeWiki .
Ciąg n znaków w zestawie pasujących do wyrażenia regularnego
[0-9a-v]
oznacza pasek pięciu rzędów o szerokości n kolumn. Każdy znak oznacza pięć komórek w kolumnie pionowej odpowiadających bitstrings [00000
,10000
,01000
...00010
,10010
,01010
,11010
...11111
].Na przykład
27deee6
odpowiada ciężkiemu statkowi kosmicznemu :
Znak
z
oddziela ciągłe pięciorzędowe paski.Na przykład
0ca178b96z69d1d96
odpowiada 31-bitowej martwej natury:
Znaki
w
ix
są używane odpowiednio do skrótu00
i000
.w33z8kqrqk8zzzx33
Odpowiada więc transferowi królowej pszczół trans :
(Pominięto 10 pustych wierszy)
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]]
źródło
z
ever occur at the very beginning?z
.vv99f60vv99f60uv11320uv19rqz33y133y11322310132231
1yx1
,1yy1
,1yw1
and1yz1
. Maybe they should be tests.Odpowiedzi:
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.If it's a
y
, then push4
to the predefined empty list, causing4+n
0
s to be output next time.If it's an
x
then output 30
s. (This is done via repetition to avoid the literal0
touching thex
or the following literal.)If it's a
w
then output 20
s. (The¦
is needed to separate the two string literals.)Otherwise, index the current character in the digits and letters, convert to binary, and print the result downwards least significant bit first; then move the cursor right for the next column.
źródło
JavaScript (ES8), 197 bytes
Takes input as a string. Returns an array of strings with '#' and spaces. The output may include extra (but consistent) trailing spaces on each line.
Try it online! (prettified output)
How?
Global variables
"x"
is used several times, so it's worth storing it into the variable x.parseInt
is used twice, so it's worth storing it into the variable P.Pre-processing of repeated zeros
We first replace all patterns
"w"
,"x"
and"yX"
in the input string with the appropriate number of spaces. These spaces will later be interpreted as"0"
.Decoding
We split the resulting string, prepend an initial
"x"
and iterate 5 times (with i = 0 to 4) on each character c:If c is lower than
"x"
, we append the corresponding pattern to the next 5 rows.If c is greater than or equal to
"x"
, we allocate 5 new empty strings in o[ ] and add 5 to y. This is triggered by the initial"x"
that was added at the beginning of the string, or by any"z"
in the original content.Padding
Finally, we pad each string in o[ ] with spaces so that they all have w characters.
źródło
05AB1E,
14813298 bytesI'm a highschool student and this was my first time for both golfing and using 05AB1E, so comments are appreciated!
Try it online!Try it online!Try it online!
Takes input as uppercase and outputs the transposed matrix as multiple output lines of 1s and 0s. May add extra zeros.
If you want to test with lowercase strings, add
u
in the TIO header.If you want pretty-printed output, add
'1'█:'0'.:
in the TIO footer.Explanation
(I'm calling "rows" and "columns" opposite of what you might expect because it generates the transposed matrix)
The basic algorithm is:
Istnieje kilka innych drobnych szczegółów, które można zobaczyć poniżej w rozszerzonym kodzie. Wszystko po kartach na końcu wiersza jest komentarzem i można je zignorować. (Nawiasem mówiąc, ten schemat komentarzy nie jest częścią 05AB1E. Zrobiłem to w ten sposób, ponieważ wyglądał ładnie.) Linie zawierające komentarze zaczynające się od „@” służą do debugowania i można je pominąć bez zmiany ostatecznego wyniku.
źródło
,
."yy"
może być„yy
(05AB1E ma wbudowany ciąg znaków 2-znakowy i 3-znakowy).>≠
może byćĀ
(prawdomówny, zasadniczo0
pozostaje0
i wszystko inne staje się1
).}}
może być]
(zamknij wszystkie pętle i if-elsy). Jestem pewien, że niektórzy z profesjonalnych golfistów 05AB1E są w stanie grać w golfa bardziej ode mnie, prawdopodobnie nawet o połowę.APL (Dyalog Unicode) ,
8780776763 bajtówdzięki H.PWiz za zapisanie 7 bajtów i ngn na kolejne
1317.Wypróbuj online!
NB: Pobiera dane wejściowe jako ciąg wielkich liter.
Z ładnym wydrukiem
Wyjaśnienie
a←⎕D,⎕A
oznacza łańcuch'0123...89ABCD...XYZ'
'Y.|W|X'⎕R{'0'/⍨+/30 36|a⍳2↑⍵.Match}
zastępuje XW i yx odpowiednią liczbę'0'
s (wyjaśnione poniżej)35(≠⊆⊢)a⍳
przekształca ciąg do wektora indecies wa
i rozdziela się na35
(IE)'Z'
tworząc zagnieżdżonej VECTOR↑
konwertuje zagnieżdżonej wektora do celów wypełniających macierz0
s(5/2)⊤
przekształca każdą liczba w wektor binarny, co daje trójwymiarową macierz z wektorami binarnymi wzdłuż osi pierwotnej,⊖
odwraca się wzdłuż osi pierwotnej,↓
zmniejsza rangę macierzy, więc jest dwuwymiarowa,⍉
przekształca wynik na odpowiedni wynikźródło
a←⎕D,⎕A⋄,↓↑{⊖(5/2)⊤a⍳⍵}¨'Z'(≠⊆⊢)('Y.|W|X'⎕R{'0'/⍨{0::2+'WX'⍳⍵⋄4+a⍳1⊃⍵}⍵.Match})⍞
. Błąd łapania również nie wydaje się bardzo golfowy⎕R
i operandy są niepotrzebne2+'WX'⍳⍵
->2+'X'=⍵
{0::2+'X'=⍵⋄4+a⍳1⊃⍵}⍵.Match
->30 36|a⍳2↑⍵.Match
Perl 6 ,
156142 bajty14 bajtów zaoszczędzonych dzięki Jo Kingowi. (Naprawiono także mały błąd podczas analizowania
y
i dodano prettifier).Naprawiono błędne parsowanie
y[wxy]
.Wypróbuj online!
Podział linii służy tylko dopasowaniu tekstu do ekranu. To nie jest część programu.
Jak to działa
Jest to anonimowa funkcja, która pobiera zmienny ciąg. (To sprawia, że korzystanie z funkcji jest nieco dziwne, ponieważ możesz nadać jej tylko zmienne, a nie literały.) Po pewnym czasie zwraca listę list zawierającą 0 i 1, o takim samym znaczeniu jak w oryginalnym poście.
Łańcuch wejściowy wchodzi do zmiennej
$_
. Zaczynamy od użycia szeregu instrukcji podstawienia, aby pozbyć się wszystkich tych skrótów dla różnych liczb zer. Po pierwsze, musimy uporządkowaćy
, ponieważ w wypadkuyx
lubyw
Thew
(lubx
) nie stanowi skrót od siebie. Szukamyy(.)
(y
i jednego znaku, który pamięta) i zastępujemy go000{"0"x:36(~$0)}
: trzy zera są kopiowane dosłownie, a następnie przekształcamy następny znak z podstawy 36 na podstawę 10 (:36(~$0)
) i dodajemy tyle innych zer. Następnie możemy wymienićw
„s użycius:g/w/00/
, ax
” s użycius:g/x/000/
. Na koniecs/$/z/
dodajemyz
na końcu, dodając mnóstwo pustych linii na dole. (Zobaczymy przyczynę później.)Reszta to tylko duża mapa. Odwzorowujemy
.split("z").map: (*~0 x.chars).comb})
, który jest łańcuchem wejściowym (bez zerowych skrótów), podzielony na linie wz
, przy czym każda linia jest najpierw uzupełniana0 x.chars
(tonami zer, czyli tyle, ile całkowita długość łańcucha wejściowego) po prawej stronie a następnie w podziale na listę pojedynczych znaków (.comb
). Na koniec transponujemy go za pomocą[Z]
(zmniejsz za pomocą zip). Zipowanie kończy się, gdy tylko najkrótsza lista zostanie wyczerpana, co powoduje, że wszystkie linie mają tę samą długość. (Liczba bezużytecznych zer po prawej stronie jest równa długości najkrótszej linii. Ta sztuczka transpozycji kończy się niepowodzeniem dla „macierzy” z tylko jednym wierszem. Dlatego wcześniej na końcu dodaliśmy siłą inny wiersz).Teraz po prostu odwzorowujemy wiersze (kolumny oryginalnej macierzy) i zastępujemy każdy napotkany znak odpowiednimi 5 bitami. Odbywa się to za pomocą
:32($_)
(baza 32 do bazy 10).fmt("%05b")
(format jako ciąg bitów o szerokości 5, wypełniony zerami).flip
(odwróć ciąg, ponieważ LSB znajduje się w górnym wierszu, a nie w dole).comb
(podziel ciąg na listę postacie). Użyliśmy.flatmap
, który spłaszcza wynikową listę (w przeciwnym razie otrzymalibyśmy listę list w każdej kolumnie). Transpozycja wyniku jest następnie domyślnie zwracana.(Czuję się trochę źle z powodu nadużywania możliwości tak ciągłego zerowania. Ale to znacznie zmniejszyło liczbę bajtów :—).)
źródło
1yx1
i1yw1
y[0-9a-v]
i kiedy stwierdziłem, że tak nie jest, po prostu dodałem szybką (i niewłaściwą) poprawkę.)000
w y nax
Galaretka , 66 bajtów
Yowza!
Link monadyczny, który daje transponowaną wersję jako listę list (dodaj
Z
na końcu, aby transponować z powrotem).Wypróbuj online! Lub zobacz pakiet testowy (z ładnymi wydrukami).
źródło
Siatkówka , 203 bajty
Wypróbuj online! Link zawiera przypadki testowe. Alternatywne rozwiązanie, również 203 bajty:
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Najpierw zajmij się niewygodnym przypadkiem
y
polecenia. Niestety, list po tym może być a,y
a nawetz
, więc musimy tu być ostrożni. Wszystkie magiey
są najpierw zamieniane w#
s.Pętla przetwarza następnie
#
s. Po pierwsze, a0
jest dodawane do#
. Jeśli jest to#0
wtedy, to jest zmieniane na,000
które kończy operację, w przeciwnym razie znak po#
jest zmniejszany, a pętla powtarza się, aż wszystkie#
s zostaną przetworzone.Napraw
w
s ix
s.Podziel na nowe linie. (
S`z
działa również dla tej samej liczby bajtów).Wykonaj 5 kopii każdego wiersza, a następnie wykonaj konwersję binarną, mapując litery odpowiednim bitem
#
i usuwając ten bit, podczas gdy inne litery stają się spacjami. Bity są przetwarzane w kolejności 16, 8, 4, 2, a następnie ostatnie tłumaczenie obsługuje czyszczenie2
bitu i konwersję1
bitu w tym samym czasie. (Alternatywna wersja sprawia, że każda kopia jest osobno, co kosztuje więcej bajtów, ale są one zapisywane, ponieważ obsługa bitów jest uproszczona).Wypełnij wszystkie linie na tej samej długości.
źródło
Python 2 ,
249244 bajtówWypróbuj online!
5 bajtów zapisanych przez Jonathana Frecha .
źródło
while 'y'in
. Myślę, że do indeksu dolnego[-5:][::-1]
można grać w golfa[:-6:-1]
. Instrukcja return może być umieszczona w poprzednim wierszu.JavaScript (ES8), 192 bajty
Zwraca transpozycję ..., która jest następnie odbijana w poprzek osi pionowej; daj mi znać, jeśli to unieważnia ten wpis. Dane wyjściowe to tablica ciągów zawierających
0
s i1
s.Wypróbuj online!
Wyjaśnienie
Dla każdego znaku
c
,k+1
Zwraca liczbę wierszy zmodyfikować.k = "wxy".search(c) + 1;
, gdziesearch
metoda zwraca indeks lub-1
.k
jest następnie zmniejszana, dopóki nie osiągnie-1
, sprawdzając~k--
prawdziwą wartość.Jeśli bieżącym znakiem jest „y”, ustaw flagę tak, aby podstawowa wartość 36 następnego znaku - 1 stała się wartością
k
.Po napotkaniu „z”, ciągów padów po lewej stronie, zwiększaj wielkość padów o
5
i resetuj indeks tablicy do0
.źródło
Haskell, 399 bajtów
Zainstaluj
split
pakiet:cabal install split
źródło