ถอดรหัสอักษรเบรลล์มารยาท


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

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

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

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

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

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

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

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

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

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

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

เวอร์ชัน ASCII ของด้านบน

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

เกี่ยวกับอักษรเบรลล์

อักขระอักษรเบรลล์บรรจุจุดสี่เหลี่ยมขนาด 4 x 2 ซึ่งสามารถดูเป็นเมทริกซ์บูลีนได้

การรวมกันของเมทริกซ์ทั้งหมดคือเมทริกบูลีนขนาด 4 คูณ 2 * n โดยที่ n คือความยาวของสตริงอินพุต

คุณควรมองหาเส้นแนวตั้งโดยไม่มีจุดใด ๆ ในนั้นและใช้สิ่งเหล่านั้นเป็นตัวคั่นเพื่อแยกเมทริกซ์ขนาดใหญ่ออกเป็นเมทริกซ์ขนาดเล็กสำหรับตัวละครแต่ละตัว

จากนั้นค้นหารูปแบบการแปลงเป็นตัวอักษรของตัวอักษรภาษาอังกฤษหรือช่องว่าง โปรดทราบว่าหลังจากลบตัวคั่น (บรรทัดว่างแนวตั้ง) ช่องว่างคือเมทริกซ์ 4 คูณ 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
----+-----+----+-----+----+----+-----+-----+---+----+------+----+-------+------+-----+-----+------+-----+-----+-----+-----+-----+-------+-----+-----+----
.#. | ##. | .# | ##. | ## | ## | .## | #.# | # | .# | #.#. | #. | #...# | #..# | .#. | ##. | .##. | ##. | .## | ### | #.# | #.# | #...# | #.# | #.# | ###
#.# | ### | #. | #.# | ## | #. | #.. | #.# | # | .# | ##.. | #. | ##.## | ##.# | #.# | #.# | #..# | #.# | #.. | .#. | #.# | #.# | #.#.# | .#. | #.# | ..#
### | #.# | #. | #.# | #. | ## | #.# | ### | # | .# | #.#. | #. | #.#.# | #.## | #.# | ##. | #.## | ##. | .## | .#. | #.# | #.# | #.#.# | .#. | .#. | .#.
#.# | ### | .# | ### | ## | #. | .## | #.# | # | #. | #..# | ## | #...# | #..# | .#. | #.. | .### | #.# | ##. | .#. | ### | .#. | .#.#. | #.# | .#. | ###

สเปค

  • อินพุตเป็นลำดับของจุดโค้ด Unicode ในช่วง U + 2800 .. U + 28FF แสดงเป็นชนิดสตริงปกติในภาษาของคุณ (เช่นอาร์เรย์อักขระตัวชี้ถ่าน) ในการเข้ารหัสที่ได้รับความนิยม (UTF-8, UCS-2 ฯลฯ )

  • ช่องว่างต่อท้ายในผลลัพธ์ได้ดี


แก้ไข:ขอโทษผู้ที่เบราว์เซอร์เข้าใจผิดจุดมันควรจะมีลักษณะเช่นนี้ (ภาพ): มารยาทอักษรเบรลล์


5
งานของคุณคือการถอดรหัสข้อความเช่นนี้ / ตัวอักษรสูงสี่จุดและความกว้างของตัวแปร / หนึ่งบรรทัดแนวตั้งที่ว่างแยกตัวอักษร / ช่องว่างเป็นศูนย์กว้าง / ดังนั้นดูเหมือนว่าคำที่คั่นด้วยสองบรรทัด / อินพุตเป็นสตริงที่มีอักษรเบรลล์มารยาท ของ / ตัวอักษรตัวพิมพ์ใหญ่และช่องว่าง / ABCDEFGHIJKLMNOPQRSTUVWXYZ / เอาต์พุตภาษาอังกฤษอาจจะบนหรือตัวพิมพ์เล็ก / ชนะที่สั้นที่สุด / ไม่มีช่องโหว่ / เกี่ยวข้อง
NGN

คำตอบ:


14

Python 3 , 181 179 171 167 161 159 ไบต์

อินพุตโดย UTF-16 ไบต์แบบ Little Endian ที่ไม่มี BOM ขั้นแรกให้ย่อยเป็นคอลัมน์โดยใช้การเลื่อนบิตแยกตามคอลัมน์ที่ว่างแล้วแฮชเข้าไปในตารางการค้นหา

-2 ไบต์ขอบคุณที่NGN
-5 ไบต์ขอบคุณที่นาย 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('@'))

ลองออนไลน์!


หลามจะไม่บ่นถ้าคุณลบช่องว่างระหว่าง39และif; มันจะยิ่งสั้นลงถ้าคุณแทนที่ if-else ด้วย and-or trick
ngn

175 ไบต์โดยแทนที่i and int(i,27)%15472%39or 0ด้วยint(i or'0')%15472%39--- ลองออนไลน์!
นาย Xcoder

และ 174 ไบต์โดยกำหนดให้''.joinกับตัวแปร --- ลองออนไลน์!
Mr. Xcoder

11

JavaScript (ES6), 148 146 143 ไบต์

บันทึกแล้ว 1 ไบต์ขอบคุณ @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

กรณีทดสอบ


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 ขอบคุณ :) ผสานรวมกับการเพิ่มประสิทธิภาพที่รอดำเนินการอีกครั้ง
Arnauld

ฉันขอถามได้x%854%89%35มั้ย คุณลองใช้โหมดสุ่มแบบต่างๆมากมายหรือไม่?
ngn

@ngn ฉันลองm0 <1,000 , 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.