การแยกวิเคราะห์ข้อความที่เขียนตัวอักษร millitext


56

อ่านข้อความของฟอนต์ millitext

มีแบบอักษรที่นี่ที่เหมาะกับตัวละครแต่ละตัวในบล็อก 1x5 พิกเซลเดียว มันทำเช่นนี้ (สมมติว่าคุณกำลังใช้หน้าจอ LCD) โดยใช้ช่อง RGB ของแต่ละพิกเซลเพื่อขยายหนึ่งพิกเซลเป็นสามคอลัมน์ย่อยหนึ่งคอลัมน์สำหรับแต่ละช่อง งานของคุณคือใช้ข้อความที่เข้ารหัสในฟอนต์นี้และ 'ถอดรหัส' มัน

Millitext ตัวอักษร

CHARACTER: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ENCODING:  WYWBMRRMMMWYWYWWWMWBMRMYGYGYCWMMMMMW
           MGBWMRRMMMMMRMRRRMGBMRWMMMMMRGMMMMMB
           MGWWWWWBWWWYRMWWMWGBYRWMMYMYGGMMWGGG
           MGRBBBMBMBMMRMRRMMGBMRMMMRWMBGMCWMGR
           WWWWBWWBWWMYWYWRWMWWMWMMGRCMYGWBMMGW

ฉันได้ย่อแต่ละสีให้เป็นสัญลักษณ์หนึ่งตัว (R = แดง, G = เขียว, B = น้ำเงิน, C = ฟ้า, Y = เหลือง, M = ม่วงแดง, W = ขาว)

รูปแบบอินพุต

รูปแบบการป้อนข้อมูลสำหรับการเปิดค่อนข้างสวย คุณสามารถมีอินพุตเป็นอาร์เรย์ที่มีแต่ละคอลัมน์, อาร์เรย์ที่มีแต่ละแถวchar[][], หรืออะไรทำนองนั้น นอกจากนี้คุณยังสามารถเลือกใช้คำเต็ม "แดง", "เขียว", "สีน้ำเงิน" ด้วยตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็กที่คุณเลือก (แต่จะต้องสอดคล้องกันสำหรับแต่ละคำ! คุณไม่สามารถใช้ "RED" และยังทำ "สีเขียว" หรือ "น้ำเงิน")

หากภาษาของคุณให้การสนับสนุนคุณสามารถป้อนเป็นสีได้ (อย่างไรก็ตามอาจใช้งานได้ฉันไม่รู้มือข้างนอก)

คุณสามารถสันนิษฐานได้ว่าข้อมูลที่ป้อนจะมีเฉพาะอักขระที่เข้ารหัสในตัวอักษรด้านบน (โดยเฉพาะจะไม่มีการเว้นวรรคหรือเครื่องหมายวรรคตอนในผลลัพธ์ของคุณ)

รูปแบบผลลัพธ์

คุณสามารถส่งออกสตริงหรือเรียงลำดับของตัวละครบางอย่าง คุณสามารถเลือกได้ว่าตัวอักษรจะเป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก แต่ตัวอักษรทั้งหมดต้องมีตัวพิมพ์เล็กเหมือนกัน

ตัวอย่าง

MWRRGMGYRY
MRRRMMMMRM
WWRRMWMYRM -> HELLOWORLD
MRRRMWMMRM
MWWWGMGMWY

กฎระเบียบ

นี่คือคำตอบที่สั้นที่สุดชนะ!

ชุดทดสอบ

WMWGMWWMYYGMYWGMBMMYWYGMWYWMWRWWMYGW
GMRMMGRMMMMMMRMMBMWMRMMMRMGMRRMBMMMR
GWWMMGRYYYMWMWMGBMWYWMMMWYGWWRWGGMMM -> THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG
GMRWMGRMMMMWMRMMBMMRRMMCRMGMRRMRGMMM
GMWCWWWMYMGMMRGMWWMRWYGBWMGMWWMWGYGW

15
ฉันรู้สึกเหมือนคุณ hardcode ตัวอักษรทั้งหมดหรือใช้ Mathematica builtin ที่นี่
บางคน

7
ความท้าทายแรกที่ดี BTW!
Arnauld

6
นี่คือฟอนต์คงที่ (ตัวละครอื่น ๆ ผิด)
Arnauld

7
ผมไม่ทราบว่าถ้าคุณต้องการการทดสอบของคุณตั้งค่าที่จะรวมตัวอักษรทั้งหมดจากตัวอักษรภาษาอังกฤษหรือไม่ แต่ถ้าเป็นบุตรที่เรียกว่าแกรมและ "THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG" ไม่ได้เป็นหนึ่งในฐานะที่ขาดหายไป "S" ถ้าคุณอยากให้มันเป็น ไม่ว่าจะเป็น "THEQUICKBROWNFOXJUMPESOVERTHELAZYDOG"
MindSwipe

5
@JonofAllTrades JUMPS เป็นไปได้และคุณสามารถสูญเสียอักขระสองตัวโดยเปลี่ยนหนึ่งใน THEs สำหรับ A
Andrew Leach

คำตอบ:


16

JavaScript (ES6),  103 100 93 92  90 ไบต์

บันทึกแล้ว 9 ไบต์ขอบคุณ @ShieruAsakoto

รับอินพุตเป็นอาร์เรย์ของคอลัมน์ ส่งคืนอาร์เรย์ของอักขระ

a=>a.map(s=>"H-L-D--VGQ87MR6TZ-KJ9WC05BUXF1YI2EON3S-A-P4"[parseInt(s,35)%1161%219%152%43])

ลองออนไลน์!


1
@ShieruAsakoto ขอบคุณ! การคูณนั้นไม่ใช่ความคิดที่ดี ฉันบันทึกอีก 1 ไบต์ด้วย 3 mod's
Arnauld

1
นี่เป็นโมดูล่าขนาดใหญ่ที่นั่น ... บางทีคุณอาจปรับปรุงได้มากกว่านี้เพื่อที่-มันจะหายไป! : D
Erik the Outgolfer

หลังจากที่ตลอดทั้งคืนของแรงเดรัจฉานผมได้ 90 มี 4 a=>a.map(s=>"H-L-D--VGQ87MR6TZ-KJ9WC05BUXF1YI2EON3S-A-P4"[parseInt(s,35)%1161%219%152%43])วัยรุ่น:
Shieru Asakoto

@ShieruAsakoto น่าเสียดายที่ตัวอักษรที่อธิบายในการท้านั้นผิด รอการอัพเดทที่เป็นไปได้จาก OP
Arnauld

@Arnauld สำหรับคนที่แก้ไขแล้วความคืบหน้าของฉันตอนนี้คือ 93:a=>a.map(s=>"UIR-L68N--W-X7B-FH-D-EZ--902-S4M5GJCQT3PKV-A1-YO"[parseInt(s,35)%464%107%99%52])
Shieru Asakoto

9

เยลลี่ , 50 ไบต์

Oḅ⁹%211“ẎP\7ßɱðvs*Ḋ⁹UfRMJiẒVƑ).Z½Ƈ"}~ḌyH⁵Ŀ⁶Ṿ‘iⱮịØB

ลองออนไลน์!

ลิงก์ monadic ยอมรับอินพุตเป็นรายการของคอลัมน์และส่งออกสตริงวุ้นของการแปล คำอธิบายที่สมบูรณ์ที่ต้องติดตาม แต่ขึ้นอยู่กับข้อเท็จจริงที่ว่าแต่ละชุดที่เป็นไปได้ของตัวอักษร 5 ตัวนั้นไม่เหมือนกันเมื่อแปลงเป็นรหัสจุดแปลงกลับจากฐาน 256 เป็นทศนิยมแล้วปรับเปลี่ยน 211

ทางเลือกโดยใช้ฟอนต์คงที่ของ Arnauld (49 ไบต์และใช้หลักการเดียวกัน)

คำอธิบาย

O                   | Convert to code points
 ḅ⁹                 | Convert from base 256 to decimal
   %211             | Mod 211
       “Ẏ...Ṿ‘iⱮ    | Find indices in [209,80,92,55,21,162,24,118,115,42,193,137,85,102,82,77,74,105,189,86,146,41,46,90,10,144,34,125,126,173,121,72,133,199,134,186]
                ịØB | Index into 01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ

7

dzaima / APL, 80 79 73 72 71 ไบต์

' P  FL6BDEZQA SY574H TVOK J 08  M  U IC92XW 3G1RN'⊇⍨52|8965|2411⊥¨⎕ucs

ลองออนไลน์!


1
APL ของคุณมีคุณสมบัติพิเศษอะไรบ้าง?
Jonah

2
@Jonah นี่เท่านั้นสิ่งที่ใช้คือ(คล้ายกับ{⍵[⍺]}) นอกเหนือจากนั้นเหล่านี้สองไฟล์มีข้อมูลเกี่ยวกับเรื่องนี้
dzaima

6

05AB1E , 45 44 ไบต์

40ö98%•Wþ@»Ý¢a:µ@,–çòßuÒ¹₃©6µć‚FVÝ∊J?•2ôžLR‡

ลองออนไลน์!

รับอินพุตเป็นอาร์เรย์ของคอลัมน์และส่งออกอาร์เรย์ของอักขระ

คำอธิบาย:

40ö                       # convert each column from base 40
   98%                    # modulo 98
      •...•2ô             # compressed array: [20, 32, 82, 30, 27, 28, 76, 89, 46, 96, 36, 4, 18, 12, 80, 75, 50, 86, 42, 2, 52, 92, 48, 0, 84, 1, 88, 90, 10, 26, 70, 41, 94, 64, 14, 60]
             žLR          # built-in array 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
                ‡         # transliterate

6

R , 143 128 ไบต์

function(v)c(0:9,LETTERS)[match(colSums((sapply(v,U<-utf8ToInt)*194:198)%%45:41),U("#</Eb=,n9J.M4Z+%*V N[Hd\\B?1Oj>KgRYT2")+34)]

ลองออนไลน์!

ฟังก์ชั่นรับเวกเตอร์ของสตริง (สอดคล้องกับคอลัมน์) เป็นอินพุตเช่น:

MWRRG
MRRRM
WWRRM -> c('MMWMM','WRWRW','RRRRW','RRRRW','GMMMG') -> HELLO
MRRRM
MWWWG

คำอธิบาย:

ทำการดำเนินการต่อไปนี้สำหรับแต่ละสตริงที่เข้ารหัส (เช่น 'CRGBY' = 'S'):

        TO ASCII      MULTIPLICATION             MODULO              SUM &              TO
        CODEPOINT                                                    OFFSET             ASCII
---------------------------------------------------------------------------------------------

'C'        67        67 * 194 = 12998       12998 %% 45 = 38  \
'R'        82        82 * 195 = 15990       15990 %% 44 = 18  |
'G'  --->  71  --->  71 * 196 = 13916  ---> 13916 %% 43 = 27  |---> (140 - 34) = 106 ---> 'j'
'B'        66        66 * 197 = 13002       13002 %% 42 = 24  |
'Y'        89        89 * 198 = 17622       17622 %% 41 = 33  /

เราได้รับสตริงต่อไปที่ตัวละครแต่ละตัวที่สอดคล้องกับ'#</Eb=,n9J.M4Z+%*V N[Hd\B?1Oj>KgRYT2''0123456789ABCDEFGHIJKLMNOPQR'

ดังนั้นรหัสดำเนินการการดำเนินงานที่อธิบายไว้ในสายการป้อนข้อมูลแล้วค้นหาจดหมายของพวกเขาภายในได้รับตำแหน่งในสตริง'#</Eb=,n9J.M4Z+%*V N[Hd\B?1Oj>KgRYT2''0123456789ABCDEFGHIJKLMNOPQR'


สิ่งนี้ดูฉลาด แต่ไม่ชัดเจนว่าจะใช้รหัสอย่างไรฉันจะส่งสิ่งใดไปยังฟังก์ชันนี้ ทั้งรายการของเวกเตอร์อักขระและเวกเตอร์ธรรมดาล้มเหลวด้วย "อาร์กิวเมนต์ไม่สอดคล้อง" เมทริกซ์ของตัวละครก็เช่นกัน
Konrad Rudolph

@KonradRudolph: เพิ่มคำอธิบายเล็กน้อยของอินพุต (และเปลี่ยน TIO เพื่อให้ชัดเจนยิ่งขึ้น) ทันทีที่ฉันจะเพิ่มคำอธิบายของรหัสซึ่งฉันแน่ใจว่าสามารถปรับปรุงได้โดยการหาฟังก์ชั่น "hashing" อื่น ๆ สำหรับสตริงที่ส่งคืนค่าในช่วง ASCII แทนที่จะเป็น Unicode ...
digEmAll

@digEmAll ใช่ฉันได้เล่นกับ modding ลงตัวเลขไปช่วงที่เหมาะสมมากขึ้นของตัวละครที่แตกต่างกัน แต่ไม่มีอะไรเลย
จูเซปเป้

@digEmAll Ah ใช้งานได้ (ฉันมีข้อมูลเป็น col-Major มากกว่า row-Major) แต่ตัวอย่างของคุณให้ผลลัพธ์เป็น“ HEKKN” ไม่ใช่“ HELLO” ฉันสับสนมากว่ามันใช้งานได้กับ TIO ฉันเดาว่าการเข้ารหัส (ไม่ใช่ UTF-8) ที่แตกต่างกัน
Konrad Rudolph

1
@KonradRudolph: เพิ่มคำอธิบายสั้น ๆ (และพบรหัสที่สั้นกว่า);)
digEmAll

3

ถ่าน , 66 ไบต์

WS§”*&_⟲⎇4>υ≧Y⪪ml^π≕t.A;p↶⧴q⊗Hε‖r¡¡ºÞd⸿σC⁺⮌”﹪﹪﹪⍘ιWMYCBGR³⁶⁰¦¹¹³¦⁷¹

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด รับอินพุตเป็นรายการของคอลัมน์ที่ถูกยกเลิกด้วยบรรทัดว่าง คำอธิบาย:

WS

อินพุตสตริงจนกระทั่งมีค่าว่าง

§”*&_⟲⎇4>υ≧Y⪪ml^π≕t.A;p↶⧴q⊗Hε‖r¡¡ºÞd⸿σC⁺⮌”

จัดทำดัชนีลงในสายอักขระOV EX8HSCF5IA L TG 17 M P9RB 4 K ZY2 0JW 63Q ND Uซึ่งมีความยาวต่อท้าย 56 อักขระ

﹪﹪﹪⍘ιWMYCBGR³⁶⁰¦¹¹³¦⁷¹

ทำการแปลงฐาน 7 โดยใช้ตัวอักษรWMYCBGRจากนั้นลดโมดูโล 360 ต่อเนื่อง 113, 71, และ 56 อย่างต่อเนื่องผ่านการทำดัชนีแบบวนรอบ

ฐาน 7 ของฉันมีอาการไม่ดีด้วยตัวอักษรตายตัวของ @ Arnauld; หลังจากการค้นหาบางอย่างฉันยังอยู่ที่ 73 ไบต์ การใช้วิธีการของ @ Grimy ลดขนาดลงเหลือ 67 ไบต์ อย่างไรก็ตามในที่สุดฉันก็ติดตามโซลูชัน 66 ไบต์:

WS§”*&″ÀM↔↓<J;×⊟ςF,Gηe↖ητγ´WIY³﹪▶⟧9?δc⁶AxDê↷hPiψ”﹪﹪﹪⍘ι⁴⁷¦²³⁷¦⁷³¦⁶⁷

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย:

WS

อินพุตสตริงจนกระทั่งมีค่าว่าง

§”*&″ÀM↔↓<J;×⊟ςF,Gηe↖ητγ´WIY³﹪▶⟧9?δc⁶AxDê↷hPiψ”

จัดทำดัชนีลงในสตริงID HAM178 VS4F 3R EP6CQ Z UB O 0 X 9 G 5TNJKL2Y Wซึ่งมีความยาว 63 อักขระ

﹪﹪﹪⍘ι⁴⁷¦²³⁷¦⁷³¦⁶⁷

ทำการแปลงฐาน -47 โดยใช้ตัวอักษร0-9A-Za-kจากนั้นลดโมดูโลแบบต่อเนื่อง 237, 73, 67 และ 63 โดยนัยผ่านการจัดทำดัชนีแบบวนรอบ


2

CJam (63 ไบต์)

{{Gb"õáÖÅ{a("{i%}/"@/Ö´çýß}yùÜÅ©GôÉç¢"256b43b'0f+=}%}

หรือในรูปแบบ xxd

0000000: 7b7b 4762 22f5 e1d6 c59f 7b61 2822 7b69  {{Gb".....{a("{i
0000010: 257d 2f22 0b8a 8340 982f d6b4 e793 fddf  %}/"...@./......
0000020: 7d79 f9dc c519 17a9 0e47 0ef4 c9e7 a222  }y.......G....."
0000030: 3235 3662 3433 6227 3066 2b3d 7d25 7d    256b43b'0f+=}%}

นี่คือบล็อก (ฟังก์ชัน) ที่ไม่ระบุชื่อซึ่งคาดว่าอินพุตเป็นรายการของคอลัมน์ สาธิตออนไลน์

เช่นเดียวกับคำตอบอื่น ๆ การแปลงฐานนี้จะตามด้วยเชน% เพื่อหาตารางการค้นหาสั้น ๆ ในกรณีนี้ผมใช้ฐาน 16% [245 225 214 197 159 123 97 40]และห่วงโซ่


2

เยลลี่ 48 ไบต์

OḌ%⁽qƥ%⁹%53“ð×⁼ẎėWWæ¤jḌṛ>÷ƭÑṙsṛḌz0Ġọµḷ’b51¤iⱮịØB

Monadic Link ยอมรับรายการของอักขระตัวพิมพ์ใหญ่ (แต่ละคอลัมน์เป็นคอลัมน์) ซึ่งให้รายการของอักขระ

ลองออนไลน์!

อย่างไร?

OḌ%⁽qƥ%⁹%53“...’b51¤iⱮịØB - Link: columns
O                         - ordinals
 Ḍ                        - convert from base ten
  %⁽qƥ                    - modulo 29415
      %⁹                  - modulo 256
        %53               - modulo 53
                    iⱮ    - map with first index of x in:
                   ¤      -   nilad followed by link(s) as a nilad:
           “...’          -     22270425059867513817410846141176204460122938458128124185752719
                b         -     convert to base
                 51       -       51
                          -     ... = [38,13,19,27,10,16,20,11,35,31,4,17,9,0,50,45,24,25,34,39,22,29,41,32,3,7,46,5,48,18,6,44,28,14,1,8]
                      ị   - index into
                       ØB -   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"


1

Stax , 46 ไบต์

é►^njÖ_╪»Θîq╪↨δXû=▀úæ5?ªoéV╫╫╩ßH‼╒C═e┼$⌠°JqUu⌡

เรียกใช้และแก้ไขข้อบกพร่อง

แต่ละคอลัมน์จะถอดรหัสเป็นฐาน -36 โมดูลัสต่อเนื่องของ 8273 จากนั้นนำไปใช้กับ 95 ค่านี้ให้ตัวเลขเฉพาะค้นหาในสตริงคงที่

มันจะใส่ข้อมูลในรูปแบบที่ระบุในตัวอย่างและต้องแปลงให้คอลัมน์ ฉันจะสามารถบันทึกไบต์โดยใช้รูปแบบการป้อนข้อมูลที่แตกต่างกันซึ่งฉันอาจทำในบางจุด

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