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
규칙
이것은 code-golf 이므로 가장 짧은 답변이 이깁니다!
테스트 세트
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 W
63 자 길이 의 문자열로 주기적으로 색인합니다 .
﹪﹪﹪⍘ι⁴⁷¦²³⁷¦⁷³¦⁶⁷
알파벳을 사용하여 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]
합니다.