Задача очень проста. Учитывая целочисленный ввод n
, выведите n x n
единичную матрицу. Тождественная матрица - это та, которая имеет 1
s, охватывающую от верхнего левого угла до нижнего правого. Вы напишите программу или функцию, которая будет возвращать или выводить построенную вами матрицу идентичности. Выходными данными могут быть двумерный массив или числа, разделенные пробелами / символами табуляции и переводами строки.
Пример ввода и вывода
1: [[1]]
2: [[1, 0], [0, 1]]
3: [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
4: [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
5: [[1, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1]]
1
===
1
2
===
1 0
0 1
3
===
1 0 0
0 1 0
0 0 1
etc.
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
code-golf
math
matrix
linear-algebra
binary-matrix
code-challenge
polyglot
code-golf
restricted-source
programming-puzzle
expression-building
apl
code-challenge
image-processing
compression
code-golf
puzzle-solver
code-golf
grid
code-golf
number
number-theory
code-golf
array-manipulation
sorting
code-golf
string
balanced-string
code-golf
puzzle-solver
code-golf
string
decision-problem
code-golf
path-finding
puzzle-solver
graph-theory
code-golf
string
encode
networking
code-golf
code-golf
string
chemistry
code-golf
date
code-golf
decision-problem
graph-theory
code-golf
ascii-art
graph-theory
code-golf
string
Seadrus
источник
источник
Ответы:
MATL, 2 байта
Перевод моего октавского ответа.
Попробуйте онлайн.
4-байтовая версия без встроенных модулей (спасибо Луису Мендо):
источник
:t!=
TI-BASIC, 2 байта
Интересный факт: самый короткий путь , чтобы получить список
{N,N}
являетсяdim(identity(N
.Вот кратчайший путь без встроенного, в 8 байтов:
randM(
создает случайную матрицу с записями всех целых чисел от -9 до 9 включительно (это звучит странно, потому что это так). Затем мы возьмем эту матрицу к 0-й степени.источник
{N,N}
, ммм,{N,N}
?dim(
иidentity(
каждый байт, потому что TI-BASIC является токенизированным.Юлия,
93 байтаЭто просто встроенная функция, которая принимает целое число
n
и возвращаетnxn Array{Float64,2}
(т.е. двумерный массив). Назовите это какeye(n)
.Обратите внимание, что представления этой формы являются приемлемыми в соответствии с этой политикой .
источник
APL, 5 байт
Это последовательность монадических функций, которая принимает целое число справа и возвращает единичную матрицу.
Попробуй здесь
источник
Октава,
104 байтаВозвращает анонимную функцию, которая принимает число
n
и возвращает единичную матрицу.источник
@eye
достаточно.eye
производит матрицу идентичности во многих / некоторых численно ориентированных языках.@
?@
- это «оператор дескриптора функции», он работает как a,lambda
а также как ссылка на конкретную функцию, например,@(x)x.^2
это функция возведения в квадрат и@sqrt
ссылка на функцию квадратного корня. Вы можете прочитать больше об этом здесьR, 4 байта
Когда задана матрица,
diag
возвращает диагональ матрицы. Однако, когда задано целое числоn
,diag(n)
возвращается единичная матрица.Попробуйте онлайн
источник
Python 2, 42 байта
Анонимная функция, производит вывод, как
[(1, 0, 0), (0, 1, 0), (0, 0, 1)]
,Во-первых, создает список
([1]+[0]*n)*n
, который дляn=3
выглядитИспользуя почтовый индекс / ИТЭР трюк
zip(*[iter(_)]*n
сделать группыn
даетОбратите внимание, что
1
каждый раз приходит по одному индексу, давая матрицу идентичности. Но есть дополнительная строка с нулем, которая удаляется с помощью[:n]
.источник
Желе, 4 байта
Не использует встроенный. Попробуйте онлайн!
Как это работает
источник
=þ
составляет два байта и высмеивает более длинные ответы.J, 4 байта
Это функция, которая принимает целое число и возвращает матрицу.
источник
=i.
(=i.) 10
=>0 0 0 0 0 0 0 0 0 0
Haskell,
4337 байтДовольно просто, хотя я думаю, что можно добиться большего успеха (без языка, в который уже встроена эта функция, как это сделали многие).
Редактировать: отбросил несколько байтов благодаря Орьяну Йохансену
источник
fromEnum
какsum[1|x==y]
.fromEnum (y==x)
0^abs(x-y)
.0^(x-y)^2
другой ответ, даже короче.Pyth, 7 байт
Попробуйте онлайн: демонстрация
Создание матрицы нулей и замена диагональных элементов на единицы.
источник
Q
JavaScript ES6,
686252 байтаСохранено 10 байтов благодаря аккуратному трюку от @Neil
Попытка использовать другой подход, чем у @ Cᴏɴᴏʀ O'Bʀɪᴇɴ. Возможно, будет улучшено.
источник
x=>[...Array(x)].map((_,y,x)=>x.map((_,z)=>+(y==z)))
экономию в 10 байт.x=>[...Array(x)].map((_,y,x)=>x.map(_=>+!y--))
Сетчатка , 25
Благодарим @randomra и @Martin за дополнительный гольф.
Попробуйте онлайн.
Обратите внимание, что это принимает вход как унарный. Если это неприемлемо, то десятичный ввод может быть задан следующим образом:
Сетчатка, 34
Попробуйте онлайн.
источник
$*0
для замены числа n на n0
s.Haskell, 54 байта
f
возвращает единичную матрицу для ввода n. Далеко не оптимально.источник
map
вызова.Луа,
77 7565 байтНу, я не уверен, что для этого лучше всего использовать lua с двухпериодной конкатенацией ... Но, эй, есть шанс. Я посмотрю, есть ли какие-либо улучшения, которые будут сделаны.
РЕДАКТИРОВАТЬ:
Я понял что-то случайно, что я нахожу довольно странным, но это работает.
В Lua все знают, что у вас есть возможность назначать функции переменным. Это одна из наиболее полезных функций CodeGolf.
Это значит вместо:
Ты можешь это сделать:
Но подождите, Луа позволяет немного ООП. Так что вы могли бы даже сделать:
Это будет работать так же хорошо и сокращать персонажей.
Теперь здесь начинается странная часть. Вам даже не нужно назначать строку в любой точке. Просто делаю:
Буду работать.
Таким образом, вы можете визуально увидеть разницу, взгляните на результаты этого:
Использование string.sub (88 символов)
Присвоение string.sub переменной (65 символов)
Назначение string.sub с использованием подхода ООП (64 символа)
Назначение string.sub с использованием подхода .. nil? (60 символов)
Если кто-то знает, почему это работает, мне было бы интересно.
источник
Python 3, 48
Сохранено 1 байт благодаря sp3000.
Я люблю проблемы, которые я могу решить в одной строке. Довольно просто, построить строку из 1 и 0, равную длине переданного int. Выводит в виде 2d массива. Если вы завернете деталь после: in
'\n'.join()
, она будет довольно распечатана.источник
x-i-1 -> x+~i
С,
59 или 59,56 или 56Две версии одинаковой длины.
3 байта сохранены благодаря предложению от Анатолия:
(n+1)
->~n
Итерирует
i
отn*n-1
нуля. Печатает 1, если i% (n + 1) равно нулю, иначе 0. Затем печатает новую строку, еслиi%n
= 0 в противном случае пробел.источник
n+1
слишком скучно Используйте~n
вместо этого!i;
?i;
просто объявляет переменнуюi
. В C вы всегда должны объявлять переменную перед ее использованием, указав тип, чтобы компилятор знал, сколько памяти выделить. С помощью компилятора GCC, если вы не укажете тип, он должен бытьint
.Мата, 4 байта
Выход
Mata - это матричный язык программирования, доступный в статистическом пакете Stata. I (n) создает единичную матрицу размера n * n
источник
I
а остальные 3 байта просто вызывают функцию. Это сделало бы ваш ответ одним из самых низких в этой задаче! :-)К6 , 1 байт
=
именно этоПопробуйте онлайн!
источник
Pyth, 8 байт
Попробуй это здесь .
источник
qRRQQ
что, кажется, работает, кроме васTrue
иFalse
вместо,1
и0
, однако, исправление этого afaik требует использования трех байтов, дляsMM
которых не помогает ...Python 3.5 с NumPy -
574930 байтNumPy.identity принимает целое число n и возвращает единичную матрицу n. Этот ответ допустим с помощью этой политики .
источник
import numpy\nnumpy.identity
что это законный ответ .import numpy\nnumpy.identity()
30 байтов?from numpy import identity
, 26 байтов.from numpy import identidy\nidentity
(в этом случае*
вместо конкретной встроеннойMathematica, 35 байт
без использования IdentityMatrix
источник
Javascript, 40
источник
Japt,
141210 байтПроверьте это онлайн! Примечание: в этой версии есть несколько дополнительных байтов, чтобы красиво распечатать вывод.
источник
Brain-Flak ,
206170162 байтаПопробуйте онлайн!
источник
К 7 байт
Возьмем произведение на равенство двух векторов, содержащих [0, n).
В бою:
источник
Java, 60 байт
Создает 2D-массив и заменяет элементы, в которых строка и столбец равны
1
.источник
CJam, 7 байтов
Это блок кода, который извлекает целое число из стека и возвращает двухмерный массив в ответ.
Попробуйте онлайн!
источник
Mathematica, 14 байтов
Прецедент
источник
Perl,
3933 байтаСпасибо Ton Hospel за сохранение 6 байтов
Запуск с
-E
perlrun:источник
/$/,say map$`==$_|0,@%for@%=1..<>
или даже лучше,//,say map$'==$_|0,@%for@%=1..<>
но вот так вы больше не можете поместить его в одинарные кавычкиprint
вместо скажем, потому что-E
это только бесплатно в командной строке.