Lua, 147 byte
Tôi không nghĩ rằng tôi có thể chơi nó nhiều hơn nữa, tôi đã thử rất nhiều cách để làm điều đó, và đây là cách ngắn nhất. Ngay cả khi sử dụng trình biên dịch cũ chứa hàm không dùng nữa table.foreach(table,function)
cũng không thể loại bỏ một số byte.
Chương trình này lấy một chuỗi làm đối số và in nối các giá trị bảng được phân tách bằng dấu cách.
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 và giải thích
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
Nếu bạn đang đi lang thang tại sao có một bộ biến nhưng không được sử dụng trong mã golf (biến _
trong vòng lặp for), thì đây là lý do:
Bạn có 2 cách để lặp lại một mảng trong Lua, theo kiểu:
for i=1,#table do --[[code here, use table[i] ]] end
hoặc theo kiểu foreach:
for key,value do pairs(table) do --[[code here]] end
Tôi đang cần các giá trị có trong bảng {8,10,16}
vì chúng là các cơ sở khác nhau mà tôi phải lặp đi lặp lại. Nhưng các hàm có nhiều trả về sẽ không cho phép bạn chọn cái nào bạn thực sự muốn được trả về, chúng tuân theo một đơn đặt hàng. Để có bộ biến value
, tôi cũng cần nắm bắt giá trị key
: đó là cái mà chúng ta gọi là hình nộm _
.