MATL , 20 байтов
TiodgvYsG8XQ!"@gto?P
Ввод - это массив столбцов, использующий в ;
качестве разделителя.
Попробуйте онлайн!
объяснение
Рассмотрим в качестве примера входной массив [1;2;3;5;7;4;6;7;9]
. Первая часть кода, Tiodgv
преобразует этот массив в [1;1;1;0;0;1;0;1;0]
, где 1
указывает на изменение четности . (В частности, код получает четность каждой записи входного массива, вычисляет последовательные различия, преобразует ненулевые значения в 1
и добавляет a 1
.)
Затем Ys
вычисляет накопленную сумму , отдавая [1;2;3;3;3;4;4;5;5]
. Каждое из этих чисел будет использоваться как метка , на основе которой будут сгруппированы элементы ввода . Это делается путем G8XQ!
, который разбивает входной массив на массив ячеек, содержащий группы. В этом случае это дает {[1] [2] [3;5;7] [4;6] [7;9]}
.
Остальная часть кода iterate ( "
) в массиве ячеек. Каждый составляющий числовой массив помещается в @g
. to
делает копию и вычисляет ее соотношение . Если ( ?
) результат верен, то есть содержимое массива нечетно, массив переворачивается ( P
).
Стек неявно отображается в конце. Каждый числовой вертикальный массив отображается, давая список чисел, разделенных новыми строками.