Braille-ify bir dize


22

Ve hayır, Bu bir ASCII metnin Braille'e çevrilmesi değildir .

Unicode'da 2 8 = 256 Braille şablonu vardır. ('Braille' ile 8 hücreli olanları kastediyorum)

W, bekle. Kaç tane ASCII karakteri vardı?

2 7 = 128?

Öyleyse, ASCII'yi Braille'e çevirelim, çünkü yapmamak için hiçbir neden yok!


ASCII'den Braille'e giden yol

Her bir hücrenin bir biti temsil ettiğini görebiliriz, her hücrenin 'yumruklu' olup olmadığı.

Şimdi ASCII karakterinin bitlerini ikili olarak göstermek için her hücreyi tahsis edebiliriz.

(1  )(16 )
(2  )(32 )
(4  )(64 )
(8  )( - )

* ( - )boş

Şimdi ASCII'yi Braille'e dönüştürebiliriz. Örneğin, A(65 = 01000001) eşittir .

Örnekler

Input -> Output
Braille! -> ⠢⠺⠱⡱⡴⡴⠵⠑
(Upscaled)
.. .o o. o. .. .. o. o.
o. oo .o .o .o .o .o .o
.o .o .o .o oo oo oo ..
.. .. .. o. o. o. .. ..

Elbette aöyle değil (sanırım q)?
Neil

@Neil Mücadelesi sadece "+ 10240 karakterlerini karakter karakterlerine dönüştür" değil Ve evet, aöyle .
Outgolfer Erik

@EriktheOutgolfer Ben öyle bir şey demedim, ama yanlış delinmiş hücrelere sahip olduğu için her iki şekilde de yanlış olurdu.
Neil

@Neil Oh güzel. Sadece yeniden hesapladım ve haklı olduğunu öğrendim.
Matthew Roh

LSB'nin (sol altta) MSB (sol üstte) yerine kullanılmamış bırakılması başkasına garip geliyor mu?
Julian Wolf

Yanıtlar:


14

CJam , 27 26 bayt

80qf{i2b7Te[4/~\)\@+++2bc}

Çevrimiçi deneyin!

açıklama

Braille kod noktaları düzgün bir şekilde sıralanır, böylece bireysel noktalar ikili olarak sayılır. Ancak, kod noktalarındaki bitlerin sıralaması farklıdır. Aşağıdaki siparişi istiyoruz:

04
15
26
37

Unicode'da karakterler şu sırayla belirtilmişse:

03
14
25
67

(Tarihsel olarak Braille yalnızca ilk altı 7noktayı kullandığı için bu biraz mantıklıdır.) Girdiye ASCII aralığında olması garanti edildiğinden noktaya ihtiyacımız olmadığını unutmayın . [6 5 4 3 2 1 0]Bir giriş karakterinin bitlerinin bir listesi göz önüne alındığında [3 6 5 4 2 1 0], sol alt noktayı temsil eden biti en belirgin konuma çekmek için onları yeniden düzenlemek istiyoruz .

80     e# Push 80... we'll need this later.
q      e# Read all input.
f{     e# Map this block onto each character, putting a copy of the 80
       e# below each character.
  i    e#   Convert the character to its code point.
  2b   e#   Get its binary representation.
  7Te[ e#   Pad it to 7 bits with zeros. We've now got some bit list
       e#   [6 5 4 3 2 1 0].
  4/   e#   Split into chunks of 4: [[6 5 4 3] [2 1 0]]
  ~    e#   Dump them onto the stack: [6 5 4 3] [2 1 0]
  \    e#   Swap them: [2 1 0] [6 5 4 3]
  )    e#   Pull off the last element: [2 1 0] [6 5 4] 3
  \    e#   Swap: [2 1 0] 3 [6 5 4]
  @    e#   Rotate: 3 [6 5 4] [2 1 0]
  ++   e#   Concatenate twice: [3 6 5 4 2 1 0]
       e#   That's the reordering done.
  +    e#   Prepend the 80. That puts it in the 2^7 position of the
       e#   binary digit list, which gives it a value of 10240, which
       e#   is where the Braille characters start.
  2b   e#   Convert the bits back to an integer.
  c    e#   Convert the code point to the corresponding integer.
}%

1
Zekice bir numara 80.
Outgolfer Erik,

11

JavaScript (ES6), 83 bayt

f=
s=>s.replace(/./g,c=>String.fromCharCode((c=c.charCodeAt())&7|c*8&64|c/2&56|10240))
<input oninput=o.textContent=f(this.value)><pre id=o>


Evet, muhtemelen bir bayttan tasarruf etmek için VE almadan önce 2'ye bölmeliyim.
Martin Ender

Belki jQuery istismarı kullanılabilir?
Matthew Roh


5

CJam , 27 bayt

Neil'den 1 bayt çalındı.

q{i__8&8*@7&@2/56&++'⠀+}%

Çevrimiçi deneyin!

açıklama

Bu, diğer CJam cevabımla aynı temel fikri kullanıyor, ancak bitleri yeniden düzenlemek için temel dönüştürme ve liste manipülasyonu yerine bitsel aritmetik kullanır.

q        e# Read all input.
{        e# Map this block over each character...
  i__    e#   Convert the character to its code point and make two copies.
  8&     e#   AND 8. Gives the 4th bit, which we need to move to the 7th place.
  8*     e#   Multiply by 8 to move it up three places.
  @7&    e#   Pull up another copy and take it AND 7. This extracts the three
         e#   least significant bits which shouldn't be moved at all.
  @2/    e#   Pull up the last copy and divide by 2 to shift all bits down
         e#   by one place.
  56&    e#   AND 56. Extracts the three most-significant bits.
  ++     e#   Add all three components back together.
  '⠀+    e#   Add to the empty Braille character which is the offset for all
         e#   the code points and which converts the value to a character.
}%


2

Mathematica 100 Bayt

FromCharacterCode[10240+#~Drop~{4}~Prepend~#[[4]]~FromDigits~2&/@ToCharacterCode@#~IntegerDigits~2]&

Ungolfed:

ToCharacterCode["Braille!0"]
PadLeft@IntegerDigits[%,2]
Prepend[Drop[#,{4}],#[[4]]]&/@%
FromDigits[#,2]&/@%
FromCharacterCode[%+10240]

Bunun +60 baytı uzun işlev adlarına bağlanır.


1

Jöle , 21 bayt

O&€“¬®p‘æ.1,8,.+“'ṁ’Ọ

Çevrimiçi deneyin!

Nasıl çalışır

O&€“¬®p‘æ.1,8,.+“'ṁ’Ọ  Main link. Argument: s (string)

O                      Ordinal; map all characters to their Unicode code points.
   “¬®p‘               Yield the code points of the enclosed characters in Jelly's
                       code page, i.e., [1, 8, 112].
 &€                    Take the bitwise AND of each code point to the left and the
                       three code points to the right.
          1,8,.        Yield [1, 8, 0.5].
        æ.             Take the dot product of the array to the right and each flat
                       array in the array to the left.
                “'ṁ’   Yield 10240 = 250 × 39 + 239, where 39 and 239 are the
                       indices of ' and ṁ in Jelly's code page.
               +       Add 10240 to all integers to the left.
                    Ọ  Unordinal; convert all code points to their respective 
                       Unicode charcters.

0

Retina , 59 bayt

T`�-- -'0-7@-GP-W\`-gp-w--(-/8-?H-OX-_h-ox-`⠀-⡿

Çevrimiçi deneyin! Hex dökümü:

0000  54 60 00 2a 07 10 2a 17  20 2a 17 30 2a 17 40 2a  T`�-- -'0-7@-
0010  47 50 2a 57 5c 60 2a 67  70 2a 77 08 2a 0f 18 2a  GP-W\`-gp-w--
0020  1f 28 2a 2f 38 2a 3f 48  2a 4f 58 2a 5f 68 2a 6f  (-/8-?H-OX-_h-o
0030  78 2a 7f 60 e2 a0 80 2a  e2 a1 bf                 x-`⠀-⡿


0

Çip ,62 59 bayt

h*
 Z~.
z.g+b
>xv<
||sf
Zx^<
Z< |
A/a/D
B/b
C/c
E/d
F/e
G/f

Çevrimiçi deneyin!

Daha çok golf oynayabileceğimden şüpheleniyorum, sadece ...

Chip, girişin her bir baytında, alfabenin ilk sekiz harfinin (büyük harf giriş, alt çıkış) atıfta bulunduğu bir bit koleksiyonu olarak okur:

HGFEDCBA

Girdilerin bu bitlerini aşağıdaki üç baytlık çıktıyla eşleştirmeliyiz:

11100010 101000hd 10gfecba

Kodun üst yarısı tüm sıralamayı yapıyor ve ilk iki baytı, alt yarısı üçüncü baytı üretiyor.

Spesifikasyon sadece ASCII için 7 bit kullanılmasını gerektirdiğinden, incelemeyiz H. Sekizinci bit eklemek için satırı B/bdeğiştirin B/b/H.

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.