Lua,147字节
我认为我无法再降低很多,我已经测试了很多方法,但这是最短的。即使使用包含不推荐使用的函数的旧编译器,table.foreach(table,function)
也不会节省一些字节。
该程序将字符串作为参数,并打印由空格分隔的表值的串联。
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," "))
脱节和解释
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
如果您在徘徊为什么有一个变量集但在高尔夫代码中没有使用(_
for循环中的变量),这是为什么:
您可以通过两种方式遍历Lua中的数组,两种方式均为for:
for i=1,#table do --[[code here, use table[i] ]] end
或以foreach样式:
for key,value do pairs(table) do --[[code here]] end
我需要表中包含的值,{8,10,16}
因为它们是我必须迭代的不同基础。但是具有多次返回的函数将不允许您选择要返回的实际对象,而是遵循顺序。要value
设置变量,我也需要捕捉值key
:这就是我们所谓的dummy _
。