Escreva um programa que traduza texto ASCII para saída em braille . Requisitos:
- A entrada pode vir de stdin, linha de comando ou outra fonte de entrada externa.
- A saída deve ser reconhecida como braille, a forma de saída é sua. Um exemplo seria
o
para um ponto levantado e.
para um ponto não levantado. Representação de padrão textual como1-3-4
não é aceitável. O empacotamento de linha longa não é necessário. - Apenas os 26 caracteres e o espaço do alfabeto são necessários para uma solução mínima. Todos os caracteres de entrada não suportados pela sua solução devem ser ignorados.
A pontuação é pelo número de caracteres no código fonte. As penalidades e bônus são:
- +50 de penalidade por usar caracteres braille Unicode como saída.
- Bônus de -50 para apoiar maiúsculas, números e pontuação.
Bônus de 200 para apoiar ligaduras e contrações de uma letra do Braille em inglês (grau 2) .(Isso fará com que seja um desafio separado, pois é um problema bem diferente.)
Chamada e saída de amostra (solução mínima):
$ braille Hello world
o . o . o . o . o . . . . o o . o . o . o o
o o . o o . o . . o . . o o . o o o o . . o
. . . . o . o . o . . . . o o . o . o . . .
Respostas:
Python, 162
Atualmente, suporta letras minúsculas e alguma pontuação, mas ainda é um trabalho em andamento.
Exemplo:
fonte
Python -
9075 + 50 = 125Use letras minúsculas.
Linha única (graças a ɐɔıʇǝɥʇuʎs)
fonte
for l in input():print("⠀⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵"[max(0,ord(l)-96)],end="")
75 caracteres.max
truque. Obrigadofor l in input():print((" "*97+"⠁⠃⠉⠙⠑⠋⠛⠓⠊⠚⠅⠇⠍⠝⠕⠏⠟⠗⠎⠞⠥⠧⠺⠭⠽⠵")[ord(l)],end="")
C, 269
Esta implementação requer que seu argumento, se contenha espaços, seja citado:
fonte
BBC Basic 103 caracteres ASCII ou 92 tokens
Possivelmente não exatamente o que o OP pretendia, isso redefine a fonte dos caracteres em minúsculas.
VDU 23,n,a,b,c,d,e,f,g,h
atribui um bitmap de 8x8 ao caractere n, consistindo em oito bytes. Seguir um parâmetro com ponto e vírgula em vez de vírgula faz com que seja tratado como um número little endian de dois bytes.Os padrões de braille para letras
a
passadasz
são armazenados em A $, de acordo com o seguinte padrão de bits. Isso é extraído por máscaras com 9 = binário1001
e shift de direitos (a divisão por 2 e 4 é usada como padrão, o BBC Basic não possui operador de turno).Código ungolfed
Exemplo de uso
Isso é feito no modo de tela 6 para maior clareza (digite MODE6 assim que você abrir o emulador de linha de comando).
Na verdade, depois de executar o código, qualquer letra minúscula (incluindo a entrada do teclado) aparece em Braille.
Emulador em http://bbcbasic.co.uk/bbcwin/bbcwin.html .
Veja também esta minha resposta semelhante: /codegolf//a/28869/15599
fonte
Bash + coreutils
Solução mínima - somente em minúsculas, 83 (33 caracteres unicode + 50 de penalidade):
Letras maiúsculas, números e pontuação, 120 (120 caracteres unicode + 50 de penalidade - bônus de 50):
Exemplo de saída:
fonte
PHP, 331
Não há bônus por enquanto.
fonte
<?
vez de<?php[SPACE]
salvar 4 caracteres.JavaScript - 286
Primeira tentativa. Sem bônus.
fonte
w=prompt().split("");for(i=0;i<w.length;i++)z=w[i],o="o",p=".",b=[1,5,3,11,9,7,15,13,6,14],e=[c="",1,3],g=z.charCodeAt(0)-97,22<g&&g--,f=e[g/10|0],d=b[g%10],22==g&&(d=14,f=2),c+=d&1?o:p,c+=d&2?o:p,c+="\n",c+=d&4?o:p,c+=d&8?o:p,c+="\n",c+=f&1?o:p,c+=f&2?"o\n":".\n",console.log(c)
CJam - 51
Experimente em http://cjam.aditsu.net/
Exemplo de entrada:
Exemplo de saída:
Ele suporta apenas letras minúsculas e espaço. Outros caracteres são mapeados para caracteres suportados (em especial letras maiúsculas para minúsculas).
Explicação:
Os caracteres em braille são codificados usando 1 para um ponto elevado e 0 para um ponto não elevado, da esquerda para a direita e de cima para baixo. Isso fornece 6 dígitos de base 2; a 1 é anexado para evitar a exclusão de zeros à esquerda; o número é convertido na base 10 e no caractere ASCII correspondente.
Exemplo: t -> ⠞ -> 01/11/10 -> 1011110 -> 94 -> ^
O programa converte de volta cada caractere no trio de pares de bits (como
[[0 1][1 1][1 0]]
), obtendo uma matriz de pares de bits. A matriz é então transposta e os separadores são adicionados (espaços dentro de linhas, novas linhas entre linhas).q
lê a entrada em uma string = array de caracteres{…}%
aplica o bloco a cada caracterei32%
obtém o código ASCII mod 32 (espaço-> 0, a-> 1, b-> 2, z-> 26)"@`hptdx|lX\bjrvfz~nZ^ck]swg"
é uma string que contém os caracteres em braille codificado como explicado anteriormente=
obtém o caractere braille codificado correspondente da sequência,i2b
obtém o código ASCII e depois converte para a base 2 (obtendo uma matriz de 7 dígitos)1>
remove o 1 dígito inicial2/
divide a matriz em (3) paresz
transpõe a matriz queSf*
une cada linha com espaçosN*
une as linhas com novas linhasfonte
C,
249244Entrada é um argumento da linha de comandos, que deve ser escapado ou citado se a sequência contiver espaços. Os caracteres suportados são letras minúsculas e espaço. Caracteres não suportados são eliminados silenciosamente.
Editar: Raspou 5 bytes, simplificando uma condição
fonte
perl, 195 + 2-50 = 147
Ele lida com capital, número e pontuação, sem depender de unicode (195 bytes + 2 bytes (para
-pl
) - 50 bônus)Com recuo:
Saída de amostra
fonte
Javascript ES6 -
282309297283270 - 50 =232259233220 bytesIsso seria mais curto, mas checar letras maiúsculas doeria .
EDIT: Obrigado ao mbomb007 por me salvar dois bytes - infelizmente, descobri que um pouco do golfe anterior havia arruinado tudo, então tive que adicionar 27 caracteres novamente.
Edição: e 12 bytes salvos movendo os espaços.
EDIT: Percebi que era bobagem produzir caracteres e salvou alguns bytes. Também salvei alguns caracteres trocando k = (a, b) => a% (2 * b)> b-1? 1: 0 para k = (a, b) => a% b> ~ -b / 2? 1: 0.
fonte
string.toLowerCase
a uma variável?1-9-->a-i
e0-->j