CJam、27 26バイト
80qf{i2b7Te[4/~\)\@+++2bc}
オンラインでお試しください!
説明
点字コードポイントはきちんと順序付けられているため、個々のドットはバイナリでカウントアップされます。ただし、コードポイントのビットの順序は異なります。次の順序が必要です。
04
15
26
37
一方、文字は次の順序でUnicodeでレイアウトされます。
03
14
25
67
(歴史的に、点字は最初の6つのドットしか使用していなかったため、どのような意味がありますか。)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.
}%
a
に⠱
、ではない⠹
(私はそう思うq
)?