Phân tích văn bản viết phông chữ millitext


56

Đọc văn bản của phông chữ millitext

Có một phông chữ ở đây phù hợp với từng nhân vật thành một khối duy nhất, 1x5 pixel. Nó thực hiện điều này (giả sử bạn đang sử dụng màn hình LCD) bằng cách sử dụng các kênh RGB của mỗi pixel để mở rộng một pixel thành ba lớp con, một cho mỗi kênh. Nhiệm vụ của bạn là nhận một chuỗi văn bản được mã hóa bằng phông chữ này và 'giải mã' nó.

Bảng chữ cái Millitext

CHARACTER: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ENCODING:  WYWBMRRMMMWYWYWWWMWBMRMYGYGYCWMMMMMW
           MGBWMRRMMMMMRMRRRMGBMRWMMMMMRGMMMMMB
           MGWWWWWBWWWYRMWWMWGBYRWMMYMYGGMMWGGG
           MGRBBBMBMBMMRMRRMMGBMRMMMRWMBGMCWMGR
           WWWWBWWBWWMYWYWRWMWWMWMMGRCMYGWBMMGW

Tôi đã viết tắt mỗi màu thành một ký hiệu một ký tự (R = red, G = green, B = blue, C = cyan, Y = yellow, M = magenta, W = white).

Định dạng đầu vào

Các định dạng đầu vào cho điều này là khá mở. Bạn có thể có đầu vào là một mảng chứa mỗi cột, một mảng chứa mỗi hàng, a char[][]hoặc bất cứ thứ gì tương tự. Bạn cũng có thể chọn sử dụng các từ đầy đủ "đỏ", "xanh", "xanh", với chữ hoa / chữ thường bạn chọn (nhưng nó phải nhất quán cho từng từ! Bạn không thể sử dụng "ĐỎ" và cũng có thể "xanh" hoặc "Màu xanh").

Nếu ngôn ngữ của bạn tình cờ hỗ trợ nó, bạn cũng có thể có đầu vào là màu sắc (tuy nhiên điều đó có thể hoạt động, tôi không biết ngoài lề).

Bạn có thể giả định rằng đầu vào CHỈ chứa các ký tự được mã hóa trong bảng chữ cái ở trên (đặc biệt, sẽ không có dấu cách hoặc dấu chấm câu trong đầu ra của bạn).

Định dạng đầu ra

Bạn có thể xuất một chuỗi hoặc một số loại ký tự. Bạn có thể chọn xem các chữ cái là chữ hoa hay chữ thường, nhưng tất cả chúng phải có cùng một trường hợp.

Thí dụ

MWRRGMGYRY
MRRRMMMMRM
WWRRMWMYRM -> HELLOWORLD
MRRRMWMMRM
MWWWGMGMWY

Quy tắc

Đây là , vì vậy câu trả lời ngắn nhất sẽ thắng!

Tập kiểm tra

WMWGMWWMYYGMYWGMBMMYWYGMWYWMWRWWMYGW
GMRMMGRMMMMMMRMMBMWMRMMMRMGMRRMBMMMR
GWWMMGRYYYMWMWMGBMWYWMMMWYGWWRWGGMMM -> THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG
GMRWMGRMMMMWMRMMBMMRRMMCRMGMRRMRGMMM
GMWCWWWMYMGMMRGMWWMRWYGBWMGMWWMWGYGW

15
Tôi cảm thấy như bạn hoặc mã hóa tất cả các chữ cái hoặc sử dụng một Mathicala dựng sẵn ở đây.
ai đó

7
Thử thách đầu tiên tốt đẹp, BTW!
Arnauld

6
Đây là phông chữ cố định (một số ký tự khác là sai).
Arnauld

7
Tôi không biết nếu bạn muốn thử nghiệm của bạn thiết lập để bao gồm tất cả các chữ từ bảng chữ cái tiếng Anh hay không, nhưng nếu con trai đó được gọi là một pangram và "THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG" không phải là một như thiếu nó "S", nếu bạn muốn nó phải là "THEQUICKBROWNFOXJUMPESOVERTHELAZYDOG"
MindSwipe

5
@Jonof ALLTrades JUMPS là một khả năng. Và bạn có thể mất hai nhân vật bằng cách thay đổi một trong những THE cho A.
Andrew Leach

Câu trả lời:


16

JavaScript (ES6),  103 100 93 92  90 byte

Đã lưu 9 byte nhờ @ShieruAsakoto

Đưa đầu vào như một mảng của các cột. Trả về một mảng các ký tự.

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

Hãy thử trực tuyến!


1
@ShieruAsakoto Cảm ơn! Phép nhân không phải là một ý tưởng tốt. Tôi đã lưu thêm 1 byte với 3 mod.
Arnauld

1
Đó là một số mod lớn ở đó ... có lẽ bạn có thể cải thiện chúng nhiều hơn để -s biến mất! : D
Erik the Outgolfer

Sau cả một đêm vũ phu, tôi đã nhận được 90 với 4 mod : a=>a.map(s=>"H-L-D--VGQ87MR6TZ-KJ9WC05BUXF1YI2EON3S-A-P4"[parseInt(s,35)%1161%219%152%43]).
Shieru Asakoto

@ShieruAsakoto Thật không may, phông chữ được mô tả trong thử thách là sai. Chờ đợi một bản cập nhật có thể từ OP.
Arnauld

@Arnauld Đối với bản sửa lỗi, tiến trình của tôi bây giờ là 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

Thạch , 50 byte

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

Hãy thử trực tuyến!

Một liên kết đơn âm chấp nhận đầu vào dưới dạng danh sách các cột và xuất ra chuỗi Jelly của bản dịch. Giải thích đầy đủ để làm theo, nhưng dựa vào thực tế là mỗi bộ 5 chữ cái có thể là duy nhất khi được chuyển đổi thành điểm mã, được chuyển đổi lại từ cơ sở-256 sang số thập phân và sau đó mod 211.

Thay thế bằng cách sử dụng phông chữ cố định của Arnauld (49 byte và sử dụng cùng một nguyên tắc.)

Giải trình

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 byte

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

Hãy thử trực tuyến!


1
APL của bạn có những tính năng đặc biệt nào?
Giô-na

2
@Jonah Đây là điều đã qua sử dụng duy nhất là (tương tự {⍵[⍺]}), khác hơn thế, những hai file chứa thông tin về nó
dzaima

6

05AB1E , 45 44 byte

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

Hãy thử trực tuyến!

Lấy đầu vào dưới dạng mảng của các cột và xuất ra một mảng các ký tự.

Giải trình:

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 byte

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)]

Hãy thử trực tuyến!

Hàm lấy một vectơ của chuỗi (tương ứng với các cột) làm đầu vào, ví dụ:

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

Giải trình :

Thực hiện thao tác sau cho từng chuỗi được mã hóa (ví dụ: '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  /

chúng ta thu được chuỗi sau '#</Eb=,n9J.M4Z+%*V N[Hd\B?1Oj>KgRYT2'trong đó mỗi ký tự tương ứng '0123456789ABCDEFGHIJKLMNOPQR'.

Vì vậy, mã thực hiện các hoạt động được mô tả trên các chuỗi đầu vào, sau đó tìm kiếm các tương ứng của chúng bên trong '#</Eb=,n9J.M4Z+%*V N[Hd\B?1Oj>KgRYT2'để có được các vị trí trong chuỗi '0123456789ABCDEFGHIJKLMNOPQR'.


Điều này có vẻ thông minh nhưng không rõ cách sử dụng mã: Tôi sẽ chuyển cái gì cho hàm? Cả một danh sách các vectơ ký tự và một vectơ đơn giản đều thất bại với đối số không phù hợp. Một ma trận ký tự cũng vậy.
Konrad Rudolph

@KonradRudolph: đã thêm một lời giải thích tối thiểu về đầu vào (và thay đổi TIO để rõ ràng hơn). Ngay sau khi tôi có thể thêm một lời giải thích về mã, tôi chắc chắn có thể cải thiện bằng cách tìm một hàm "băm" khác cho các chuỗi trả về giá trị trong phạm vi ASCII thay vì unicode ...
digEmAll

@digEmAll yeah Tôi đã chơi với việc sửa đổi các chữ số thành một phạm vi các ký tự riêng biệt hợp lý hơn nhưng chưa có gì
Giuseppe

@digEmAll Ah hoạt động được Tôi rất bối rối rằng nó dường như hoạt động trên TIO. Mã hóa khác nhau (không phải UTF-8), tôi đoán vậy.
Konrad Rudolph

1
@KonradRudolph: đã thêm một lời giải thích ngắn gọn (và tìm thấy một mã ngắn hơn);)
digEmAll

3

Than , 66 byte

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Đưa đầu vào dưới dạng danh sách các cột kết thúc bằng một dòng trống. Giải trình:

WS

Nhập chuỗi cho đến khi một chuỗi trống.

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

Chỉ mục tuần hoàn vào chuỗi OV EX8HSCF5IA L TG 17 M P9RB 4 K ZY2 0JW 63Q ND Umà (có dấu cách) có độ dài 56 ký tự.

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

Thực hiện chuyển đổi cơ sở 7 bằng cách sử dụng bảng chữ cái WMYCBGRvà sau đó giảm liên tục modulo 360, 113, 71 và 56 thông qua việc lập chỉ mục theo chu kỳ.

Cách tiếp cận cơ sở 7 của tôi thực sự tồi tệ với phông chữ cố định của @ Arnauld; Sau một số tìm kiếm, tôi vẫn ở 73 byte. Sử dụng phương pháp của @ Grimy đã cắt giảm xuống còn 67 byte. Tuy nhiên cuối cùng tôi đã theo dõi một giải pháp 66 byte:

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

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải trình:

WS

Nhập chuỗi cho đến khi một chuỗi trống.

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

Lập chỉ mục theo chu kỳ thành chuỗi ID HAM178 VS4F 3R EP6CQ Z UB O 0 X 9 G 5TNJKL2Y Wdài 63 ký tự.

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

Thực hiện chuyển đổi cơ sở 47 bằng cách sử dụng bảng chữ cái 0-9A-Za-kvà sau đó giảm liên tục modulo 237, 73, 67 và 63 thông qua việc lập chỉ mục theo chu kỳ.


2

CJam (63 byte)

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

hoặc ở định dạng 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+=}%}

Đây là một khối ẩn danh (chức năng) dự kiến ​​đầu vào là một danh sách các cột. Bản demo trực tuyến .

Như nhiều câu trả lời khác, đây là một chuyển đổi cơ sở theo sau là chuỗi% để có được bảng tra cứu ngắn. Trong trường hợp này tôi sử dụng chuỗi cơ sở 16 và% [245 225 214 197 159 123 97 40].


2

Thạch , 48 byte

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

Một liên kết đơn thể chấp nhận một danh sách các danh sách các ký tự viết hoa (mỗi là một cột) mang lại một danh sách các ký tự.

Hãy thử trực tuyến!

Làm sao?

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 byte

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

Chạy và gỡ lỗi nó

Mỗi cột được giải mã là cơ sở-36. Mô-đun kế tiếp 8273, sau đó 95 được áp dụng. Điều này mang lại một số duy nhất, tra cứu trong một chuỗi cố định.

Nó nhận đầu vào chính xác theo định dạng được chỉ định trong các ví dụ và phải hoán đổi chúng để lấy các cột. Tôi sẽ có thể lưu một số byte bằng cách sử dụng một số định dạng đầu vào khác nhau, điều mà tôi có thể làm vào một lúc nào đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.