LINUX.ORG.RU

История изменений

Исправление LightDiver, (текущая версия) :

Чот не совпадает..

function numeCod(str)
	local rez
	local r
	local hexstr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWZYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
	local len = string.utf8len(str)
	local lenH = string.utf8len(hexstr)
	for j = 1, len do
		for i = 1, lenH do
			local r1 = string.utf8sub(hexstr,i,i)
			if r1 == string.utf8sub(str,j,j) then
				if j == 1 and j ~= len then
					r = i*128
				elseif j ~= 1 and j ~= len then
					r = (tonumber(r) + i) * 128
				elseif j == 1 and j == len then
					r = i
				elseif j ~= 1 and j == len then
					r = tonumber(r) + i
				end
				break
			end
		end
	end
	print(r)
end

Или я дурак. Шаг первый: умножаем номер первого символа на основание. У меня это 128. Шаг второй: прибавляем полученное к номеру второго символа и умножаем все на основание.. Шаг третий: Прибавляем номер последнего символа. И получаем.. Фигню получаем.

беру я numCod(15746), получаю «ы2». Беру numeCod(«ы2»), получаю 15875. Близко, но не то. Где я дурак?

Я где то на шаг ошибаюсь: FF у меня 2064, а 2064 получаются, как GG

Исправление LightDiver, :

Чот не совпадает..

function numeCod(str)
	local rez
	local r
	local hexstr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWZYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
	local len = string.utf8len(str)
	local lenH = string.utf8len(hexstr)
	for j = 1, len do
		for i = 1, lenH do
			local r1 = string.utf8sub(hexstr,i,i)
			if r1 == string.utf8sub(str,j,j) then
				if j == 1 then
					r = i*128
				elseif j ~= 1 and j ~= len then
					r = (tonumber(r) + i) * 128
				elseif j == len then
					r = tonumber(r) + i
				end
				break
			end
		end
	end
	print(r)
end

Или я дурак. Шаг первый: умножаем номер первого символа на основание. У меня это 128. Шаг второй: прибавляем полученное к номеру второго символа и умножаем все на основание.. Шаг третий: Прибавляем номер последнего символа. И получаем.. Фигню получаем.

беру я numCod(15746), получаю «ы2». Беру numeCod(«ы2»), получаю 15875. Близко, но не то. Где я дурак?

Исправление LightDiver, :

Чот не совпадает..

function numeCod(str)
	local rez
	local r
	local hexstr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWZYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
	local len = string.utf8len(str)
	local lenH = string.utf8len(hexstr)
	for j = 1, len do
		for i = 1, lenH do
			local r1 = string.utf8sub(hexstr,i,i)
			if r1 == string.utf8sub(str,j,j) then
				if j == 1 then
					r = i*128
				elseif j ~= 1 and j ~= len then
					r = (tonumber(r) + i) * 128
				elseif j == len then
					r = tonumber(r) + i
				end
				break
			end
		end
	end
	print(r)
end

Или я дурак. Шаг первый: умножаем номер первого символа на основание. У меня это 128. Шаг второй: прибавляем полученное к номеру второго символа и умножаем все на основание.. Шаг третий: Прибавляем номер последнего символа. И получаем.. Фигню получаем.

беру я numCod(15746), получаю «ы2». Беру numeCod(«ъ1»), получаю 15875. Близко, но не то. Где я дурак?

Исправление LightDiver, :

Чот не совпадает..

function numeCod(str)
	local rez
	local r
	local hexstr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWZYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
	local len = string.utf8len(str)
	local lenH = string.utf8len(hexstr)
	for j = 1, len do
		for i = 1, lenH do
			local r1 = string.utf8sub(hexstr,i,i)
			if r1 == string.utf8sub(str,j,j) then
				if j == 1 then
					r = i*128
				elseif j ~= 1 and j ~= len then
					r = (tonumber(r) + i) * 128
				elseif j == len then
					r = tonumber(r) + i
				end
				break
			end
		end
	end
	print(r)
end

Или я дурак. Шаг первый: умножаем номер первого символа на основание. У меня это 128. Шаг второй: прибавляем полученное к номеру второго символа и умножаем все на основание.. Шаг третий: Прибавляем номер последнего символа. И получаем.. Фигню получаем.

беру я numCod(15617), получаю «ъ1». Беру numeCod(«ъ1»), получаю 15745. Близко, но не то. Где я дурак?

Исходная версия LightDiver, :

Чот не совпадает..

function numeCod(str)
	local rez
	local r
	local hexstr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWZYZabcdefghijklmnopqrstuvwxyzАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя"
	local len = string.utf8len(str)
	local lenH = string.utf8len(hexstr)
	for j = 1, len do
		for i = 1, lenH do
			local r1 = string.utf8sub(hexstr,i,i)
			if r1 == string.utf8sub(str,j,j) then
				if j == 1 then
					r = i*128
				elseif j ~= 1 and j ~= len then
					r = (tonumber(r) + i) * 128
				elseif j == len then
					r = tonumber(r) + 1
				end
				break
			end
		end
	end
	print(r)
end

Или я дурак. Шаг первый: умножаем номер первого символа на основание. У меня это 128. Шаг второй: прибавляем полученное к номеру второго символа и умножаем все на основание.. Шаг третий: Прибавляем номер последнего символа. И получаем.. Фигню получаем.

беру я numCod(15617), получаю «ъ1». Беру numeCod(«ъ1»), получаю 15745. Близко, но не то. Где я дурак?