Есть ли в Golfscript способ объединить все диагонали массива в один массив?
Например, для массива
[[1 2 3][4 5 6][7 8 9]]
возвращение
[[7][4 8][1 5 9][2 6][3]]
(не обязательно в таком порядке) и для
["ABCD""EFGH""IJKL"]
возвращение
["I""EJ""AFK""BGL""CH""D"]
(Необязательно в этом порядке). Предположим, длины массивов одинаковы.
Я борюсь с выяснением этого. Я пытался что-то делать с =
итерациями по (length+1)
строкам, но это не сработало. Кто-нибудь может мне помочь?
Я хотел бы самый короткий способ сделать это, если это возможно.
code-golf
array-manipulation
tips
golfscript
Джозия Уинслоу
источник
источник
Ответы:
Рассматривать
Чтобы получить основную диагональ и диагонали над ней, мы можем сместить первый символ второго ряда и первые два третьего:
Обратите внимание, что все столбцы соответствуют диагонали, поэтому «сжатие» массива (т. Е. Транспонирование строк и столбцов) приведет к массиву, содержащему вышеупомянутые четыре диагонали:
Нам все еще не хватает диагоналей ниже основной диагонали.
Если мы застегнем A на себя и повторим описанный выше процесс, мы получим массив, содержащий основную диагональ и все диагонали под ней. Все, что осталось, это вычислить объединение множеств обоих массивов.
Собираем все вместе:
Попробуйте онлайн.
Наконец, если нам нужны только диагонали, потому что мы ищем строку внутри них (как в « Головоломке поиска слов» , которая, как я полагаю, вдохновила этот вопрос), «менее чистый» подход также может быть подходящим.
Ты можешь использовать
чтобы получить все диагонали, а также некоторые ненужные символы перевода строки.
Я объяснил процесс подробно в этом ответе .
Попробуйте онлайн.
источник