Луа, 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 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
: саме так ми називаємо манекен _
.