millitext 글꼴로 작성된 텍스트 구문 분석


56

millitext 글꼴의 텍스트 읽기

여기 에 각 문자를 하나의 1x5 픽셀 블록에 맞는 글꼴이 있습니다 . 각 픽셀의 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

15
모든 글자를 하드 코딩하거나 여기에 내장 된 Mathematica를 사용하는 것 같습니다
누군가

7
좋은 첫 도전, BTW!
Arnauld

6
다음은 고정 글꼴입니다 (여러 문자가 잘못됨).
Arnauld

7
영어 알파벳의 모든 문자를 포함하도록 테스트 세트를 원했는지 여부는 알 수 없지만 팬 그램 이라고 불리는 아들 과 "THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG"가 "S"가없는 아들 이 아닌 경우 "THEQUICKBROWNFOXJUMPESOVERTHELAZYDOG"이어야 함
MindSwipe

5
@JonofAllTrades JUMPS는 가능성이 있습니다. 그리고 A에 대한 THE 중 하나를 변경하면 두 문자를 잃을 수 있습니다.
Andrew Leach

답변:


16

자바 스크립트 (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])

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


1
@ShieruAsakoto 감사합니다! 곱셈은 ​​좋은 생각이 아니 었습니다. 3 모드로 1 바이트를 더 절약했습니다.
Arnauld

1
그것들은 저쪽에 큰 모듈로입니다 ... 어쩌면 더 향상 시켜서 -사라질 수 있습니다! : D
Outgolfer Erik

야만적 인 힘의 밤새 나는 4 개의 mods를 가진 90를 얻었다 : 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

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

입력을 열 목록으로 받아들이고 번역의 젤리 문자열을 출력하는 모나드 링크. 따라야 할 완전한 설명이지만, 가능한 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

7

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

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

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


1
APL에는 어떤 특별한 기능이 있습니까?
요나

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 , 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'.


이것은 영리 해 보이지만 코드 사용 방법이 확실하지 않습니다. 함수에 무엇을 전달해야합니까? 문자형 벡터 목록과 평범한 벡터 모두 "적합 할 수없는 인수"로 실패합니다. 문자 행렬도 마찬가지입니다.
콘라드 루돌프

@KonradRudolph : 입력에 대한 최소한의 설명을 추가했습니다 (보다 명확하게하기 위해 TIO를 변경했습니다). 가능한 빨리 코드에 대한 설명을 추가하겠습니다. 유니 코드 대신 ASCII 범위에서 값을 반환하는 문자열에 대한 다른 "해싱"함수를 찾아서 개선 할 수 있습니다 ...
digEmAll

@digEmAll 그래, 나는 숫자를 좀 더 합리적인 범위의 구별되는 문자로 모으고 놀고 있지만 아직 아무것도 없다
Giuseppe

@digEmAll 작동하는 아아 (행 데이터가 아니라 주요 데이터로 데이터를 가지고 있음)하지만 예제는 "HELLO"가 아니라 "HEKKN"이됩니다. 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³⁶⁰¦¹¹³¦⁷¹

알파벳을 사용하여 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을 내재적으로 줄입니다.


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


2

젤리 , 48 바이트

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

문자 목록을 생성하는 대문자 목록 (각각 열)을 허용하는 모나드 링크.

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

어떻게?

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⌡

실행 및 디버깅

각 열은 base-36으로 디코딩됩니다. 8273의 연속 계수, 그 다음 95가 적용됩니다. 고정 문자열에서 조회 된 고유 번호가 생성됩니다.

예제에 지정된 형식으로 정확하게 입력하고 열을 가져 오려면 해당 값을 바꾸어야합니다. 다른 입력 형식을 사용하여 바이트를 절약 할 수 있으며 어느 시점에서 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.