Giải mã chữ nổi Faux


21
⢣⠃⢎⠆⣇⡇⡯⡂⠈⡏⢰⢵⢐⡭⢸⠪⡀⢸⢐⡭⠀⢹⠁⢎⠆⢸⣱⢸⡃⢎⠰⡱⢸⣱⢸⡃⠈⡏⢸⡃⡱⡁⢹⠁⢸⡀⡇⡗⢅⢸⡃⠈⡏⢸⢼⢸⢐⡭⠀

⣇⢸⡃⢹⠁⢹⠁⣟⢸⢕⢐⡭⠀⡮⡆⡯⡂⣟⠀⡯⠰⡱⢸⣸⢸⢕⠀⣏⡆⢎⠆⢹⠁⣪⠅⢸⢼⢸⠰⣩⢸⢼⠀⡮⡆⡗⢼⢸⣱⠀⢎⠆⡯⠀⢇⠇⡮⡆⡯⡂⡇⡮⡆⣟⡆⣇⢸⡃⠸⡰⡸⢸⢸⣱⠈⡏⢸⢼⠀

⢎⠆⡗⢼⢸⡃⢸⡃⡗⠔⡇⡯⠂⢹⠁⢣⠃⠸⡸⢸⡃⡯⡂⢹⠁⡇⢎⢰⢵⢸⡀⢸⡀⡇⡗⢼⢸⡃⢐⡭⢸⡃⡯⠂⡮⡆⡯⡂⡮⡆⢹⠁⣟⢐⡭⠀⢎⢸⢼⢰⢵⢸⢕⢰⢵⠰⡁⢹⠁⣟⢸⢕⢐⡭⠀

⡮⡆⢐⡭⢸⠕⢰⢵⠰⡁⣟⠀⡇⣪⠅⢈⣝⢸⡃⡯⡂⢎⠆⠸⡰⡸⢸⢸⣱⠈⡏⢸⢼⠀

⣪⠅⢎⠆⢸⠈⡏⠀⣇⠰⡱⠰⡱⢸⠪⡀⣪⠅⢸⡀⡇⡗⢅⢸⡃⠸⡰⡸⠰⡱⢸⢕⢸⣱⢐⡭⠀⡮⡆⡯⡂⣟⠀⣪⠅⣟⢸⠕⢰⢵⢸⢕⢰⢵⠈⡏⢸⡃⣏⡆⢸⣳⠘⡜⠀⢹⠁⢇⢆⠇⢎⠆⢸⡀⡇⡗⢼⢸⡃⣪⠅

⡇⡗⢼⢸⠕⢸⣸⠈⡏⠀⡇⣪⠅⢰⢵⠀⣪⠅⢹⠁⡯⡂⡇⡗⢼⠰⣩⠀⢎⠰⡱⢸⠢⡇⢹⠁⡮⡆⡇⡗⢼⢸⢸⠢⡇⢎⡅⢸⠅⡮⡆⣇⡇⡱⡁⢸⣳⢸⢕⢰⢵⢸⢸⡀⣇⢸⡃⠰⡱⢸⠅

⢎⠆⡗⢼⢸⡀⢣⠃⢸⡃⡗⢼⠰⣩⢸⡀⡇⣪⠅⡧⡇⢸⣸⢸⠕⢸⠕⢸⡃⡯⡂⢎⢰⢵⢐⡭⢸⡃⢸⡀⣟⠈⡏⠈⡏⢸⡃⡯⡂⣪⠅⢰⢵⢸⠢⡇⣏⡆⢐⡭⢸⠕⢰⢵⠰⡁⣟⢐⡭⠀

⡮⡆⣟⡆⢎⢸⣱⢸⡃⡯⠰⣩⢸⢼⢸⢀⠇⡗⢅⢸⡀⡗⠔⡇⡗⢼⠰⡱⢸⠕⠰⣩⡆⡯⡂⣪⠅⢹⠁⣇⡇⢇⠇⢇⢆⠇⡱⡁⢣⠃⣩⡃

⢎⠆⣇⡇⢹⠁⡯⠂⣇⡇⢹⠁⢸⠢⢺⢰⢵⠘⡜⠀⣟⡆⣟⠀⣇⡇⡯⠂⡯⠂⣟⢸⢕⠀⢎⠆⡯⡂⢸⡀⢎⠆⢇⢆⠇⣟⢸⢕⠰⡁⡮⡆⣪⠅⣟⠀

⣪⠅⡧⡇⢎⠆⡯⡂⢹⠁⣟⢐⡭⠈⡏⠀⢇⢆⠇⡇⡗⢼⢐⡭⠀

⡗⢼⠰⡱⠀⣇⠰⡱⠰⡱⢸⠕⢸⢼⠰⡱⢸⡀⣟⢐⡭⠀

Phiên bản ASCII ở trên

⡯⡂⣟⢸⡀⡮⡆⢹⠁⣟⢸⣱⠀

Về ký tự chữ nổi

Một ký tự chữ nổi đóng gói một hình chữ nhật 4 x 2 chấm, có thể được xem như một ma trận Boolean.

Phép nối của tất cả các ma trận như vậy là ma trận boolean 4 x 2 * n, trong đó n là độ dài của chuỗi đầu vào.

Bạn nên tìm các đường thẳng đứng mà không có bất kỳ dấu chấm nào trong chúng và sử dụng chúng làm dấu phân cách để chia ma trận lớn thành các ma trận nhỏ hơn cho mỗi ký tự.

Sau đó, tìm kiếm các mẫu để chuyển đổi chúng thành các chữ cái của bảng chữ cái tiếng Anh hoặc dấu cách. Lưu ý rằng sau khi xóa các dấu phân cách (các dòng trống dọc), một khoảng trắng là ma trận 4 x 0.

Dưới đây là một mô tả của bảng chữ cái trong ASCII:

A   | B   | C  | D   | E  | F  | G   | H   | I | J  | K    | L  | M     | N    | O   | P   | Q    | R   | S   | T   | U   | V   | W     | X   | Y   | Z
----+-----+----+-----+----+----+-----+-----+---+----+------+----+-------+------+-----+-----+------+-----+-----+-----+-----+-----+-------+-----+-----+----
.#. | ##. | .# | ##. | ## | ## | .## | #.# | # | .# | #.#. | #. | #...# | #..# | .#. | ##. | .##. | ##. | .## | ### | #.# | #.# | #...# | #.# | #.# | ###
#.# | ### | #. | #.# | ## | #. | #.. | #.# | # | .# | ##.. | #. | ##.## | ##.# | #.# | #.# | #..# | #.# | #.. | .#. | #.# | #.# | #.#.# | .#. | #.# | ..#
### | #.# | #. | #.# | #. | ## | #.# | ### | # | .# | #.#. | #. | #.#.# | #.## | #.# | ##. | #.## | ##. | .## | .#. | #.# | #.# | #.#.# | .#. | .#. | .#.
#.# | ### | .# | ### | ## | #. | .## | #.# | # | #. | #..# | ## | #...# | #..# | .#. | #.. | .### | #.# | ##. | .#. | ### | .#. | .#.#. | #.# | .#. | ###

Đặc điểm kỹ thuật

  • Đầu vào là một chuỗi các điểm mã Unicode trong phạm vi U + 2800..U + 28FF được biểu thị dưới dạng loại chuỗi thông thường trong ngôn ngữ của bạn (ví dụ: mảng char, con trỏ char) trong bất kỳ mã hóa phổ biến nào được hỗ trợ (UTF-8, UCS-2 , v.v.)

  • Không gian lưu trữ trong đầu ra là tốt.


EDIT: xin lỗi những người có trình duyệt xử lý sai các dấu chấm, nó được cho là trông như thế này (hình ảnh): giả-chữ nổi


5
Nhiệm vụ của bạn là giải mã văn bản như thế này / các chữ cái cao bốn chấm và có chiều rộng thay đổi / một dòng dọc trống ngăn cách các ký tự / một khoảng trắng bằng 0 / vì vậy có vẻ như các từ được phân tách bằng hai dòng / đầu vào là một chuỗi chứa chữ nổi giả của / chỉ chữ cái viết hoa và dấu cách / abcdefghijklmnopqrstuvwxyz / đầu ra có thể là chữ hoa hoặc chữ thường / chiến thắng ngắn nhất / không có sơ hở / liên quan
ngn

Câu trả lời:


14

Python 3 , 181 179 171 167 161 159 byte

Nhập vào bởi các byte cuối UTF-16 không có BOM. Đầu tiên phân tách thành các cột bằng cách sử dụng dịch chuyển bit, phân tách bằng cột trống, sau đó băm chúng vào bảng tra cứu.

-2 byte nhờ ngn .
-5 byte nhờ ông Xcoder .

lambda h,j=''.join:j(' ZAQV;JWP;MBOS;YRKCGXDF;ILHUENT'[int('0'+i,27)%544%135%32]for i in j(chr(64|i&7|i>>3&8)+chr(64|i>>3&7|i>>4&8)for i in h[::2]).split('@'))

Hãy thử trực tuyến!


python sẽ không phàn nàn nếu bạn xóa khoảng cách giữa 39if; nó thậm chí còn ngắn hơn nếu bạn thay thế if-
other

175 byte bằng cách thay thế i and int(i,27)%15472%39or 0bằng int(i or'0')%15472%39--- Hãy thử trực tuyến!
Ông Xcoder

Và 174 byte bằng cách gán ''.joincho một biến --- Hãy thử trực tuyến!
Ông Xcoder

11

JavaScript (ES6), 148 146 143 byte

Đã lưu 1 byte nhờ @ngn

s=>[...s].map(c=>g((k=c.charCodeAt()/8)&8|k*8&7)&g(k&7|k/2&8),o=x='',g=n=>x=n?x*27+n:(o+=' DZQGYWXNHJ.CSTIO.AFB.LPVE..KUMR'[x%854%89%35],n))&&o

Các trường hợp thử nghiệm


g((k=c.charCodeAt())&7|k/8&8)&g(k/8&7|k/16&8)->g((k=c.charCodeAt()/8)&8|k*8&7)&g(k&7|k/2&8)
ngn

@ngn Cảm ơn :) Kết hợp với một tối ưu hóa đang chờ xử lý khác.
Arnauld

Tôi có thể hỏi, làm thế nào bạn đến với rực rỡ x%854%89%35? Bạn đã thử nhiều mô-đun ngẫu nhiên khác nhau?
ngn

@ngn Tôi đã thử m0 <1000 , m1 <m0 , m2 <m1 (thực ra với một số tối ưu hóa khác, nhưng đó là ý tưởng). Và đối với hệ số mà x được nhân: [4,6,8,9,10,11,12][15 ... 31] . Hiện đang thử một số phương pháp khác.
Arnauld

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.