Группы являются широко используемой структурой в математике и имеют приложения в области компьютерных наук. Эта проблема кода заключается в наименьшем количестве символов для создания таблицы групп для аддитивной группы Z n .
Как строится таблица: для Z n элементами являются {0, 1, 2, ..., n-1}. Таблица будет иметь n строк и n столбцов. Для i-й записи таблицы это значение равно i + j mod n. Например, в Z 3 1-2-я запись (2-я строка, 3-й столбец, если считать начальную строку / столбец как 1) равна (1 + 2)% 3 = 0 (см. Пример выходных данных).
Ввод: положительное целое число, n
Вывод: таблица, представляющая собой текстовое представление Z n , построенная, как описано выше, и отображенная, как показано ниже в примерах выходных данных. Пробелы не являются обязательными
Пример ввода: 3
Пример вывода:
0 1 2
1 2 0
2 0 1
Пример ввода: 5
Пример вывода:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
Ответы:
APL (10)
(Предполагается
⎕IO=0
. По умолчанию он работает в ngn / apl , другие APL, как правило, нуждаются в⎕IO←0
первом.)Объяснение:
⍳⍵
: числа [0..⍵)∘.+⍨
: создать таблицу сумм⍵|
: цифры в таблицеmod
⍵источник
⊢|⍳∘.+⍳
, или поезда не работали в версии ngn от июля 2014 года?GolfScript (13 символов)
Из вашего комментария к ответу Клавдия я понимаю, что пробелы между элементами строки не обязательны. При этом понимании:
Онлайн демо
Вскрытие:
Если пробел необходим, на 20 символов:
источник
Python 2, 66 байт
Поворот списка путем всплывающего окна и повторного добавления.
Python 3, 53 байта
Использует тот же метод, что и @ mbomb007, но злоупотребляет
print
как функция.источник
*R,=
странная конструкция ... Она служит только для преобразованияrange
вывода в кортеж?*R
range
это повторяемый объект, который можно распаковать и переупаковать, собрав все вR
. Это должно быть эквивалентноR=list(range(n))
первому, будучи более кратким.05AB1E ,
108 байтПопробуйте онлайн!
объяснение
Предыдущий ответ: 10 байт
Попробуйте онлайн!
Моя первая попытка игры в гольф в 05AB1E.
Объяснение предыдущего ответа
источник
FݨN._ðý,
и неݨsGDÀ})»
стесняйтесь задавать любые вопросы в чате 05AB1E , и посмотрите на страницу подсказки 05AB1E, если вы еще этого не сделали. :)Желе , 4
Попробуйте онлайн!
источник
Pyth , 16
Печатает таблицу с надлежащим пробелом.
Объяснение:
источник
J, 20
Чтение из стандартного ввода и создание двумерного массива (который отображает образец в вопросе).
Если функция принимает строковые суффиксы,
(|+/~@i.)@".
. Если функции, принимающей целое число достаточно,|+/~@i.
должно быть достаточно.Пояснение:
f g
в J (для функций f, g) обозначает «крючок», который является составной функцией, которая выполняет ввод через g (унарная функция), а затем ввод и результат от g до f (двоичная функция). Ответ вилка с компонентами|
(модуль) и+/~@i.
. Последняя часть - это «таблица сумм, составленная со списком индексов-до» (i.
немного похожеrange
на Python).источник
|+/~@i.
, который должен быть приемлемым по стандартным правилам здесь.Октава, 23
источник
Python 2, 67
Попробуйте их обоих здесь
Я использую разделение списка, чтобы «вращать» список
n
раз, печатая его каждый раз. (68 символов)Мне удалось сделать это на один символ короче, чем выше, с помощью странного трюка. (67 символов)
источник
def f(n):*R,=range(n);[print(*R[i:]+R[:i])for i in R]
. Я не думал, что сплат на самом деле будет работать без паренов.Матлаб (28)
источник
Машинный код x86-64 (Linux),
8064 байтаЯ надеялся, что это решение будет на несколько байт короче, чтобы можно было превзойти некоторые другие предложения в этом посте. Есть возможность, если я использую некоторые из 32- или 16-битных версий регистров, я могу сбрить несколько байтов.Преобразование большого количества регистров в 32-разрядные версии адресации позволило сэкономить 16 байтов.В основном эта функция вызывается из программы на C / C ++, которая передала n через rdi, а указатель на распределение - через rsi. Указатель, который имеет rsi, на самом деле составляет 1 байт от конца выделения, поскольку таблица построена в обратном направлении. Это облегчает преобразование целого числа в печатаемые символы ASCII (выполняется путем взятия некоторого числа x mod 10 и преобразования результата в ASII).
Чтобы увидеть код оболочки C ++ и комментарии к сборке, посмотрите мой репозиторий .
источник
Пари / ГП , 26 байт
Попробуйте онлайн!
источник
matrix(m,n,X,Y,expr)
генерируетmXn
матрицу выраженийexpr
, переменная строкиX
идет от1
кm
и переменная столбцаY
идет от1
кn
.MathGolf ,
108 байтПопробуйте онлайн!
-2 байта благодаря Джо Кингу
объяснение
Я буду использовать пример ввода
3
для объясненияВы также можете сделать это
r░y\(Åo╫
, что уменьшает количество циклов на 1 и пропускает сброс после цикла.источник
q
чтобы удалить дублирование?o
. Хотя лучшее, что я мог понять таким образом, было это . Это тоже может быть 10 байт, но я на мобильном.С - 96
источник
Golfscript, 20 символов
Ужасно ленивая работа.
Запустите это здесь . (Первая строка для имитации стандартного ввода).
Пояснение :
Когда программа заканчивается, стек содержит каждый из массивов с символами новой строки между ними. Интерпретатор выводит то, что осталось в стеке, давая желаемый результат.
источник
CJam, 14 символов
Проверьте это здесь.
объяснение
Идея состоит в том, чтобы повторить строку из
0
доN-1
, но разбить ее на блокиN+1
. Это несоответствие каждый раз сдвигает строку влево. Наконец, нам нужно избавиться от постороннего персонажа и объединить все с помощью новых строк.Вот разобранный код вместе с содержимым стека для ввода
3
.Результат распечатывается автоматически в конце программы. (Обратите внимание, что содержимое стека для последнего шага технически представляет собой смешанный массив, содержащий цифры и символы новой строки, а не строку, содержащую только символы.)
В качестве альтернативы, 11 символов
С недавним добавлением
ew
(это новее, чем вызов - он возвращает все перекрывающиеся подстроки заданной длины), можно сделать 11 байтов:Вот как это работает:
источник
l~_,\{_(+N\}*;
. Интересно, сможем ли мы добиться большего успеха с этим ?ew
может работать, но это новее, чем вызов.MATL , 6 байтов
Попробуйте онлайн!
источник
Excel VBA, 77 байт
Функция анонимного непосредственного окна VBE, которая принимает входные данные в виде целого числа n из диапазона
[A1]
и выводит их в диапазонA2.Resize(n,n)
.источник
Perl 6 , 23 байта
Попробуйте онлайн!
Блок анонимного кода, который принимает число и печатает матрицу в заданном формате с пробелами. Если мы можем просто вернуть что-то вместо этого, то
.put
можно удалить.Объяснение:
источник
Древесный уголь , 13 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Примечание: место в конце. Объяснение:
источник
APL (NARS), 15 символов, 30 байтов
тестовое задание:
здесь язык не нуждается в комментариях ...
источник
Japt
-R
, 5 байтПопробуй это
Если использование запятой в качестве разделителя недопустимо, добавьте байт без разделителя:
Попробуй это
Или 2 байта, чтобы использовать пробел:
Попробуй это
источник
R , 37 байт
Создает вектор от 0 до n-1 и последовательно добавляет 1, затем 2 ..., затем n и модулирует матрицу по длине вектора, равной n.
Попробуйте онлайн!
источник
Forth (gforth) , 53 байта
Попробуйте онлайн!
объяснение
Вложенный цикл, который выводит новую строку каждые n чисел
Код Объяснение
источник