Брайлів - якщо рядок


22

І ні, це не є перекладом тексту перекладу ASCII на шрифт шрифтом .

У Unicode є 2 8 = 256 моделей Брайля . (Під «Брайлем» я маю на увазі восьмиклітинні)

Ш, чекай. Скільки символів ASCII було там?

2 7 = 128?

Ну тоді давайте перетворимо ASCII на шрифт Брайля, тому що абсолютно немає причин цього не робити!


Шлях від ASCII, до Брайля

Ми можемо бачити, що кожна клітина являє собою трохи, яку кожну клітинку "пробиває" чи ні.

Тепер ми можемо виділити кожну клітинку, щоб представити біти символу ASCII як двійкові.

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

* ( - )порожнє

Тепер ми можемо перетворити ASCII на шрифт Брайля. Наприклад, A(65 = 01000001) дорівнює .

Приклади

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

Звичайно , aце НЕ (я думаю , що це q)?
Neil

@Neil Завдання полягає не лише в "конвертації char-кодів + 10240 в символи". І так, aє .
Ерік Аутгольфер

@EriktheOutgolfer Я не припускав, що це було, але був би помилявся в будь-якому випадку, оскільки він має неправильну кількість перфорованих комірок.
Ніл

@Neil О, приємно. Я просто перерахував і дізнався, що ти маєш рацію.
Меттью Ро

Чи дивно комусь, що LSB (праворуч знизу) залишається невикористаним, а не MSB (угорі ліворуч)?
Джуліан Вольф

Відповіді:


14

CJam , 27 26 байт

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

Спробуйте в Інтернеті!

Пояснення

Кодові точки Брайля акуратно впорядковані так, що окремі точки підраховуються у двійковій формі. Однак впорядкованість бітів у кодових точках різна. Ми хочемо наступного порядку:

04
15
26
37

Тоді як символи викладаються в Unicode в такому порядку:

03
14
25
67

(Що має сенс, оскільки історично Брайль використовував лише перші шість крапок.) Зауважте, що 7крапка нам не потрібна , оскільки вхід гарантовано знаходиться в діапазоні ASCII. Отже, задавши список бітів [6 5 4 3 2 1 0]вхідного символу, ми хочемо змінити їх порядок [3 6 5 4 2 1 0], щоб витягнути біт, що представляє нижню ліву крапку, до найбільш значущої позиції.

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
Розумний трюк з 80.
Ерік Аутгольфер

11

JavaScript (ES6), 83 байти

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>


О так, я, мабуть, я повинен поділити на 2, перш ніж приймати І, щоб також зберегти байт.
Мартін Ендер

Можливо, можна зловживати jQuery?
Меттью Ро


5

CJam , 27 байт

1 байт, викрадений у Ніла.

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

Спробуйте в Інтернеті!

Пояснення

Це використовує ту саму основну ідею, що й інша моя відповідь CJam, але використовує побітну арифметику замість перетворення бази та маніпуляції зі списком для впорядкування бітів.

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 байт

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

Безголівки:

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

+60 байт цього зв’язаного у довгих іменах функцій.


1

Желе , 21 байт

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

Спробуйте в Інтернеті!

Як це працює

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

Сітківка , 59 байт

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

Спробуйте в Інтернеті! Шістнадцятковий дамп:

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

Чіп ,62 59 байт

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

Спробуйте в Інтернеті!

Я підозрюю, що можу пограти більше, тільки треба зрозуміти як ...

Чіп читає в кожному байті введення як сукупність бітів, на які посилаються перші вісім літер алфавіту (великі регістри вводяться, нижчі - вихідні):

HGFEDCBA

Нам просто потрібно зіставити ці біти вхідних даних на наступні три байти виводу:

11100010 101000hd 10gfecba

Верхня половина коду виконує всі послідовності і генерує перші два байти, нижня половина генерує третій байт.

Оскільки специфікація вимагає обробки лише 7 біт для ASCII, ми не розглядаємо H. Щоб включити восьмий біт, змініть рядок B/bна B/b/H.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.