XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
J
expert
offline
Опыт: 48,747
Активность:
кстате... я за красивый код:) хотя такие у меня получаются редко... вообщем тоадкоп в сейленсе.. но он явно отпостил бы фразу в который сказал бы чтобы я выложил код... но нет.. я сначало проверю вашы.. т.к. несмотрел еще...
Старый 11.07.2007, 20:47
Toadcop

offline
Опыт: 53,013
Активность:
выставляй алг...
Цитата:
ну вообщем джазер ты
Старый 16.07.2007, 01:18
J
expert
offline
Опыт: 48,747
Активность:
Провел тест:
Строка:
"|cFFFF0000Jass|r – это |cFF00FF00интерпретируемый язык|r (скр|cFF0000FFипт), к|cFF00FFFFоторый использует вар для со|rздан|rия сценариев, с помощью |cFFFF0000Jass|r-а можно управ|cFF0000FFлять только игровыми проце|rссами"
Количество букв:
60
вот результат:

Протестил все коды кроме тоадкопика, т.к. он не удовлетворяет условию оформления что указаны в первом посте.
думаю победителя пока нет, т.к. нет ниодного варианта, что в точности походил бы на мой
если хотите, можете доделать чтобы норм работало...
Старый 18.07.2007, 21:27
p01nTT

offline
Опыт: 10,760
Активность:
и главное - у каждого свои проблемы )
Старый 18.07.2007, 22:55
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
блин :\ я когда редактировал то небольшую ашипку допустил. Вот норм
» код

Код:
function PriceStr takes string Str, integer Amount returns integer
    local integer Index = 0
    local integer i = 0
    local integer lst = 0
    local integer lwd = 0
    local integer tags = 0
    local integer min = 0
    local integer inW = 0
    local integer clear = 0
    local string s = ""
    local string word = ""
    local string array color
    local string tag = ""
    local string mark = "" 
    local boolean find = false
    local boolean end = false
    loop
    exitwhen end
        set i = i + 1
        set mark = SubString(Str, i - 1, i)
        if mark == "|" then
            set tag = StringCase(SubString(Str, i, i + 1), false)
            if tag == "c" then
                if word != "" then
                    set inW = inW + 1
                endif
                set word = word + SubString(Str, i - 1, i + 9)
                set tags = tags + 1
                set color[tags] = SubString(Str, i - 1, i + 9)
                set i=i+9
            elseif tag == "r" then
                if word == "" then
                    set s = s + "|r"
                else
                    if inW > 0 then
                        set inW = inW - 1
                    endif
                    set word = word + "|r"
                    set clear = clear + 1
                    if tags > 1 then
                        set word = word + color[tags - clear]
                    endif
                endif
                set i = i + 1
            elseif tag == "n" then
                if s != "" then
                    set word = " " + word
                    set lwd = lwd + 1
                else
                    set word = color[tags] + word
                endif
                if lwd + lst > Amount then
                    set udg_PartStr[Index] = s
                    set Index = Index + 1
                    set udg_PartStr[Index] = color[tags] + word
                    set Index = Index + 1
                else
                    set udg_PartStr[Index] = s + word
                    set Index = Index + 1
                endif
                set s = ""
                set word = ""
                set lwd = 0
                set lst = 0
                set i = i + 1
                set find = false
            endif
        else
            if find and (mark == " " or mark == "") then
                if mark == " " then
                    if lst + 1 + lwd > Amount then
                        if s == "" then
                            if inW > 0 then
                                set udg_PartStr[Index] = color[tags - inW] + word
                                set inW = 0
                            else
                                set udg_PartStr[Index] = color[tags] + word
                            endif
                            set Index = Index + 1
                            set lst = lwd
                        else
                            set udg_PartStr[Index] = s
                            set Index = Index + 1
                            if inW > 0 then
                                set s = color[tags - inW] + word
                                set inW = 0
                            else
                                set s = color[tags] + word
                            endif
                            set lst = lwd
                            endif
                       else
                           set inW = 0
                           if s != "" then
                               set s = s + " " + word
                               set lst = lst + 1 + lwd
                           else
                               set s = color[tags] + word
                               set lst = lwd
                           endif
                    endif
                    set word = ""
                    set lwd = 0
                    set find = false
                else
                    if s != "" then
                        if lst + 1 + lwd > Amount then
                            set udg_PartStr[Index] = s
                            set Index = Index + 1
                            set udg_PartStr[Index] = color[tags] + word
                        else
                            set udg_PartStr[Index] = s + " " + word
                        endif
                    else
                        set udg_PartStr[Index] = color[tags] + word
                    endif
                    set end = true
                endif
                if clear > 0 then
                    set tags = tags - clear
                    set clear = 0
                endif
            else
                if mark == " " then
                    if lst + 1 > Amount then
                        set udg_PartStr[Index] = s
                        set Index = Index + 1
                        set s = ""
                        set lst = 0
                    endif
                    set s = s + " "
                    set lst = lst + 1
                elseif mark == "" then
                   set udg_PartStr[Index] = s
                   set end=true
                else
                   if not find then
                      set find = true
                   endif
                   set word = word + mark
                   set lwd = lwd + 1
                endif
            endif
        endif
    endloop
    return Index
endfunction

ЗЫ поиздевался, и сделал "красиво"(имхо бред :))
Старый 19.07.2007, 00:01
Toadcop

offline
Опыт: 53,013
Активность:
Цитата:
Протестил все коды кроме тоадкопика
ну это было ясно 8-) ты за тупой что бы смочь заюзать мой код...
Старый 19.07.2007, 01:11
J
expert
offline
Опыт: 48,747
Активность:
Toadcop я просто даже не хочу пытатся его проверить, остальные коды я просто вставил, и все было безошибок, а твой сделан через ass, может и поумному но через ass
MrSmiLe ща проверю...

Jon добавил:
MrSmiLe теперь у тебя опсолютно правельно.. ща посмотрим что в ближайшее время скажут другие, пока подозреваемый победитель ты...

Jon добавил:
Markiz приглядись.. у тебя каждая новая строка начинается с пробела...
Старый 19.07.2007, 07:49
J
expert
offline
Опыт: 48,747
Активность:
вообщем победитель определен, это MrSmiLe, в ближайшее время он получит 600 опыта...
выкладываю свой код с его...
также выкладываю тест карту на которой я проводил тесты...

Jon

Цитата:
Код:
function PriceStr takes string Str, integer Amount returns integer
    local integer Index = -1
    local integer a = 0
    local integer p = 0
    local integer i = 0
    local integer Length = StringLength(Str)
    local integer Len
    local string  array StrTag
    local integer array LenPart
    local integer AmountTag = 0
    local string Simvol
    local boolean bool
    loop
        exitwhen i > Length
        set bool = (i-p) >= Amount
        if (SubString(Str, i, i+1) == " ") or (i == Length) or bool then
            set Index = Index + 1
            set udg_PartStr[Index] = SubString(Str, p, i)
            set LenPart[Index] = StringLength(udg_PartStr[Index])
            set Len = LenPart[Index]-1
            if AmountTag != 0 then
                set udg_PartStr[Index] = StrTag[AmountTag] + udg_PartStr[Index]
                set a = 10
                set Len = Len + 10
            else
                set a = 0
            endif
            loop
                if a > Len then
                    if AmountTag > 0 then
                        set udg_PartStr[Index] = udg_PartStr[Index] + "|r"
                    endif
                    exitwhen true
                endif
                set Simvol = SubString(udg_PartStr[Index], a, a+2)
                if Simvol == "|c" then
                    set AmountTag = AmountTag + 1
                    set StrTag[AmountTag] = SubString(udg_PartStr[Index], a, a+10)
                    set LenPart[Index] = LenPart[Index] - 10
                elseif Simvol == "|r" and AmountTag > 0 then
                    set AmountTag = AmountTag - 1
                    set LenPart[Index] = LenPart[Index] - 2
                    if AmountTag != 0 then
                        set udg_PartStr[Index] = SubString(udg_PartStr[Index],0,a+2) + StrTag[AmountTag] + SubString(udg_PartStr[Index],a+2, StringLength(udg_PartStr[Index]))
                        set a = a + 10
                        set Len = Len + 10
                    endif
                endif
                set a = a + 1
            endloop
            if bool then
                set p = i
                set i = i - 1
            else
                set p = i+1
            endif
        endif
        set i = i+1
    endloop
    //return Index
    set i = 0
    set a = Index
    set Index = -1
    set Str = ""
    set Length = 0  
    loop
        exitwhen i > a
        if (Length + LenPart[i]) < Amount and (i != a) then
            set Str    =  Str    + udg_PartStr[i] + " "
            set Length =  Length + LenPart[i]     + 1     
        else 
            set Index = Index+1
            if i != a then
                set udg_PartStr[Index] = Str
                set Str    = udg_PartStr[i] + " "
                set Length = LenPart[i]
            elseif (Length + LenPart[i]) < Amount then
                set Str = Str + udg_PartStr[i]
                set udg_PartStr[Index] = Str
            else            
                set udg_PartStr[Index] = Str      
                set Index = Index+1   
                set udg_PartStr[Index] = udg_PartStr[i]            
            endif
        endif      
        set i = i + 1
    endloop
    return Index
endfunction
Я признаю что в коде есть баг при символах меньше или ~ 10 код работает малость не очень корректно...
однако есть и небольшая фича... раскоментарте одну строчку которая есть в коде //return Index и на экран будут выводится не разделеная строка... а каждое слово отдельно... действие цветовых тегов сохраняется...
т.е. все эти слова уже будут заключены в массив udg_PartStr, попробуйте...

MrSmiLe

Цитата:
Код:
function PriceStr takes string Str, integer Amount returns integer
    local integer Index = 0
    local integer i = 0
    local integer lst = 0
    local integer lwd = 0
    local integer tags = 0
    local integer min = 0
    local integer inW = 0
    local integer clear = 0
    local string s = ""
    local string word = ""
    local string array color
    local string tag = ""
    local string mark = "" 
    local boolean find = false
    local boolean end = false
    loop
        exitwhen end
        set i = i + 1
        set mark = SubString(Str, i - 1, i)
        if mark == "|" then
            set tag = StringCase(SubString(Str, i, i + 1), false)
            if tag == "c" then
                if word != "" then
                    set inW = inW + 1
                endif
                set word = word + SubString(Str, i - 1, i + 9)
                set tags = tags + 1
                set color[tags] = SubString(Str, i - 1, i + 9)
                set i=i+9
            elseif tag == "r" then
                if word == "" then
                    set s = s + "|r"
                else
                    if inW > 0 then
                        set inW = inW - 1
                    endif
                    set word = word + "|r"
                    set clear = clear + 1
                    if tags > 1 then
                        set word = word + color[tags - clear]
                    endif
                endif
                set i = i + 1
            elseif tag == "n" then
                if s != "" then
                    set word = " " + word
                    set lwd = lwd + 1
                else
                    set word = color[tags] + word
                endif
                if lwd + lst > Amount then
                    set udg_PartStr[Index] = s
                    set Index = Index + 1
                    set udg_PartStr[Index] = color[tags] + word
                    set Index = Index + 1
                else
                    set udg_PartStr[Index] = s + word
                    set Index = Index + 1
                endif
                set s = ""
                set word = ""
                set lwd = 0
                set lst = 0
                set i = i + 1
                set find = false
            endif
        else
            if find and (mark == " " or mark == "") then
                if mark == " " then
                    if lst + 1 + lwd > Amount then
                        if s == "" then
                            if inW > 0 then
                                set udg_PartStr[Index] = color[tags - inW] + word
                                set inW = 0
                            else
                                set udg_PartStr[Index] = color[tags] + word
                            endif
                            set Index = Index + 1
                            set lst = lwd
                        else
                            set udg_PartStr[Index] = s
                            set Index = Index + 1
                            if inW > 0 then
                                set s = color[tags - inW] + word
                                set inW = 0
                            else
                                set s = color[tags] + word
                            endif
                            set lst = lwd
                            endif
                       else
                           set inW = 0
                           if s != "" then
                               set s = s + " " + word
                               set lst = lst + 1 + lwd
                           else
                               set s = color[tags] + word
                               set lst = lwd
                           endif
                    endif
                    set word = ""
                    set lwd = 0
                    set find = false
                else
                    if s != "" then
                        if lst + 1 + lwd > Amount then
                            set udg_PartStr[Index] = s
                            set Index = Index + 1
                            set udg_PartStr[Index] = color[tags] + word
                        else
                            set udg_PartStr[Index] = s + " " + word
                        endif
                    else
                        set udg_PartStr[Index] = color[tags] + word
                    endif
                    set end = true
                endif
                if clear > 0 then
                    set tags = tags - clear
                    set clear = 0
                endif
            else
                if mark == " " then
                    if lst + 1 > Amount then
                        set udg_PartStr[Index] = s
                        set Index = Index + 1
                        set s = ""
                        set lst = 0
                    endif
                    set s = s + " "
                    set lst = lst + 1
                elseif mark == "" then
                   set udg_PartStr[Index] = s
                   set end=true
                else
                   if not find then
                      set find = true
                   endif
                   set word = word + mark
                   set lwd = lwd + 1
                endif
            endif
        endif
    endloop
    return Index
endfunction

тест карта обновлена...
Прикрепленные файлы
Тип файла: w3x Задача по работе со строками.w3x (21.0 Кбайт, 31 просмотров )

Отредактировано Jon, 20.07.2007 в 18:08.
Старый 20.07.2007, 10:16
Toadcop

offline
Опыт: 53,013
Активность:
Jon пффф.... <_< читай мои посты на 2,3 страницах... я имею ввиду то что я писал что у смайла the best... хоть я его напрямую не тестил. опыт, скилл это ВСЁ !

Toadcop добавил:
Цитата:
Я признаю что в коде есть баг при символах меньше или ~ 10 код работает малость не очень корректно...
однако есть и небольшая фича... раскоментарте одну строчку которая есть в коде //return Index и на экран будут выводится не разделеная строка... а каждое слово отдельно... действие цветовых тегов сохраняется...
т.е. все эти слова уже будут заключены в массив udg_PartStr, попробуйте...
а кому он кроме тебя нужен ? О_о т.е. алгоритм
Старый 20.07.2007, 14:28
J
expert
offline
Опыт: 48,747
Активность:
Цитата:
Jon пффф.... <_< читай мои посты на 2,3 страницах... я имею ввиду то что я писал что у смайла the best... хоть я его напрямую не тестил. опыт, скилл это ВСЁ !
и?
Цитата:
а кому он кроме тебя нужен ? О_о т.е. алгоритм

хм.. думаю никому... но сдесь большую ценость они составляют как учебный матерял, для тех кто хочет научится кодить.. могут поразбиратся...
но для меня это нашло практическое применение, такчто неисключено что найдется и для другово...
это весьма сложный вопрс без точного ответа.. но в _данной_ теме эти алгоритмы расматриваются как ответ к задачам, и не более...
Старый 20.07.2007, 16:03
Toadcop

offline
Опыт: 53,013
Активность:
я имелл ввиду тестить ту парашу которую я в комент-тег взял ^^ т.е. там откоментировать ретурн и т.д.
Старый 20.07.2007, 16:33
J
expert
offline
Опыт: 48,747
Активность:
хз.. включи воображалку... если ее у тебя нет, то я тут нипричем... может комуто надо будет провести какиенибудь манипуляции со словами в строке с сохранением на них цветовых тегах... если ты не видиш практические применение это незначит что его нет...
я могу с большой увереностью сказать что никому это не пригодится именно на практике, но вероятность есть... такчто давай небудем разводить спор на ровном месте ниочем...

Отредактировано Jon, 22.07.2007 в 02:26.
Старый 20.07.2007, 16:55
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 03:05.