Braille-ify a string


22

และไม่มีนี้ไม่ได้เป็นของล่อแปลข้อความ ASCII เป็นอักษรเบรลล์

มีรูปแบบอักษรเบรลล์ 2 8 = 256 ใน Unicode (โดย 'Braille' ฉันหมายถึงเซลล์ 8 เซลล์)

รอก่อน มีกี่ตัวอักษร ASCII?

2 7 = 128?

ถ้างั้นลองเปลี่ยน ASCII เป็นอักษรเบรลล์เพราะไม่มีเหตุผลอะไรที่จะไม่ทำ!


ทางจาก ASCII ไปจนถึงอักษรเบรลล์

เราสามารถเห็นแต่ละเซลล์แสดงถึงบิตซึ่งแต่ละเซลล์นั้น 'เจาะ' หรือไม่

ตอนนี้เราสามารถจัดสรรแต่ละเซลล์เพื่อแสดงบิตของอักขระ ASCII เป็นไบนารี

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

* ( - )ว่างเปล่า

ตอนนี้เราสามารถแปลง ASCII เป็น Braille ยกตัวอย่างเช่น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
Erik the Outgolfer

@EriktheOutgolfer ฉันไม่ได้แนะนำ แต่ก็ผิดทั้งสองวิธีเนื่องจากมีจำนวนเซลล์ที่เจาะผิด
Neil

@ Neil โอ้ดี ฉันเพิ่งคำนวณใหม่และพบว่าคุณพูดถูก
Matthew Roh

รู้สึกแปลก ๆ กับคนอื่นหรือไม่ที่ LSB (ขวาล่าง) ไม่ได้ใช้แทนที่จะเป็น MSB (ซ้ายบน)
Julian Wolf

คำตอบ:


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เคล็ดลับฉลาดด้วย
Erik the Outgolfer

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 ก่อนที่จะเอาอันนั้นมาและบันทึกไบต์ด้วย
Martin Ender

อาจใช้ jQuery ในทางที่ผิดได้ไหม
Matthew Roh


5

CJam , 27 ไบต์

1 ไบต์ถูกขโมยจาก Neil

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 Bytes

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]

+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-`⠀-⡿

ลองออนไลน์! การถ่ายโอนข้อมูล Hex:

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/bB/b/H

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.