Lua, 147 Bytes
Ich glaube nicht, dass ich viel mehr Golf spielen kann, ich habe viele Möglichkeiten getestet, und hier kommt die kürzeste. Selbst die Verwendung eines alten Compilers, der die veraltete Funktion enthält, table.foreach(table,function)
spart einige Bytes nicht.
Dieses Programm verwendet eine Zeichenfolge als Argument und druckt die Verkettung von Tabellenwerten, die durch Leerzeichen getrennt sind.
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 und Erklärungen
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
Wenn Sie sich überlegen, warum es einen Variablensatz gibt, der jedoch nicht in einem Golfcode verwendet wird (die Variable _
in der for-Schleife), finden Sie hier folgende Gründe :
Sie haben zwei Möglichkeiten, ein Array in Lua zu durchlaufen, entweder in einem for-Stil:
for i=1,#table do --[[code here, use table[i] ]] end
oder in einem foreach-Stil:
for key,value do pairs(table) do --[[code here]] end
Ich brauchte die in der Tabelle enthaltenen Werte, {8,10,16}
da es sich um die verschiedenen Basen handelt, über die ich iterieren muss. Bei Funktionen mit Mehrfachrückgabe können Sie jedoch nicht auswählen, welche Sie tatsächlich zurückgeben möchten. Sie folgen einer Reihenfolge. Um die Variable value
gesetzt zu haben, muss ich auch den Wert von fangen key
: das nennen wir einen Dummy _
.