Добавлен ofeerist,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Наработка позволяет разделить string на массив string'ов, 1 элемент - 1 слово. "Раз, dva, три" > "Раз", ",", "dva", ",", "три"
Также возможно разделить string на набор символов. "text" > "t", "e", "x", "t" | "Текст" > "Т", "е", "к", "с", "т"
Перемешивание всех букв слова. "text" > "xtte" | "Текст" > "eТстк"
Перемешивание всех букв, кроме первого и последнего, в таком случае сохраняется читабельность. "text" > "txet" | "Текст" > "Тксет"
Также возможно разделить string на набор символов. "text" > "t", "e", "x", "t" | "Текст" > "Т", "е", "к", "с", "т"
Перемешивание всех букв слова. "text" > "xtte" | "Текст" > "eТстк"
Перемешивание всех букв, кроме первого и последнего, в таком случае сохраняется читабельность. "text" > "txet" | "Текст" > "Тксет"
function Split takes string s returns nothing
function SplitLetter takes string s, boolean cyrillic returns nothing
function Shuffle takes string s, boolean cyrillic returns string
function HalfShuffle takes string s, boolean cyrillic returns string
Соответственно.
Так как, jass не позволяет вернуть массив, есть переменные SplitedString, SplitedLetter, которые хранят последние массивы.
Функции очистки
function ClearSplitedString takes nothing returns nothing
function ClearSplitedLetter takes nothing returns nothing
Пример использования
Поднимается резонный вопрос, зачем?
- Функциями тасовки можно скрыть текст от игрока или показать сложность текста для понимания. изображение ниже
- С помощью split можно позволить прописывать команды одним сообщением. (Передача аргументов также возможна) изображение ниже
- С помощью того-же split можно искать и модифицировать отдельные слова и например, сделать такой rp чат изображение ниже
Код всех функций
globals
string array SplitedString[500]
string array SplitedLetter[50]
endglobals
function ClearSplitedString takes nothing returns nothing
local integer i = 0
loop
exitwhen(i >= 500)
set SplitedString[i] = ""
set i = i + 1
endloop
endfunction
function Split takes string s returns nothing
local integer i = 0
local integer j = 0
local string ts = ""
local string st
call ClearSplitedString()
set s = s + " "
loop
exitwhen(i >= StringLength(s))
set st = SubString(s, i, i + 1)
if st != " " then
if st != "." and st != "," and st != "!" and st != "?" and st != "'" and st != ":" then // можно еще знаков препинания добавить
set ts = ts + st
else
set SplitedString[j] = ts
set ts = st
set j = j + 1
endif
else
set SplitedString[j] = ts
set ts = ""
set j = j + 1
endif
set i = i + 1
endloop
endfunction
function ClearSplitedLetter takes nothing returns nothing
local integer i = 0
loop
exitwhen(i >= 50)
set SplitedLetter[i] = ""
set i = i + 1
endloop
endfunction
function SplitLetter takes string s, boolean cyrillic returns nothing
local integer i = 0
local integer x = 1
if cyrillic then
set x = 2
endif
call ClearSplitedLetter()
set s = s + " "
loop
exitwhen(i >= StringLength(s))
set SplitedLetter[i] = SubString(s, i, i + x)
set i = i + 1
endloop
endfunction
function Shuffle takes string s, boolean cyrillic returns string
local integer i = 0
local integer r = 0
local integer len
local string ts
local string array ss
local integer x = 1
if cyrillic then
set x = 2
endif
if s != "." and s != "," and s != "!" and s != "?" and s != "'" and s != ":" then
call SplitLetter(s, cyrillic)
loop
exitwhen(i >= 50)
if SplitedLetter[i] != "" then
set ss[i] = SplitedLetter[i]
set len = i
else
set i = 50
endif
set i = i + x
endloop
set i = 0
loop
exitwhen(i >= len-1)
set r = GetRandomInt(0, len-1)
set ts = ss[r]
set ss[r] = ss[i]
set ss[i] = ts
set i = i + 1
endloop
call ClearSplitedLetter()
set ts = ""
set i = 0
loop
exitwhen(i >= len)
set ts = ts + ss[i]
set i = i + 1
endloop
return ts
else
return s
endif
endfunction
function HalfShuffle takes string s, boolean cyrillic returns string
local string f
local string l
local string c
local integer x = 1
if cyrillic then
set x = 2
endif
if s != "." and s != "," and s != "!" and s != "?" and s != "'" and s != ":" then
set f = SubString(s, 0, x)
set l = SubString(s, StringLength(s) - x, StringLength(s))
set c = Shuffle(SubString(s, x, StringLength(s) - x), cyrillic)
return f + c + l
else
return s
endif
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован host_pi
что за мода у этих кодописарей задавать границы чисел на свой рандомный лад?
что тут 500 кусков вместо 8192, доступных в жасе
что в 99,9999% камерахаков вечно от 1650 до 3300 вместо 0-10000
ещё интереснее, что автору пришлось самому пилить сплит в 2к21, ведь до него никто этого для джаса не делал? иначе зачем