Decode Faux Braille


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

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

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

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

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

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

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

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

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

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

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

Yukarıdakilerin ASCII versiyonu

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

Braille karakterleri hakkında

Bir Braille karakteri, bir Bool matrisi olarak görülebilen 4'e 2 noktalı bir dikdörtgen içerir.

Tüm bu matrislerin bir araya getirilmesi, 4 x 2 x n boolean matrisdir, burada n, giriş dizesinin uzunluğudur.

İçlerinde herhangi bir nokta bulunmayan dikey çizgiler aramalı ve büyük matrisi her karakter için daha küçük matrislere bölmek için bunları ayırıcı olarak kullanmalısınız.

Ardından, onları İngilizce alfabenin harflerine veya boşluklara dönüştürmek için kalıp arayın. Ayırıcıları (dikey boş çizgiler) çıkardıktan sonra, boşluğun 4'e 0 matris olduğunu unutmayın.

ASCII'deki alfabenin açıklaması aşağıdadır:

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
----+-----+----+-----+----+----+-----+-----+---+----+------+----+-------+------+-----+-----+------+-----+-----+-----+-----+-----+-------+-----+-----+----
.#. | ##. | .# | ##. | ## | ## | .## | #.# | # | .# | #.#. | #. | #...# | #..# | .#. | ##. | .##. | ##. | .## | ### | #.# | #.# | #...# | #.# | #.# | ###
#.# | ### | #. | #.# | ## | #. | #.. | #.# | # | .# | ##.. | #. | ##.## | ##.# | #.# | #.# | #..# | #.# | #.. | .#. | #.# | #.# | #.#.# | .#. | #.# | ..#
### | #.# | #. | #.# | #. | ## | #.# | ### | # | .# | #.#. | #. | #.#.# | #.## | #.# | ##. | #.## | ##. | .## | .#. | #.# | #.# | #.#.# | .#. | .#. | .#.
#.# | ### | .# | ### | ## | #. | .## | #.# | # | #. | #..# | ## | #...# | #..# | .#. | #.. | .### | #.# | ##. | .#. | ### | .#. | .#.#. | #.# | .#. | ###

Şartname

  • Giriş, desteklenen herhangi bir popüler kodlamada (UTF-8, UCS-2) dilinizde olağan dize türü olarak gösterilen U + 2800..U + 28FF aralığında bir Unicode kod noktaları dizisidir. , vb).

  • Çıktıdaki takip boşlukları iyi.


EDIT: tarayıcıları noktaları yanlış yapanlardan özür diler, şöyle görünmesi gerekiyor (resim): sahte braille


5
senin görevin, bunun gibi metinleri çözmek / harfler dört nokta yüksekliğinde ve değişken genişlikte / bir boş dikey çizgi karakterleri ayırır / boşluk sıfır genişliktedir / bu yüzden kelimelerin iki satırla ayrılmış gibi görünüyor / giriş sahte braille içeren bir dizedir / sadece ingilizce büyük harfler ve boşluklar / abcdefghijklmnopqrstuvwxyz / çıktı büyük / küçük harf olabilir / en kısa kazançlar / boşluklar yok / ilgili
ngn

Yanıtlar:


14

Python 3 , 181 179 171 167 161 159 bayt

Malzeme Listesi olmadan UTF-16 küçük-endian bayt girişi. Öncelikle bit vardiyalarını kullanarak sütunlara ayrıştırın, boş sütuna bölün ve ardından bunları bir arama tablosuna yerleştirin.

Ngn sayesinde -2 bayt . Bay Xcoder
sayesinde -5 bayt .

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

Çevrimiçi deneyin!


39ve arasındaki boşluğu kaldırırsanız python şikayet etmez if; if-else yerine and-veya trick ile değiştirirseniz daha kısa
ngn

Değiştirerek 175 bayt i and int(i,27)%15472%39or 0ile int(i or'0')%15472%39--- Online deneyin!
Bay Xcoder

Ve ''.joinbir değişkene atayarak 174 bayt --- Çevrimiçi deneyin!
Bay Xcoder

11

JavaScript (ES6), 148 146 143 bayt

@Ngn sayesinde 1 bayt kaydedildi

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

Test durumları


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 :) Başka bir bekleyen optimizasyon ile birleştirildi.
Arnauld

Sorabilir miyim, peki nasıl buldun peki x%854%89%35? Birçok farklı rasgele modül denediniz mi?
ngn

@ ngn m0 <1000 , m1 <m0 , m2 <m1 denedim (aslında bazı diğer optimizasyonlarla, ama bu fikir). Ve x'in çarpıldığı faktör için : [4,6,8,9,10,11,12] ve [15 ... 31] . Şu anda başka bazı yaklaşımlar deniyorum.
Arnauld

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.