Diese Herausforderung basiert auf einem Sandbox-Beitrag von user48538 . Da er auf dieser Seite nicht mehr aktiv ist, habe ich diese Herausforderung angenommen.
apgsearch , das verteilte Suppensuchprogramm für Conways Game of Life und die Suchergebnisdatenbank Catagolue, verwenden apgcodes , um Muster zu klassifizieren und zu kennzeichnen. apgcodes selbst verwenden das erweiterte Wechsler-Format , eine Erweiterung einer von Allan Wechsler 1992 entwickelten Musternotation .
Die folgenden Beispiele und Bilder stammen aus dem LifeWiki .
Eine Folge von n Zeichen in der Menge, die mit dem regulären Ausdruck übereinstimmt,
[0-9a-v]
bezeichnet einen Streifen von fünf Zeilen mit einer Breite von n Spalten. Jede Figur zeigt die fünf Zellen in einer vertikalen Spalte zu den entsprechenden bitstrings [00000
,10000
,01000
...00010
,10010
,01010
,11010
...11111
].Entspricht zum Beispiel
27deee6
einem schweren Raumschiff :
Das Zeichen
z
trennt zusammenhängende fünfreihige Streifen.Entspricht beispielsweise
0ca178b96z69d1d96
einem 31-Bit-Stillleben:
Die Zeichen
w
undx
werden verwendet , um abzukürzen00
und000
sind.So
w33z8kqrqk8zzzx33
entspricht ein Trans-Bienenkönigin-Shuttle :
(10 leere Zeilen weggelassen)
Schließlich entsprechen die Symbole, die dem regulären Ausdruck
y[0-9a-z]
entsprechen, Läufen von 4 bis 39 aufeinanderfolgenden0
s.Ein gutes Beispiel
31a08zy0123cko
für ein Schiff auf Quadpole ist :
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]]
quelle
z
ever occur at the very beginning?z
.vv99f60vv99f60uv11320uv19rqz33y133y11322310132231
1yx1
,1yy1
,1yw1
and1yz1
. Maybe they should be tests.Antworten:
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.
quelle
JavaScript (ES8), 197 Byte
Übernimmt die Eingabe als Zeichenfolge. Gibt ein Array von Strings mit '#' und Leerzeichen zurück. Die Ausgabe kann zusätzliche (aber konsistente) Leerzeichen in jeder Zeile enthalten.
Probieren Sie es online! (schöne Ausgabe)
Wie?
Globale Variablen
"x"
wird mehrmals verwendet, daher lohnt es sich, es in der Variablen x zu speichern .parseInt
wird zweimal verwendet, es lohnt sich also, sie in der Variablen P zu speichern .Vorverarbeitung von wiederholten Nullen
Wir ersetzen zunächst alle Muster
"w"
,"x"
und"yX"
in der Eingabezeichenfolge mit der entsprechenden Anzahl von Räumen. Diese Leerzeichen werden später als interpretiert"0"
.Dekodierung
Wir teilen die resultierende Zeichenfolge, stellen eine Initiale
"x"
voran und iterieren 5 Mal (mit i = 0 bis 4 ) für jedes Zeichen c :Wenn c kleiner als ist
"x"
, hängen wir das entsprechende Muster an die nächsten 5 Zeilen an.Wenn c größer oder gleich ist
"x"
, ordnen wir 5 neue leere Zeichenfolgen in o [] zu und addieren 5 zu y . Dies wird durch die Initiale ausgelöst, die"x"
am Anfang der Zeichenfolge hinzugefügt wurde, oder durch eine beliebige"z"
im ursprünglichen Inhalt.Polsterung
Schließlich füllen wir jede Zeichenfolge in o [] mit Leerzeichen auf, sodass sie alle w Zeichen enthalten.
quelle
05AB1E ,
14813298 BytesIch bin Gymnasiast und war das erste Mal, dass ich Golf gespielt und 05AB1E benutzt habe. Kommentare sind also willkommen!
Probieren Sie es online!Probieren Sie es online!Probieren Sie es online!
Nimmt Eingaben als Großbuchstaben und gibt die transponierte Matrix als mehrere Ausgabezeilen mit 1 und 0 aus. Kann zusätzliche Nullen hinzufügen.
Wenn Sie mit Kleinbuchstaben testen möchten, fügen Sie
u
den TIO-Header hinzu.Wenn Sie eine hübsch gedruckte Ausgabe wünschen, fügen Sie diese
'1'█:'0'.:
in die TIO-Fußzeile ein.Erläuterung
(Ich rufe "Zeilen" und "Spalten" entgegengesetzt zu dem, was Sie vielleicht erwarten, weil es die transponierte Matrix erzeugt.)
Der grundlegende Algorithmus lautet:
Es gibt noch einige andere kleinere Details, die Sie unten im erweiterten Code sehen können. Alles nach den Tabulatoren am Ende einer Zeile ist ein Kommentar und kann ignoriert werden. (Dieses Kommentar-Schema ist übrigens nicht Teil von 05AB1E. Ich habe es so gemacht, weil es gut aussah.) Zeilen, deren Kommentare mit "@" beginnen, dienen Debugging-Zwecken und können weggelassen werden, ohne die endgültige Ausgabe zu ändern.
quelle
,
."yy"
Kann sein„yy
(05AB1E hat sowohl ein 2-Zeichen- als auch ein 3-Zeichen-String (eingebaut).>≠
kann seinĀ
(wahrheitsgemäß,0
bleibt im Grunde0
und alles andere wird1
).}}
kann sein]
(schließen Sie alle Schleifen und wenn-elses). Ich bin sicher, einige der Pro 05AB1E-Golfer sind in der Lage, umfangreichere Dinge als ich zu spielen, möglicherweise sogar die Hälfte der Byteanzahl.APL (Dyalog Unicode) ,
8780776763 Bytesdanke an H.PWiz für das speichern von 7 bytes und ngn für weitere
1317.Probieren Sie es online!
NB: Nimmt die Eingabe als Großbuchstaben.
Mit hübscher Druckausgabe
Erläuterung
a←⎕D,⎕A
a ist die Zeichenfolge'0123...89ABCD...XYZ'
'Y.|W|X'⎕R{'0'/⍨+/30 36|a⍳2↑⍵.Match}
ersetzt XW und Yx mit der entsprechenden Anzahl von'0'
s (ausführlicher erklärt unten)35(≠⊆⊢)a⍳
wandelt die Zeichenfolge in den Vektor von indecies ina
und Spalten auf35
(dh)'Z'
eine verschachtelte Vektor Erstellen↑
wandelt die verschachtelten Vektors in eine Matrix padding Enden mit0
s(5/2)⊤
jeweils konvertiert Zahl in einen binären Vektor, der zu einer dreidimensionalen Matrix mit binären Vektoren entlang der Primärachse führt⊖
Umkehrungen entlang der Primärachse↓
verringern den Rang der Matrix, sodass,⍉
das Ergebnis zweidimensional in die entsprechende Ausgabe umgewandelt wirdquelle
a←⎕D,⎕A⋄,↓↑{⊖(5/2)⊤a⍳⍵}¨'Z'(≠⊆⊢)('Y.|W|X'⎕R{'0'/⍨{0::2+'WX'⍳⍵⋄4+a⍳1⊃⍵}⍵.Match})⍞
. Der Fehler Fang scheint auch nicht sehr golfen⎕R
und seine Operanden sind unnötig2+'WX'⍳⍵
->2+'X'=⍵
{0::2+'X'=⍵⋄4+a⍳1⊃⍵}⍵.Match
->30 36|a⍳2↑⍵.Match
Perl 6 ,
156142 BytesDank Jo King wurden 14 Bytes eingespart. (
y
Behebung eines kleinen Fehlers beim Parsen des und Hinzufügen eines Prettifiers.)Das fehlerhafte Parsen von wurde behoben
y[wxy]
.Probieren Sie es online!
Der Zeilenumbruch dient nur dazu, dass der Text auf den Bildschirm passt. Es ist nicht Teil des Programms.
Wie funktioniert es
Es ist eine anonyme Funktion, die eine veränderbare Zeichenfolge akzeptiert. (Dies macht die Verwendung der Funktion etwas eigenartig, da Sie nur Variablen und keine Literale angeben können.) Nach einiger Arbeit wird eine Liste von Listen mit 0en und 1en mit der gleichen Bedeutung wie im ursprünglichen Beitrag zurückgegeben.
Die Eingabezeichenfolge wird in die Variable eingegeben
$_
. Wir beginnen mit einer Reihe von Substitutionsanweisungen, um all diese Abkürzungen für verschiedene Anzahlen von Nullen zu beseitigen. Erstens müssen wir das aussortiereny
, denn im Fall vonyx
oderyw
stellt dasw
(oderx
) keine Abkürzung für sich dar. Wir suchen nachy(.)
(y
und einem Zeichen, an das es sich erinnert) und ersetzen es durch000{"0"x:36(~$0)}
: Die drei Nullen werden wörtlich kopiert, dann konvertieren wir das nächste Zeichen von der Basis 36 zur Basis 10 (:36(~$0)
) und fügen die vielen weiteren Nullen hinzu. Dann ersetzen wir diew
"s using"s:g/w/00/
und diex
"s using"s:g/x/000/
. Schließlichs/$/z/
fügen wir mit az
am ende eine menge leerer zeilen nach unten setzen. (Wir werden den Grund später sehen.)Der Rest ist nur eine große Kartenaussage. Wir mappen über
.split("z").map: (*~0 x.chars).comb})
, das ist die Eingabezeichenfolge (ohne Nullkurzzeichen), die in Zeilen bei aufgeteilt istz
, wobei jede Zeile zuerst mit0 x.chars
(Tonnen von Nullen, dh so viel wie die Gesamtlänge der Eingabezeichenfolge ist) auf der rechten Seite aufgefüllt wird und dann in eine Liste einzelner Zeichen (.comb
) zerlegt . Zum Schluss transponieren wir es mit[Z]
(verkleinern mit zip). Das Zippen endet, sobald die kürzeste Liste erschöpft ist, was zur Folge hat, dass alle Zeilen die gleiche Länge haben. (Die Anzahl der nutzlosen nachgestellten Nullen auf der rechten Seite entspricht der Länge der kürzesten Zeile. Außerdem schlägt dieser Transpositionstrick für eine "Matrix" mit nur einer Zeile fehl. Deshalb haben wir am Ende zuvor eine weitere Zeile hinzugefügt.)Nun ordnen wir einfach die Zeilen (Spalten der ursprünglichen Matrix) zu und ersetzen jedes gefundene Zeichen durch die entsprechenden 5 Bits. Dies geschieht mit
:32($_)
(Basis 32 bis Basis 10).fmt("%05b")
(Format als Bitstring mit der Breite 5, aufgefüllt mit Nullen).flip
(Umkehren der Zeichenfolge, da sich das LSB in der oberen Zeile und nicht in der unteren Zeile befindet).comb
(Aufteilen der Zeichenfolge in eine Liste von Zeichen). Wir haben verwendet.flatmap
, um die resultierende Liste zu verflachen (andernfalls würden wir eine Liste von Listen in jeder Spalte erhalten). Die Transponierung des Ergebnisses wird dann implizit zurückgegeben.(Ich fühle mich ein bisschen schlecht, weil ich die Möglichkeit missbraucht habe, Nullen so stark nachzufolgen. Aber das hat die Anzahl der Bytes erheblich reduziert :-).)
quelle
1yx1
und1yw1
y[0-9a-v]
und als ich feststellte, dass dies nicht der Fall ist, fügte ich einfach eine schnelle (und falsche) Lösung hinzu.)000
in der y-Substitution durchx
Jelly , 66 Bytes
Yowza!
Eine monadische Verknüpfung, die eine transponierte Version als Liste von Listen ergibt (zum Zurücktransponieren
Z
am Ende hinzufügen ).Probieren Sie es online! Oder sehen Sie sich die Testsuite an (mit hübscher gedruckter Ausgabe).
quelle
Netzhaut , 203 Bytes
Probieren Sie es online! Link enthält Testfälle. Alternative Lösung, auch 203 Bytes:
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Behandeln Sie zuerst den ungeschickten Fall des
y
Befehls. Leider darf der Brief danach einy
oder sogar ein seinz
, deshalb müssen wir hier vorsichtig sein. Alle magischeny
s werden zuerst in#
s verwandelt .Eine Schleife verarbeitet dann das
#
s. Zunächst wird a dem0
vorangestellt#
. Wenn dies ein#0
ist, wird das geändert,000
wodurch die Operation abgeschlossen wird, andernfalls wird das Zeichen nach dem#
dekrementiert und die Schleife wiederholt, bis alle#
s verarbeitet wurden.Repariere das
w
s undx
s.In neuen Zeilen teilen. (Funktioniert
S`z
auch für die gleiche Byteanzahl.)Erstellen Sie 5 Kopien jeder Zeile, und führen Sie dann eine Binärkonvertierung durch, indem Sie Buchstaben mit dem entsprechenden Bit zuordnen
#
und dieses Bit löschen, während andere Buchstaben zu Leerzeichen werden. Die Bits werden in der Reihenfolge 16, 8, 4, 2 verarbeitet, und dann löscht die letzte Übersetzung das2
Bit und konvertiert das1
Bit gleichzeitig. (In der alternativen Version wird jede Kopie einzeln erstellt, was mehr Bytes kostet. Diese werden jedoch gespeichert, da die Bitverarbeitung vereinfacht wird.)Füllen Sie alle Zeilen auf die gleiche Länge auf.
quelle
Python 2 ,
249244 BytesProbieren Sie es online!
5 Bytes von Jonathan Frech gespeichert .
quelle
while 'y'in
. Ich denke, der Index[-5:][::-1]
kann zu Golf gespielt werden[:-6:-1]
. Die return-Anweisung kann in die vorherige Zeile gestellt werden.JavaScript (ES8), 192 Byte
Gibt die Transponierte zurück, die dann über die vertikale Achse gespiegelt wird. Lassen Sie mich wissen, wenn dieser Eintrag ungültig ist. Die Ausgabe ist ein Array von Zeichenfolgen, die
0
s und1
s enthalten.Probieren Sie es online!
Erläuterung
Für jedes Zeichen
c
,k+1
auswertet , um die Anzahl der Zeilen zu ändern.k = "wxy".search(c) + 1;
, wobei diesearch
Methode den Index zurückgibt oder-1
.k
wird dann dekrementiert, bis es erreicht ist,-1
indem~k--
nach einem wahrheitsgemäßen Wert gesucht wird.Wenn das aktuelle Zeichen "y" ist, setzen Sie ein Flag, sodass der Basis-36-Wert des nächsten Zeichens - 1 zum Wert für wird
k
.Wenn Sie auf ein "z" stoßen, drücken Sie die Pad-Zeichenfolge nach links, erhöhen Sie den Pad-Wert um
5
und setzen Sie den Array-Index auf zurück0
.quelle
Haskell, 399 Bytes
split
Paket installieren :cabal install split
quelle