점 자식으로 줄을 바꾸세요


22

그리고 아니오, 이것은 ASCII 텍스트를 점자번역 하는 것이 아닙니다 .

유니 코드 에는 2 8 = 256 점자 패턴 이 있습니다. ( '점자'는 8 셀을 의미합니다)

W, 기다려 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 도전은 단지 "문자 코드 + 10240을 문자로 변환"하는 것이 아닙니다. 그리고 네, a있습니다 .
Outgolfer Erik

@EriktheOutgolfer 나는 그것이 틀린 펀치 셀 수를 가지고 있기 때문에 그것이 아니라고 제안했지만 어느 쪽이든 잘못되었을 것입니다.
Neil

@ 닐 오 좋은. 방금 재 계산하고 당신이 옳다는 것을 알았습니다.
Matthew Roh

MSB (왼쪽 위)가 아니라 LSB (오른쪽 아래)가 사용되지 않은 상태로 남는 것이 이상하다고 생각합니까?
Julian Wolf

답변:


14

CJam , 27 26 바이트

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

온라인으로 사용해보십시오!

설명

점자 코드 포인트는 깔끔하게 정렬되어 개별 도트가 이진수로 계산됩니다. 그러나 코드 포인트의 비트 순서는 다릅니다. 다음 순서를 원합니다.

04
15
26
37

문자는 다음 순서로 유니 코드로 배치됩니다.

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

1
와 영리한 트릭 80.
Outgolfer Erik

11

자바 스크립트 (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>


예, 바이트를 저장하기 위해 AND를 취하기 전에 2로 나눕니다.
Martin Ender

아마도 jQuery 남용을 사용할 수 있습니까?
Matthew Roh


5

CJam , 27 바이트

Neil에서 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

온라인으로 사용해보십시오!

골프를 더 잘할 수있을 것 같아요.

알파벳은 입력의 각 바이트에서 알파벳의 처음 8 글자가 참조하는 비트 모음으로 읽습니다 (대문자 입력, 낮은 출력).

HGFEDCBA

입력 비트를 다음 3 바이트 출력에 매핑하면됩니다.

11100010 101000hd 10gfecba

코드의 상위 절반은 모든 시퀀싱을 수행하며 처음 두 바이트를 생성하고 하단 절반은 세 번째 바이트를 생성합니다.

사양에는 ASCII에 대해 7 비트 만 처리하면되므로 검사하지 않습니다 H. 여덟 번째 비트를 포함 시키려면 행 B/b을로 변경하십시오 B/b/H.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.