Модуль:ХалкъалъулКъадаралъулРахъалъБакІИкълимал
Для документации этого модуля может быть создана страница Модуль:ХалкъалъулКъадаралъулРахъалъБакІИкълимал/doc
require('Module:No globals')
local bit32 = require( 'bit32' )
local ArrayPopSRC= mw.loadData('Module:Statistical/RUS-AAA')
local ArrayPopCur = {}
local function LimitDouble(Val)
local MaxNumber = 2147483648
return Val - (math.floor(Val / MaxNumber) * MaxNumber)
end
local function shl(Val, Shift)
if Shift > 0 then
return LimitDouble(Val * (2 ^ Shift))
else
return Value
end
end
local function shr(Val, Shift)
if Shift > 0 then
return math.floor(Val / (2 ^ Shift))
else
return Val
end
end
local function MakeHash(PlaceName)
local dataLength = mw.ustring.len(PlaceName)
if dataLength == 0 then return 0 end
local hash = dataLength
local remainingBytes = math.fmod(dataLength, 2)
local numberOfLoops = math.floor(dataLength / 2)
local currentIndex = 0
local tmp = 0
while (numberOfLoops > 0) do
hash = LimitDouble(hash + mw.ustring.codepoint(PlaceName, currentIndex + 1))
tmp = bit32.bxor(shl(mw.ustring.codepoint(PlaceName, currentIndex + 2), 11), hash)
hash = bit32.bxor(shl(hash, 16), tmp)
hash = LimitDouble(hash + shr(hash, 11))
currentIndex = currentIndex + 2
numberOfLoops = numberOfLoops - 1
end
if remainingBytes == 1 then
hash = LimitDouble(hash + mw.ustring.codepoint(PlaceName, currentIndex + 1))
hash = bit32.bxor(hash, shl(hash, 10))
hash = LimitDouble(hash + shr(hash, 1))
end
hash = bit32.bxor(hash, shl(hash, 3))
hash = LimitDouble(hash + shr(hash, 5))
hash = bit32.bxor(hash, shl(hash, 4))
hash = LimitDouble(hash + shr(hash, 17))
hash = bit32.bxor(hash, shl(hash, 25))
hash = LimitDouble(hash + shr(hash, 6))
return hash
end
local function Getreg(regname)
local PlaceName = regname
if PlaceName == nil then return "Введите название объекта АТД" end
PlaceName = mw.text.trim(PlaceName)
local PlaceHash = MakeHash(PlaceName)
local function FormatH()
return PlaceHash
end
local PlaceData = nil
PlaceData = ArrayPopSRC[PlaceHash]
local LastRecord = 0
for k in pairs(PlaceData) do LastRecord = LastRecord + 1 end
local NumRecord = LastRecord
local function FormatN()
return PlaceData[NumRecord][2]
end
return FormatN()
end
local ArrayReg = {
'Алтай край',
'Амурск област',
'Архангелск област',
'Астрахан област',
'Белгород област',
'Брянск област',
'Владимир област',
'Волгоград област',
'Вологодск област',
'Воронеж област',
'Москва',
'Санкт-Петербург',
'ЖугьутІ автономияб област',
'Забайкал край',
'Иваново област',
'Иркутск област',
'Къабарда-Балкъар',
'Калининград област',
'Калуга област',
'Камчатка край',
'Къарачай-Черкес',
'Карелия Республика',
'Кемерово област',
'Киров област',
'Кострома област',
'Краснодар край',
'Красноярск край',
'Курган област',
'Курск област',
'Ленинград област',
'Липецк област',
'Магадан област',
'Москва област',
'Мурманск област',
'Ненец автономияб икълим',
'Нижегородск област',
'Новгород област',
'Новосибирск област',
'Омск област',
'Оренбург област',
'Орел област',
'Пенза област',
'Перм край',
'Приморск край',
'Псков област',
'Адигея',
'Алтай Республика',
'Башкортостан',
'Бурятия',
'Дагъистан',
'Гъалгъай',
'Калмикия',
'Коми Республика',
'Крим Республика',
'Марий Эл',
'Мордовия',
'Якутия',
'Шималияб Гьиристан',
'Татарстан',
'Тива',
'Хакасия',
'Ростов област',
'Рязан област',
'Самара област',
'Саратов област',
'Сахалин област',
'Свердловск област',
'Севастопол',
'Смоленск област',
'Ставропол край',
'Тамбов област',
'Твер област',
'Томск област',
'Тула област',
'Тюмен област',
'Удмуртия',
'Улянов област',
'Хабаровск край',
'Ханти-Мансийск автономияб икълим — Югра',
'Челябинск област',
'Буртиялъ',
'Чувашия',
'Чукотка автономияб икълим',
'Ямал-Ненец автономияб икълим',
'Ярослав област'}
local NOAOCheck = {'Ненец автономияб икълим гьечІого Архангелск област', 'автономиял икълимал гьечІого Тюмен област'}
local ForceAOCheck = {'Архангелск област', 'Тюмен област'}
local ArrayDatas = {}
local ArrayIndexes = {}
local ArrayTemps = {}
local PopPlace = {}
PopPlace.__index = PopPlace
function PopPlace:gkeyfromVal( t, value )
for k,v in pairs(t) do
if v==value then return k end
end
return ''
end
function table.contains(table, element)
for _, value in pairs(table) do
if value == element then
return true
end
end
return false
end
function PopPlace:NAOCheck(Regarg, NAOARG)
if table.contains(NOAOCheck, Regarg) then
return true
end
if NAOARG=='NOAO' then
if table.contains(ForceAOCheck, Regarg) then
return false
else
return true
end
end
return false
end
function PopPlace:render()
if self.args['ФО'] then
ArrayReg = require('Module:ХалкъалъулКъадаралъулРахъалъБакІИкълимал/'..self.args['ФО'])
end
for p,v in ipairs(ArrayReg) do
ArrayPopCur[v..""]=Getreg(v)
end
local AOBase, NAOPop, TOBase, KHMAOPop, YNAOPop
AOBase = ArrayPopCur['Архангелск област']
NAOPop = ArrayPopCur['Ненец автономияб икълим']
TOBase = ArrayPopCur['Тюмен област']
KHMAOPop = ArrayPopCur['Ханти-Мансийск автономияб икълим — Югра']
YNAOPop = ArrayPopCur['Ямал-Ненец автономияб икълим']
if self:NAOCheck(self.args['1'], self.args['2']) then
local GETArOblForReplace = self:gkeyfromVal(ArrayReg, 'Архангелск област')
local GETTOblForReplace = self:gkeyfromVal(ArrayReg, 'Тюмен област')
ArrayReg[GETArOblForReplace] = tostring(ArrayReg[GETArOblForReplace]..' Ненец автономияб икълим гьечІого')
ArrayReg[GETTOblForReplace] = tostring(ArrayReg[GETTOblForReplace]..' автономиял икълимал гьечІого')
end
for p,v in ipairs(ArrayReg) do
if v=='Ненец автономияб икълим гьечІого Архангелск област' then
ArrayDatas[#ArrayDatas+1] = AOBase-NAOPop
ArrayTemps[v..""]=AOBase-NAOPop
elseif v=='автономиял икълимал гьечІого Тюмен област' then
ArrayDatas[#ArrayDatas+1]=TOBase-KHMAOPop-YNAOPop
ArrayTemps[v..""]=TOBase-KHMAOPop-YNAOPop
else
ArrayDatas[#ArrayDatas+1] = ArrayPopCur[v]
ArrayTemps[v..""]=ArrayPopCur[v]
end
end
table.sort(ArrayDatas, function(a,b) return a>b end)
for _,o in ipairs(ArrayReg) do
ArrayIndexes[o..""] = self:gkeyfromVal(ArrayDatas, ArrayTemps[o..""])
end
--end
ArrayPopSRC, ArrayDatas, ArrayTemps, NOAOCheck, ForceAOCheck, AOBase, NAOPop, TOBase, KHMAOPop, YNAOPop = nil
if table.contains(ArrayReg, self.args['1']) then
ArrayReg = nil
return ArrayIndexes[self.args['1']] or ''
end
end
function PopPlace.new(frame, args)
if not args then
args = require('Module:Arguments').getArgs(frame, {wrappers = {'Template:ХалкъалъулКъадаралъулРахъалъБакІИкълимал'}})
--return
end
local obj = {
frame = frame,
args = args
}
return setmetatable(obj, PopPlace)
end
local p = {}
function p.main(frame)
return PopPlace.new(frame):render()
end
return p