millitext 글꼴로 작성된 텍스트 구문 분석 WWWWBWWBWWMYWYWRWMWWMWMMGRCMYGWBMMGW 각 색상을 하나의 문자 기호 (R =

millitext 글꼴의 텍스트 읽기

여기 에 각 문자를 하나의 1×5 픽셀 블록에 맞는 글꼴이 있습니다 . 각 픽셀의 RGB 채널을 사용하여 한 픽셀을 각 채널마다 하나씩 세 개의 하위 열로 확장하여 LCD 화면을 사용한다고 가정합니다. 당신의 임무는이 글꼴로 인코딩 된 텍스트 문자열을 가져 와서 ‘디코딩’하는 것입니다.

밀리 텍스트 알파벳

CHARACTER: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ENCODING:  WYWBMRRMMMWYWYWWWMWBMRMYGYGYCWMMMMMW
           MGBWMRRMMMMMRMRRRMGBMRWMMMMMRGMMMMMB
           MGWWWWWBWWWYRMWWMWGBYRWMMYMYGGMMWGGG
           MGRBBBMBMBMMRMRRMMGBMRMMMRWMBGMCWMGR
           WWWWBWWBWWMYWYWRWMWWMWMMGRCMYGWBMMGW

각 색상을 하나의 문자 기호 (R = 빨간색, G = 녹색, B = 파란색, C = 청록색, Y = 황색, M = 자홍색, W = 흰색)로 약칭했습니다.

입력 형식

이에 대한 입력 형식은 매우 개방적입니다. 각 열을 포함하는 배열, 각 행을 포함하는 배열 char[][], 또는 이와 유사한 것을 입력으로 사용할 수 있습니다 . 대문자 / 소문자와 함께 “빨간색”, “녹색”, “파란색”이라는 전체 단어를 사용하도록 선택할 수도 있습니다 (단, 각 단어마다 일관성이 있어야합니다! “빨간색”을 사용할 수없고 “녹색” 또는 “청색”).

당신의 언어가 그것을 지원한다면, 당신은 또한 색을 입력 할 수 있습니다 (그러나 그것이 작동 할 수도 있지만, 나는 알지 못합니다).

입력에 위의 알파벳으로 만 인코딩 된 문자 만 포함한다고 가정 할 수 있습니다 (특히 출력에 공백이나 문장 부호가 없음).

출력 형식

문자열이나 문자 배열을 출력 할 수 있습니다. 문자가 대문자인지 소문자인지를 선택할 수 있지만 모두 동일한 대소 문자를 가져야합니다.

MWRRGMGYRY
MRRRMMMMRM
WWRRMWMYRM -> HELLOWORLD
MRRRMWMMRM
MWWWGMGMWY

규칙

이것은 이므로 가장 짧은 답변이 이깁니다!

테스트 세트

WMWGMWWMYYGMYWGMBMMYWYGMWYWMWRWWMYGW
GMRMMGRMMMMMMRMMBMWMRMMMRMGMRRMBMMMR
GWWMMGRYYYMWMWMGBMWYWMMMWYGWWRWGGMMM -> THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG
GMRWMGRMMMMWMRMMBMMRRMMCRMGMRRMRGMMM
GMWCWWWMYMGMMRGMWWMRWYGBWMGMWWMWGYGW



답변

자바 스크립트 (ES6), 103100  93 92  90 바이트

@ShieruAsakoto 덕분에 9 바이트 절약

입력을 열의 배열로 가져옵니다. 문자 배열을 반환합니다.

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

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


답변

젤리 , 50 바이트

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

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

입력을 열 목록으로 받아들이고 번역의 젤리 문자열을 출력하는 모나드 링크. 따라야 할 완전한 설명이지만, 가능한 5 글자의 각 세트는 코드 포인트로 변환 될 때 고유하고 base-256에서 10 진수로 다시 변환 된 다음 mod 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


답변

dzaima / APL, 80 79 73 72 71 바이트

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

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


답변

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


답변

R , 143128 바이트

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'string에서 위치 를 가져 오기 위해 해당 내용을 검색 합니다 '0123456789ABCDEFGHIJKLMNOPQR'.


답변

, 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³⁶⁰¦¹¹³¦⁷¹

알파벳을 사용하여 base-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 W63 자 길이 의 문자열로 주기적으로 색인합니다 .

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

알파벳을 사용하여 base-47 변환을 수행 0-9A-Za-k한 다음 순환 색인 작성을 통해 연속적으로 모듈로 237, 73, 67 및 63을 내재적으로 줄입니다.


답변

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 및 % chain을 사용 [245 225 214 197 159 123 97 40]합니다.