Тема: AHK: Поменять расположение чисел с горизонтального в вертикальное
Имею такую комбинацию чисел (как пример)
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
Надо превратить их в
1, 5, 9
2, 6, 10
3, 7, 11
4, 8, 12
Голову уже сломал, как сделать превращение.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Серый форум → Общение → AutoHotkey → AHK: Поменять расположение чисел с горизонтального в вертикальное
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Имею такую комбинацию чисел (как пример)
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
Надо превратить их в
1, 5, 9
2, 6, 10
3, 7, 11
4, 8, 12
Голову уже сломал, как сделать превращение.
Это называется "транспонировать матрицу"? Тогда: Элемент(x,y)<=>Элемент(y,x)
К сожалению мне это мало, что дает.
Наткнулся пока только на
https://github.com/acmeism/RosettaCodeD … sition.ahk
А как его под себя переделать не соображу.
Вот что смог придумать:
Src =
(
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
)
rows = 3
columns = 4
StringSplit, SrcArr, Src, `,`n, %A_Space%
Loop, % rows
{
row := A_Index
Loop, % columns
{
column := A_Index
i := (row - 1) * columns + column
j := (column - 1) * rows + row
DestArr%j% := SrcArr%i%
}
}
Loop, % rows * columns
{
Dest .= DestArr%A_Index% . (Mod(A_Index, rows) ? ", ":"`n")
}
MsgBox, % Dest
Спасибо!
А можете эту формулу объяснить?
i := (row - 1) * columns + column
j := (column - 1) * rows + rowК сожалению мне это мало, что дает.
Если у вас эти цифры записаны в виде двухмерного массива, то, с помощью двух вложенных циклов как у YMP, меняете элементы местами: Элемент(x,y)<=>Элемент(y,x)... Если я правильно понял вашу постановку задачи.
А можете эту формулу объяснить?
i := (row - 1) * columns + column j := (column - 1) * rows + row
Вычисляется индекс числа в исходной и целевой таблицах. В исходной числа идут группами по четыре (количество колонок). Т.е. индекс равен какому-то количеству четвёрок + смещение в той четвёрке, где число находится. Первый ряд — это первая четвёрка. Целых четвёрок нет, индекс числа равен смещению в его четвёрке. Второй ряд — одна целая четвёрка + смещение, и т.д.
Для индекса в целевой таблице ряды и колонки меняются местами.
Я бы сделал так:
Str =
(
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
)
StringSplit, Arr, Str, `,`n, %A_Space%
RegExReplace(Str, "m`a)$", "", Row), Col := Arr0 // Row, i := 1
Loop % Arr0
Res .= Arr%i% (i = Arr0 ? "" : (half := Mod(A_Index, Row)) ? ", " : "`n")
, i := half ? i + Col : A_Index // Row + 1
MsgBox % Res
Тем более в случае когда заранее неизвестно кол-во линий и колонок.
Спасибо!
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться