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.
t={}for _,i in pairs({8,10,16})do x=tonumber(arg[1],i)x=x and x or 0 t[#t+1]=127>x and 19<x and string.char(x)or nil end print(table.concat(t," "))
Ungolfed e explicações
t={} -- Initalise the array containing the chars to print
for _,i in pairs({8,10,16}) -- Iterate over the array {8,10,16}
do
x=tonumber(arg[1],i) -- convert the input in base i to a number in base 10
x=x and x or 0 -- if the input wasn't a number, x is nil
-- use a ternary operator to set x in this case
t[#t+1]=127>x and 19<x -- if x is the bytecode of a printable character
and string.char(x)or nil-- insert this character into t
end
print(table.concat(t," ")) -- concatenate the values in t with " " as separator
-- and print it
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:
for i=1,#table do --[[code here, use table[i] ]] end
ou no estilo foreach:
for key,value do pairs(table) do --[[code here]] end
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. Para value
definir a variável , também preciso capturar o valor key
: é o que chamamos de manequim _
.