Lendo o texto da fonte millitext
Há uma fonte aqui que encaixa cada caractere em um único bloco de 1x5 pixel. Isso é feito (supondo que você esteja usando uma tela LCD) usando os canais RGB de cada pixel para expandir o pixel em três subcolunas, uma para cada canal. Sua tarefa é coletar uma sequência de texto codificada nessa fonte e 'decodificá-la'.
Millitext Alphabet
CHARACTER: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
ENCODING: WYWBMRRMMMWYWYWWWMWBMRMYGYGYCWMMMMMW
MGBWMRRMMMMMRMRRRMGBMRWMMMMMRGMMMMMB
MGWWWWWBWWWYRMWWMWGBYRWMMYMYGGMMWGGG
MGRBBBMBMBMMRMRRMMGBMRMMMRWMBGMCWMGR
WWWWBWWBWWMYWYWRWMWWMWMMGRCMYGWBMMGW
Abreviei cada cor para um símbolo de um caractere (R = vermelho, G = verde, B = azul, C = ciano, Y = amarelo, M = magenta, W = branco).
Formato de entrada
O formato de entrada para isso é bastante aberto. Você pode ter a entrada como uma matriz contendo cada coluna, uma matriz contendo cada linha, a char[][]
ou algo assim. Você também pode optar por usar as palavras completas "vermelho", "verde", "azul", com maiúsculas / minúsculas à sua escolha (mas deve ser consistente para cada palavra! Você não pode usar "VERMELHO" e também "verde" ou "azul").
Se o seu idioma o suportar, você também poderá inserir cores (no entanto, isso pode funcionar, eu não sei de antemão).
Você pode supor que a entrada SÓ conterá caracteres codificados no alfabeto acima (em particular, não haverá espaços ou pontuação na sua saída).
Formato de saída
Você pode gerar uma string ou algum tipo de matriz de caracteres. Você pode escolher se as letras são maiúsculas ou minúsculas, mas todas devem ter o mesmo caso.
Exemplo
MWRRGMGYRY
MRRRMMMMRM
WWRRMWMYRM -> HELLOWORLD
MRRRMWMMRM
MWWWGMGMWY
Regras
Isso é código-golfe , então a resposta mais curta vence!
Conjunto de teste
WMWGMWWMYYGMYWGMBMMYWYGMWYWMWRWWMYGW
GMRMMGRMMMMMMRMMBMWMRMMMRMGMRRMBMMMR
GWWMMGRYYYMWMWMGBMWYWMMMWYGWWRWGGMMM -> THEQUICKBROWNFOXJUMPEDOVERTHELAZYDOG
GMRWMGRMMMMWMRMMBMMRRMMCRMGMRRMRGMMM
GMWCWWWMYMGMMRGMWWMRWYGBWMGMWWMWGYGW
Respostas:
JavaScript (ES6),
103 100 93 9290 bytesGuardado 9 bytes graças a @ShieruAsakoto
Recebe entrada como uma matriz de colunas. Retorna uma matriz de caracteres.
Experimente online!
fonte
-
desapareçam! : Da=>a.map(s=>"H-L-D--VGQ87MR6TZ-KJ9WC05BUXF1YI2EON3S-A-P4"[parseInt(s,35)%1161%219%152%43])
.a=>a.map(s=>"UIR-L68N--W-X7B-FH-D-EZ--902-S4M5GJCQT3PKV-A1-YO"[parseInt(s,35)%464%107%99%52])
Geléia , 50 bytes
Experimente online!
Um link monádico que aceita a entrada como uma lista de colunas e gera uma sequência Jelly da tradução. Explicação completa a seguir, mas se baseia no fato de que cada conjunto possível de 5 letras é único quando convertido em pontos de código, convertido novamente da base-256 para o decimal e, em seguida, no mod 211.
Alternativa usando a fonte fixa de Arnauld (49 bytes e usando o mesmo princípio).
Explicação
fonte
dzaima / APL,
8079737271 bytesExperimente online!
fonte
⊇
(semelhante a{⍵[⍺]}
), além disso, esses dois arquivos contêm informações sobre isso05AB1E ,
4544 bytesExperimente online!
Recebe a entrada como matriz de colunas e gera uma matriz de caracteres.
Explicação:
fonte
R ,
143128 bytesExperimente online!
Função que recebe um vetor de strings (correspondente às colunas) como entrada, por exemplo:
Explicação:
Executando a seguinte operação para cada sequência codificada (por exemplo, 'CRGBY' = 'S'):
obtemos a seguinte string
'#</Eb=,n9J.M4Z+%*V N[Hd\B?1Oj>KgRYT2'
onde cada caractere corresponde'0123456789ABCDEFGHIJKLMNOPQR'
.Portanto, o código executa as operações descritas nas sequências de entrada e, em seguida, pesquisa suas correspondências dentro da
'#</Eb=,n9J.M4Z+%*V N[Hd\B?1Oj>KgRYT2'
obtenção das posições na sequência'0123456789ABCDEFGHIJKLMNOPQR'
.fonte
Carvão , 66 bytes
Experimente online! Link é a versão detalhada do código. Recebe a entrada como uma lista de colunas terminadas com uma linha em branco. Explicação:
Insira as strings até que uma fique em branco.
Indique ciclicamente a sequência
OV EX8HSCF5IA L TG 17 M P9RB 4 K ZY2 0JW 63Q ND U
que (com espaço à direita) tem 56 caracteres.Execute a conversão de base 7 usando o alfabeto
WMYCBGR
e reduza sucessivamente os módulos 360, 113, 71 e 56 implicitamente através da indexação cíclica.Minha abordagem de base 7 se saiu muito mal com a fonte fixa do @ Arnauld; depois de algumas pesquisas, eu ainda estava em 73 bytes. Usando a abordagem do @ Grimy, reduza para 67 bytes. No entanto, finalmente localizei uma solução de 66 bytes:
Experimente online! Link é a versão detalhada do código. Explicação:
Insira as strings até que uma fique em branco.
Indexe ciclicamente a string
ID HAM178 VS4F 3R EP6CQ Z UB O 0 X 9 G 5TNJKL2Y W
com 63 caracteres.Realize a conversão da base 47 usando o alfabeto
0-9A-Za-k
e reduza sucessivamente os módulos 237, 73, 67 e 63 implicitamente através da indexação cíclica.fonte
CJam (63 bytes)
ou no formato xxd
Este é um bloco anônimo (função) que espera entrada como uma lista de colunas. Demonstração online .
Como muitas das outras respostas, isso faz uma conversão base seguida por uma cadeia de% para obter uma tabela de pesquisa curta. Neste caso, uso a base 16 e a corrente%
[245 225 214 197 159 123 97 40]
.fonte
Gelatina , 48 bytes
Um link monádico que aceita uma lista de listas de caracteres maiúsculos (cada um sendo uma coluna) que gera uma lista de caracteres.
Experimente online!
Quão?
fonte
Ruby , 109 bytes
Experimente online!
fonte
Stax , 46 bytes
Execute e depure
Cada coluna é decodificada como base-36. Módulo sucessivo de 8273 e, em seguida, 95 são aplicados. Isso gera um número único, procurado em uma sequência fixa.
Ele recebe a entrada exatamente no formato especificado nos exemplos e precisa transpor para obter colunas. Conseguirei salvar alguns bytes usando um formato de entrada diferente, o que posso fazer em algum momento.
fonte