1 (изменено: aktor311, 2017-09-23 15:59:20)

Тема: AHK: Поиск последовательности.

Возможно ли в AHK после введения цифр 0-9 (0123456789) в произвольном порядке, выполнить поиск максимально большой серии последовательных цифр в порядке возрастания, а потом сложить все цифры содержащиеся в этой серии?
Например:
12345651784132156
Здесь последовательность 123456 самая длинная в порядке возрастания.
И нужно сделать это:
1+2+3+4+5+6=21
Это все должно быть автоматизированно, кроме ввода самих цифр. Они вводятся с клавиатуры через Input.
Если возможно, то прошу помочь.

2

Re: AHK: Поиск последовательности.

str = 12345651784132156

Loop, Parse, % (str "0", l := r := s := 0, pr := "") 
	f := A_LoopField, (pr = "" || f - pr = 1) ? (pr := f, l++, s += f) 
	: ((l > r && (r := l, m := s)), l := s := 0, pr := "")
 
MsgBox % m
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

3

Re: AHK: Поиск последовательности.

Или так.

str = 123406789

Loop, Parse, % (str "0", l := r := s := m := 0, pr := "") 
	f := A_LoopField, (pr = "" || f - pr = 1) ? (pr := f, l++, s += f) 
	: ((l >= r && (r := l, m := s > m ? s : m)), l := s := 0, pr := "")
 
MsgBox % m
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

4

Re: AHK: Поиск последовательности.

Спасибо.
Не подскажите, почему в конце в Msgbox не выводится ничего?

Gui, Add, ListBox, x10 y10 w200 h240 vDm
Gui, Add, Button, y+ w200 h30 gSave1, Добавить цифры
Gui, Show,,%A_ScriptName%
return
Save1:
MsgBox, Запущено
Input , Твои_цифры, L10, Esc
GuiControl,,Dm,%Твои_цифры%
MsgBox, Введено
str := Dm
Loop, Parse, % (str "0", l := r := s := 0, pr := "") 
	f := A_LoopField, (pr = "" || f - pr = 1) ? (pr := f, l++, s += f) 
	: ((l > r && (r := l, m := s)), l := s := 0, pr := "")

MsgBox, % m
return
GuiClose:
GuiEscape:
ExitApp

5 (изменено: stealzy, 2017-09-23 21:17:50)

Re: AHK: Поиск последовательности.

MsgBox % "Введено " Dm ; что на входе, то и на выходе

Зачем там GuiControl? Справку хоть посмотрите по команде, у вас там ахинея в параметрах.

6

Re: AHK: Поиск последовательности.

stealzy
GuiControl использую что бы цифры, которые я ввел через Input, были показаны в Listbox.

Gui, Add, ListBox, x10 y10 w200 h240 vDm
Gui, Add, Button, y+ w200 h30 gSave1, Добавить цифры
Gui, Show,,%A_ScriptName%

Save1:
MsgBox, Запущено
Input , Твои_цифры, L10, Esc
GuiControl,,Dm,%Твои_цифры%
MsgBox, Введено
str := Dm
Loop, Parse, % (str "0", l := r := s := 0, pr := "") 
	f := A_LoopField, (pr = "" || f - pr = 1) ? (pr := f, l++, s += f) 
	: ((l > r && (r := l, m := s)), l := s := 0, pr := "")

MsgBox, % Dm
return
GuiClose:
GuiEscape:
ExitApp

Поменял выход на Dm. Ничего не изменилось.

7

Re: AHK: Поиск последовательности.

Gui, Add, ListBox, x10 y10 w200 h240 vDm
Gui, Add, Button, y+ w200 h30 gSave1, Добавить цифры
Gui, Show,,%A_ScriptName%
return

Save1: 
	MsgBox, Запущено
	Input, Твои_цифры, L10, Esc
	GuiControl,,Dm,%Твои_цифры%
	MsgBox, Введено
	str := Твои_цифры
	Loop, Parse, % (str "0", l := r := s := 0, pr := "") 
		f := A_LoopField, (pr = "" || f - pr = 1) ? (pr := f, l++, s += f) 
		: ((l > r && (r := l, m := s)), l := s := 0, pr := "")

	MsgBox, % m
	return
	
GuiClose:
GuiEscape:
	ExitApp

Так работает, только зачем.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

8 (изменено: svoboden, 2017-11-08 20:40:26)

Re: AHK: Поиск последовательности.

Заметил ошибку у многоуважаемого serzh82saratov. У меня такой код выдает - 15:

str = 68376123454132178

 if str contains 1
q := 1
 if str contains 12
q := 1+2
 if str contains 123
q := 1+2+3
 if str contains 1234
q := 1+2+3+4
 if str contains 12345
q := 1+2+3+4+5
 if str contains 123456
q := 1+2+3+4+5+6
 if str contains 1234567
q := 1+2+3+4+5+6+7
 if str contains 12345678
q := 1+2+3+4+5+6+7+8
 if str contains 123456789
q := 1+2+3+4+5+6+7+8+9

MsgBox % q

, а в коде serzh82saratov - 14.

9

Re: AHK: Поиск последовательности.

Так можно:

str = 68376123454132178
Prev := "", n := MaxN := Sum := MaxSum := 0
Loop, Parse, str
{
   if (A_LoopField -1 = Prev)
      Sum += A_LoopField, n++
   else
      Sum := A_LoopField, n := 1
   if (n > maxN)
      maxN := n, MaxSum := Sum
   Prev := A_LoopField
}
msgbox % MaxSum

10 (изменено: serzh82saratov, 2017-10-03 00:44:00)

Re: AHK: Поиск последовательности.

Может быть, так:

str = 68376123454132178

Loop, Parse, % (str, l := s := 0, pr := "", a := {})
	f := A_LoopField, (f - pr = 1) ? (s += f, (a[++l] < s && a[l] := s)) : (l := 1, s := f), pr := f

MsgBox % str "`n`nсумма: " a[a.MaxIndex()] "`nдлинна последовательности: " a.MaxIndex()

Malcev
Насколько я понял, неможно.

str = 123405678
Prev := "", n := MaxN := Sum := MaxSum := 0
Loop, Parse, str
{
   if (A_LoopField -1 = Prev)
      Sum += A_LoopField, n++
   else
      Sum := A_LoopField, n := 1
   if (n > maxN)
      maxN := n, MaxSum := Sum
   Prev := A_LoopField
}
msgbox % MaxSum
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

11

Re: AHK: Поиск последовательности.

А что он должен показать?
Как я понял задание, то либо 1+2+3+4, либо 5+6+7+8.
В зхадание не уточняется какую последовательность показывать при одинаковых сериях, поэтому я выбрал первую.

12

Re: AHK: Поиск последовательности.

aktor311 пишет:

Здесь последовательность ******* самая длинная в порядке возрастания.

Я про порядок возрастания так понял. Пусть ТС уточнит... Ну а так, да, во втором посте я также предположил.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).