![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#41
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз ![]() |
Д'якон, нифига не понял. Как я понял, речь о чем-то медленном и вряд ли работающем.
![]() В любом случае алгоритм должен вначале считать площади, а потом что-либо удалять. То, про что говорит Гамодел - это, похоже, тот же простой алгоритм, о котором говорил я. Цитата(Chrono Syndrome @ 08 Mar 2008, 16:41) Цитата А простой алгоритм такой: находим первую незакрашенную точку и шуруем от нее чем-то типа FloodFill'а. Т.е. закрашиваем ее, просматриваем соседей и с незкраенными рекуррентно делаем то же самое. Потом так же закрашиваем 2ю часть области, а потом убираем меньшую по кол-ву точек. Скорость уменьшится максимум раз в 10. 1) А если отсечена большая часть поля ? 2) А в случае самопересечения что делать ? 1) Я имел в виду, что это алгоритм разбития поля на первую часть и вторую. Мы их помечаем в массиве (скажем, 1 и 2ками) и попутно считаем кол-во клеток в каждой. А потом уж удалить меньшую - дело техники. 2) В оригинале игрок при этом, кажется, умирал. Но если они допустимы, то надо продолжать так же - если находим непомеченную точку, заливаем все прилежащие точки 3ками. Наименьшую по площади фигуру удаляем. По сути, алгоритм от этого не усложняется. А вот тот алгоритм, который писал Д'якон и я, рассчитан исключительно на отсутствие самопересечений. -------------------- ДНК банана на 50% состоит из человека.
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#42
|
![]() |
//Д'якон, нифига не понял. Как я понял, речь о чем-то медленном и вряд ли работающем.
![]() |
|
|
![]()
Сообщение
#43
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
ну напиши его чтобы мы могли увидеть код и по коду понять. я ведь для тебя написал
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#44
|
![]() |
Вполне нормальный и работающий алгоритм на мой взгляд. На счет скорости не знаю, не испытывал
![]() |
|
|
![]()
Сообщение
#45
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз ![]() |
Кажется, начинаю понимать, но как тут получить результирующие площяди 2 фигур?
-------------------- ДНК банана на 50% состоит из человека.
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#46
|
![]() |
Игрок идет по полю (размером 100х100) и сохраняет координаты передвежения в масссивах Koordх и Koordy с кол-вом записей n
Pol#x и Pol#y - массивы, в которых сохраняются посчитанные координаты. kol# - кол-во подсчитанных координат (можно конечно использовать двухмерные массивы) 1) При пересечении игроком края поля: Запускаем цикл обработки поля (может где-то пропустил begin или end. Короче к синтаксису сильно не придерайтесь) //первый цикл For y:=1 to 100 do begin F:=1 For x:=1 to 100 do begin For i:=1 to n do begin If Koordx[i] = x then begin If Koordy[i]=y then If F=0 then F:=1 else F:=0; end else kol1:=kol1+1; Pol1x[kol1]:=x; Pol1y[kol1]:=y; end; end; end; //второй цикл For x:=1 to 100 do begin F:=1 For y:=1 to 100 do begin For i:=1 to n do begin If Koordx[i] = x then begin If Koordy[i]=y then If F=0 then F:=1 else F:=0; end else kol2:=kol1+1; Pol2x[kol2]:=x; Pol2y[kol2]:=y; end; end; //третий цикл For x:=1 to 100 do begin F:=1 For y:=100 to 1 do begin For i:=1 to n do begin If Koordx[i] = x then begin If Koordy[i]=y then If F=0 then F:=1 else F:=0; end else kol3:=kol1+1; Pol3x[kol3]:=x; Pol3y[kol3]:=y; end; end; //четвертый цикл For y:=1 to 100 do begin F:=1 For x:=100 to 1 do begin For i:=1 to n do begin If Koordx[i] = x then begin If Koordy[i]=y then If F=0 then F:=1 else F:=0; end else kol4:=kol4+1; Pol4x[kol1]:=x; Pol4y[kol1]:=y; end; end; end; Долее сравниваем kol1 kol2 kol3 kol4 и выбрав наименьшее удаляем координаты хранящиесе в массивах Pol#x и Pol#y - соответственно 2) При пересечении игроком своего пути: |
|
|
![]()
Сообщение
#47
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз ![]() |
Если я правильно понял последнюю фразу в 1), то на твоей картинке удалится маленький кусочек справа, являющийся частью одной из областей...
Сам код не читал. -------------------- ДНК банана на 50% состоит из человека.
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#48
|
![]() |
нет
|
|
|
![]()
Сообщение
#49
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз ![]() |
А, все наоборот - kol1, kol2, kol3 и kol4 - это то, что на картинке заштриховано?
Тогда неправильно отработает случай, когда внешняя часть суммарно больше внутренней. -------------------- ДНК банана на 50% состоит из человека.
|
|
|
Гость_Д'якон_* |
![]()
Сообщение
#50
|
![]() |
Почему?
|
|
|
![]()
Сообщение
#51
|
|
![]() Яблочный произвол! Сообщений: 11 080 Спасибо сказали: 3988 раз ![]() |
по-моему я понял алгоритм Дьякона
|
|
|
![]()
Сообщение
#52
|
|
![]() В миру GrayFace Сообщений: 2 529 Спасибо сказали: 817 раз ![]() |
Цитата(Д'якон @ 11 Mar 2008, 03:55) Почему? Ну ведь у тебя на картинках везде присутствует только часть внешней области. Они меньше внутенности. Но когда сама внешняя область при этом может быть больше. -------------------- ДНК банана на 50% состоит из человека.
|
|
|
![]()
Сообщение
#53
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз ![]() |
Можете написать алгоритм (код на Паскале и Бейсик) генерации случайной строки (пароля) заданной длины...
|
|
|
![]()
Сообщение
#54
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Ну, допустим, вот (навскидку):
Код Procedure.S GeneratePass(Len)
Define I, Pass.S For I = 1 To Len Pass + Chr(Random(122 - 97) + 97) Next I ProcedureReturn Pass EndProcedure -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#55
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз ![]() |
Это на чем?
пароль желательно чтоб содержал как цифры (большие и маленькие), как и цифры. а почему такая формула Chr(Random(122 - 97) + 97)??? |
|
|
![]()
Сообщение
#56
|
|
Immortal Сообщений: 1 664 Спасибо сказали: 30 раз ![]() |
Большие и маленькие цифры ?
![]() P.S. Если просто рандом брали - могли бы выпадать коды 0, 1, итд - для которых нет символов. Потом Хрона и сделала чтобы все коды были в нужных пределах - чтобы коду соответствовала буква... -------------------- |
|
|
![]()
Сообщение
#57
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата Это на чем? PureBASIC v4.0 Цитата пароль желательно чтоб содержал как цифры (большие и маленькие), как и цифры. А другие символы допустимы ? Цитата а почему такая формула Chr(Random(122 - 97) + 97)??? Подборка по ASCII. P.S. Так пойдет ? Код Procedure.S GeneratePass(Len)
#PassChars = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" Define I, Pass.S Define PassCharsCount = Len(#PassChars) - 1 For I = 1 To Len Pass + Mid(#PassChars, Random(PassCharsCount) + 1, 1) Next I ProcedureReturn Pass EndProcedure -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#58
|
|
![]() Князь Бореи Сообщений: 5 171 Спасибо сказали: 1349 раз ![]() |
а на Бейсик нельзя никак? нет у меня этого PureBASIC v4.0, да и качать неохото
Я вот так переоформили Private Sub CommandButton10_Click() Dim i, pass, n n = 128 Randomize For i = 1 To n pass = pass + Chr(Rnd(255) + 97) Next i MsgBox (pass) End Sub но у меня пароль получается состоит только из а и b |
|
|
![]()
Сообщение
#59
|
|
![]() •●Revolucionario●• Сообщений: 2 467 Спасибо сказали: 5936 раз ![]() |
Цитата а на Бейсик нельзя никак? нет у меня этого PureBASIC v4.0 Раскрой мне, плиз, смысл этой фразы. Цитата но у меня пароль получается состоит только из а и b facepalm.jpg Да, такое бывает, когда лепишь абы что. Можешь теперь попробовать с моей формулой. -------------------- life MOV.I #life+1, *life
האם יש זמן לעצור ? |
|
|
![]()
Сообщение
#60
|
|
Newbie Сообщений: 21 Спасибо сказали: 0 раз ![]() |
2 izrukvruki :
1. pass - должна быть строковой переменной. 2. Буквы, цифры, знаки препинания и классические спецсимволы в ASC- это символы с 33-го по 126-й. А ты пытаешься использовать символы с номерами 97-352. При том, что их всего 255. Не лучший вариант, не так ли? ) Используй алгоритм, предложенный Хроно. Там используется не таблица кодов, а переменная-банк символов, что удобнее. Это хрестоматийный вариант- гибок и проверен временем. Вот код для Блиц-Бейсиков, оформленный более понятно и получивший отключаемую фичу: разбиение пароля на блоки-группы символов. Код SeedRnd MilliSecs();рандомизатор.
Global Symbols$="ABCDEFGHIJKLMOPQRSTUVWXYZ0123456789";переменная-набор символов, из которых будет строиться пароль Local NGroups = 5;Кол-во групп символов, на которые будет разбит пароль Local NSymbols=5;Кол-во символов в каждой группе Global Separator$="-";Символ-разделитель для групп символов Global Password$; строковая переменная для хранения пароля For Group = 1 To NGroups For Symbol=1 To NSymbols ;строим группу символов, произвольно выбирая их по одному из переменной-набора NSymbol=Rnd(Len(Symbols)-1)+1 Password = Password + Mid( Symbols,NSymbol,1) Next ;вставляем разделительный символ в конце каждой группы, если после нее будут другие группы If Group<NGroups Then Password = Password + Separator Next ;Выводим сгенерированный пароль на экран и завершаем программу Print Password WaitKey() End |
|
|
![]() ![]() |
Текстовая версия | Сейчас: 21 July 2025 - 04:21 |
Copyright by Алексей Крючков
![]() Programming by Degtyarev Dmitry |
|