Dada uma sequência de entrada contendo apenas letras e números, escreva um programa ou função que imprima os possíveis caracteres ASCII imprimíveis (Hex 20-7E) que correspondem ao valor da sequência nas bases 8, 10 e 16 (sempre que possível). Os caracteres devem ser escritos em ordem crescente em termos das bases com as quais eles correspondem (base 8 primeiro, etc). A saída pode estar no formato de matriz (como [& . F]
) ou separada por espaços ou novas linhas (uma nova linha à direita é opcional) como as amostras.
Se não for possível formar um caractere ASCII imprimível, o programa não deverá ter saída.
Amostras
31
==> 1
47
==> ' / G
69
==> E i
7A
==> z
100
==> @ d
156
==> n
189
==> <empty>
potaTO
==> <empty>
5G
==> <empty>
19
==> <empty>
Isso é código-golfe , então a resposta com o menor número de bytes vence. Aplicam-se regras padrão.
code-golf
base-conversion
Arcturus
fonte
fonte
map
efilter
, a compreensão de array é realmente útil.'0'+b+...
quandob
sempre será uma string?0+b+...
MATL , 23
2428bytes1 byte de desconto, graças a @David
Experimente online!
fonte
D
é necessário, é? Bom trabalho na criação do vetor, fiz quase o mesmo que você, mas não consegui encurtar o vetor[8,10,16]
.D
era necessário neste caso esvaziar a pilha. Mas você está certo, não é! Obrigado!' ':'~'
como um literal predefinido para o próximo lançamento!32:126m
É uma boa ideia!!Python 3,
8482 bytesfonte
Pitão,
23212018 bytesSaída como uma matriz. Existe um literal
\x80
entre a barra invertida e o C, que substituí por um•
.Experimente aqui .
fonte
Jolf, 26 bytes
Experimente aqui! Suíte de teste
Explicação
fonte
Bash + utilitários GNU + ascii , 36
Não tenho certeza se o uso do
ascii
utilitário é permitido. A entrada é tomada como um parâmetro da linha de comandos.ascii
pode ser instalado no Ubuntu comsudo apt-get install ascii
.fonte
Javascript ES6, 89 caracteres
Teste:
fonte
Lua, 147 bytes
Eu não acho que posso jogar muito mais, testei várias maneiras de fazê-lo, e aqui vem o mais curto. Mesmo usando um compilador antigo que contém a função obsoleta
table.foreach(table,function)
não reduz alguns bytes.Este programa usa uma string como argumento e imprime a concatenação dos valores de uma tabela separados por espaços.
Ungolfed e explicações
Se você está pensando por que há um conjunto de variáveis, mas não é usado em um código de golfe (a variável
_
no loop for), eis o porquê:Você tem duas maneiras de iterar sobre uma matriz em Lua, em um estilo for:
ou no estilo foreach:
Eu estava precisando dos valores contidos na tabela
{8,10,16}
, pois são as diferentes bases que eu tenho que repetir. Mas as funções com retorno múltiplo não permitirão que você escolha qual delas realmente deseja devolver, elas seguem uma ordem. Paravalue
definir a variável , também preciso capturar o valorkey
: é o que chamamos de manequim_
.fonte
C (função), 76
Ideone.
fonte
j*=j,j/=6
é mais claramente escrito comoj=j*j/6
j*=j/6
, mas isso não funcionou devido à perda de precisão durante a divisão inteiraj<20,
o operador de vírgula descarta todo o efeito disso.JavaScript ES6,
8988 bytesGuardado 1 byte graças a Neil!
Retorna uma matriz. Se não estiver certo, isso funciona por mais 8 bytes, exibindo as possíveis correspondências.
Mostrar snippet de código
fonte
47
.Number()
requer ,0o
maseval
está feliz com apenas0
. Desculpe pela confusão.R, 84 bytes
usa
strtoi
para converter para cada uma das bases e depois converter para caractere se estiver no intervalo apropriado. Poderia economizar mais 4 bytes removendocat
se permitíssemos a impressão padrão de caracteres (encapsulados""
)fonte