가짜 점자 해독


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

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

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

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

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

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

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

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

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

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

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

위의 ASCII 버전

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

점자 문자

점자 문자는 부울 행렬로 볼 수있는 4 x 2 사각형의 점을 묶습니다.

이러한 모든 행렬의 연결은 4 x 2 * n 부울 행렬이며, 여기서 n은 입력 문자열의 길이입니다.

점이없는 세로선을 찾아 구분 기호로 사용하여 큰 행렬을 각 문자의 작은 행렬로 나눕니다.

그런 다음 패턴을 영어 알파벳 또는 공백 문자로 변환 할 패턴을 찾으십시오. 구분 기호 (수직 빈 줄)를 제거한 후 공백은 4 x 0 행렬입니다.

아래는 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
----+-----+----+-----+----+----+-----+-----+---+----+------+----+-------+------+-----+-----+------+-----+-----+-----+-----+-----+-------+-----+-----+----
.#. | ##. | .# | ##. | ## | ## | .## | #.# | # | .# | #.#. | #. | #...# | #..# | .#. | ##. | .##. | ##. | .## | ### | #.# | #.# | #...# | #.# | #.# | ###
#.# | ### | #. | #.# | ## | #. | #.. | #.# | # | .# | ##.. | #. | ##.## | ##.# | #.# | #.# | #..# | #.# | #.. | .#. | #.# | #.# | #.#.# | .#. | #.# | ..#
### | #.# | #. | #.# | #. | ## | #.# | ### | # | .# | #.#. | #. | #.#.# | #.## | #.# | ##. | #.## | ##. | .## | .#. | #.# | #.# | #.#.# | .#. | .#. | .#.
#.# | ### | .# | ### | ## | #. | .## | #.# | # | #. | #..# | ## | #...# | #..# | .#. | #.. | .### | #.# | ##. | .#. | ### | .#. | .#.#. | #.# | .#. | ###

사양

  • 입력은 U + 2800..U + 28FF 범위의 유니 코드 코드 포인트 시퀀스로, 일반적인 인코딩 유형 (예 : 문자 배열, 문자 포인터)으로 널리 사용되는 인코딩 (UTF-8, UCS-2) 등).

  • 출력의 후행 공백이 좋습니다.


편집 : 브라우저가 점을 잘못 제시 한 사람들에게 사과하며 다음과 같이 보입니다 (이미지). 가짜 점자


5
당신의 작업은 다음과 같은 텍스트를 해독하는 것입니다 / 문자는 4 개의 점이며 가변 너비 / 하나의 빈 세로 줄은 문자를 구분하고 공백은 0 너비입니다. 따라서 단어가 두 줄로 분리 된 것처럼 보입니다 / 입력은 가짜 점자를 포함하는 문자열입니다 / 대문자 영어와 공백 만 / abcdefghijklmnopqrstuvwxyz / 출력은 대문자 또는 소문자 / 최단 승 / 허점 없음 / 관련
ngn

답변:


14

파이썬 (3) , 181 (179) 171 167 161 159 바이트

BOM없이 UTF-16 리틀 엔디안 바이트로 입력합니다. 먼저 비트 시프트를 사용하여 열로 분해하고 빈 열로 분할 한 다음 조회 테이블로 해시합니다.

-2 감사는 바이트 NGN을 . Mr. Xcoder
덕분에 -5 바이트 .

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('@'))

온라인으로 사용해보십시오!


당신이 사이의 공간을 제거하면 파이썬은 불평하지 않습니다 39if; if-else를 and-or 트릭으로
바꾸면

대체하여 175 바이트 i and int(i,27)%15472%39or 0int(i or'0')%15472%39--- 온라인으로보십시오!
Mr. Xcoder

그리고 ''.join변수 에 할당 하여 174 바이트 --- 온라인으로 사용해보십시오!
Mr. Xcoder

11

자바 스크립트 (ES6) 148 146 143 바이트

@ngn 덕분에 1 바이트를 절약했습니다.

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

테스트 사례


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 Thanks :) 다른 보류중인 최적화와 병합되었습니다.
Arnauld

물어봐도 x%854%89%35될까요 , 어떻게 당신은 훌륭한 사람을 생각해 냈 습니까? 많은 다른 랜덤 모듈러스를 시도 했습니까?
ngn

@ngn m0 <1000 , m1 <m0 , m2 <m1 (실제로 다른 최적화와 함께 시도했지만 아이디어입니다). 그리고 x 가 곱해 지는 요인 : [4,6,8,9,10,11,12][15 ... 31] . 현재 다른 접근법을 시도하고 있습니다.
Arnauld

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.