Re[3]: Простая с виду задачка с подвохом
От: kov_serg Россия  
Дата: 22.09.20 00:34
Оценка: 22 (1)
Здравствуйте, watchmaker, Вы писали:

W>Задача хоть и решается за единственный проход по массиву, но веса, с которыми нужно брать элементы при суммировании, устроены чуть-чуть сложнее
Автор: watchmaker
Дата: 21.09.20
: не для всех внутренних элементов они равны единице. Например, для строк длиной 4 результат определяется суммой граничных символов, а от двух внутренних никак не зависит.

Да был не прав. Поправил:
#!/usr/bin/lua

function fn(x)
    local s,c,r,c1,r1,c2,r2,r3
    function r3(t,r)
        r=0 while t%3==0 do t=t//3 r=r+1 end
        return t%3,r
    end
    if #x<2 then return x[1] end
    s=x[1]+x[#x] c=1 r=0
    for i=2,#x-1 do
        c1,r1=r3(#x-i+1)
        c2,r2=r3(i-1)
        c=(c*c1*c2)%3
        r=r+r1-r2
        if r==0 then s=s+x[i]*c end
    end
    if #x%2==0 then s=2*s end
    return s%3    
end

function F(s)
    local x,t,RGB,r={},{R=0,G=1,B=2},"RGB"
    s:gsub("[RGB]",function(c) table.insert(x,t[c]) end)
    r=fn(x)+1 return RGB:sub(r,r)
end

print(F"RGGR")
Отредактировано 22.09.2020 0:39 kov_serg . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.