Самый краткий j синтаксис для создания числовой матрицы
-
03-10-2019 - |
Вопрос
Представьте, что я хочу взять цифры от 1 до 3 и образуйте матрицу, так что каждая возможная сопряжение представлена, например,
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
Вот монадический глагол, который я сформулировал в J, чтобы сделать это:
($ ~ (-: @ #, 2 :)), "0 / ~ 1 + IY
Первоначально я думал, что ,"0/~ 1+i.y
было бы достаточно, но, к сожалению, что производит следующий вывод:
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
Другими словами, его форма составляет 3 3 2, и я хочу что-то, чья форма 9 2. Единственный способ, которым я мог думать о том, чтобы исправить это - это налить все данные в новую форму. Я убежден, что должен быть более лаконичный способ сделать это. Кто-нибудь знает?
Решение
Один путь (который использует {
Как монад в его мощности для каталогизации перестановки):
>,{ 2#<1+i.y
РЕДАКТИРОВАТЬ:
Некоторые веселые, которые будут иметь с этой схемой:
Все возможные перестановки:
>,{ y#<1+i.y
Настраиваемое число в последовательности:
>,{ x#<1+i.y
Другие советы
Изменение вашего промежуточного результата может быть упрощена. Удаление самой верхней оси обычно делается с ,/
Так что в вашем случае завершенная фраза может быть ,/ ,"0/~ 1+i.y
Я понимаю, что этот вопрос старый, но есть более простой способ сделать это: сосчитать до 9 в дворике, и добавьте 1.
1 + 3 3 #: i.9
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
То 3 3 & #:
дает вам две цифры. Общая «База 3» глагол 3 & #.^:_1
.