1

Тема: 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
Голову уже сломал, как сделать превращение.

2

Re: AHK: Поменять расположение чисел с горизонтального в вертикальное

Это называется "транспонировать матрицу"? Тогда: Элемент(x,y)<=>Элемент(y,x)

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

3

Re: AHK: Поменять расположение чисел с горизонтального в вертикальное

К сожалению мне это мало, что дает.
Наткнулся пока только на
https://github.com/acmeism/RosettaCodeD … sition.ahk
А как его под себя переделать не соображу.

4 (изменено: YMP, 2013-05-31 07:15:57)

Re: 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

5

Re: AHK: Поменять расположение чисел с горизонтального в вертикальное

Спасибо!
А можете эту формулу объяснить?

i := (row - 1) * columns + column
j := (column - 1) * rows + row

6

Re: AHK: Поменять расположение чисел с горизонтального в вертикальное

Malcev пишет:

К сожалению мне это мало, что дает.

Если у вас эти цифры записаны в виде двухмерного массива, то, с помощью двух вложенных циклов как у YMP, меняете элементы местами: Элемент(x,y)<=>Элемент(y,x)... Если я правильно понял вашу постановку задачи.

Жизнь стоит того чтобы не быть сволочью. (с) Разные Люди

7

Re: AHK: Поменять расположение чисел с горизонтального в вертикальное

Malcev пишет:

А можете эту формулу объяснить?

i := (row - 1) * columns + column
j := (column - 1) * rows + row

Вычисляется индекс числа в исходной и целевой таблицах. В исходной числа идут группами по четыре (количество колонок). Т.е. индекс равен какому-то количеству четвёрок + смещение в той четвёрке, где число находится. Первый ряд — это первая четвёрка. Целых четвёрок нет, индекс числа равен смещению в его четвёрке. Второй ряд — одна целая четвёрка + смещение, и т.д.

Для индекса в целевой таблице ряды и колонки меняются местами.

8 (изменено: serzh82saratov, 2014-05-02 21:50:54)

Re: AHK: Поменять расположение чисел с горизонтального в вертикальное

Я бы сделал так:


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 

Тем более в случае когда заранее неизвестно кол-во линий и колонок.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Поменять расположение чисел с горизонтального в вертикальное

Спасибо!