Дайте два положительных числа N >= 2
и N <= 100
создайте матрицу, которая следует следующим правилам:
- Первый номер начинается с позиции
[0,0]
- Второй номер начинается с позиции
[0,1]
- Третий номер идет ниже первого номера (позиция
[1,0]
) - Следующие числа идут в направлении «косой черты»
- Диапазон чисел используется
[1, N1 * N2]
. Итак, числа идут от начала 1 до результата умножения обоих входов.
вход
- Два числа
N >= 2
иN <= 100
. Первое число - количество строк, Второе число - количество столбцов.
Выход
- Матрица. (Может быть выведен в виде многомерного массива или строки с переносами строк)
Пример:
Учитывая номер 3 and 5
вывод:
1 2 4 7 10
3 5 8 11 13
6 9 12 14 15
Данные числа 2 and 2
1 2
3 4
Данные номера 5 and 5
1 2 4 7 11
3 5 8 12 16
6 9 13 17 20
10 14 18 21 23
15 19 22 24 25
Самый короткий код в байтах побеждает.
Ответы:
Желе ,
65 байтПопробуйте онлайн!
Как это работает
источник
<atom><atom>¥þ
но я не могу найти правильную комбинацию.oþ++þ
близок, но не совсем добирается[1, 2, 3, 4, 5, 6]
.Ụ
сортирует этот массив, используя ключ, карты1
для[1, 1]
,2
чтобы[1, 2]
,3
к[2, 1]
и т.д. По сути, это находит индекс каждую пару из массива сортируется-по-суммы в отсортированном-лексикографический массивеPython 3 , 91 байт
Попробуйте онлайн!
источник
R ,
1016054 байтаПопробуйте онлайн!
Спасибо @nwellnhof за предложение
rank
Порты Дениса Желе отвечают .
Старый ответ, 101 байт:
Попробуйте онлайн!
split
делает большую часть работы здесь; возможно, есть алгоритм игры в гольф, но это определенно работает.Объяснение:
Попробуйте онлайн! - вы можете использовать обтекание
print
вокруг любой из правых сторон заданий,<-
чтобы увидеть промежуточные результаты без изменения конечного результата, посколькуprint
возвращает его входные данные.источник
rank(x,1,"f")
на 2 байта корочеorder(order(x))
.rank(x,,"l")
избавит и отt
.Java 10,
121120109105 байт-11 байт благодаря @ OlivierGrégoire .
-4 байта благодаря @ceilingcat .
Попробуйте онлайн.
Объяснение:
источник
x,y
/width,height
J 15 байт
-4 больше байтов для этого решения в милях. Благодарность!
Попробуйте онлайн!
J ,
2219 байт-3 байта благодаря FrownyFrog!
Попробуйте онлайн!
Реализация фантастического решения Jelly от Dennis в J.
Объяснение:
Диадический глагол, принимает левый и правый аргумент (mfn)
+/&i.
создает списки 0..m-1 и 0..n-1 и создает для них таблицу дополнений:[:>:@/:@/:@,
выравнивает таблицу, дважды оценивает список и добавляет к нему 1:,$
изменяет список обратно в таблицу mxn:источник
-@],\
→,$
для −3 байта.$1(+/:@;)</.@i.
с вводом в виде массива[r, c]
/.
но не смог достичь твоего результата :)APL + WIN, 38 или 22 байта
Запрашивает целочисленный столбец ввода, а затем строку:
или:
основанный на двойном применении Денниса. Пропустил это :(
источник
Wolfram Language (Mathematica) ,
7367 байтКоличество элементов в строках выше:
Min[j+k,#2]~Sum~{k,i-1}
Количество элементов в текущей строке и ниже:
Max[j-k+i-1,0]~Sum~{k,i,#}
Положите в таблицу и добавьте 1. Вуаля:
Обновление: я понял, что есть более короткий способ подсчитать все позиции перед обычно указанной позицией в матрице с одной суммой по двум измерениям:
Попробуйте онлайн!
Попробуйте онлайн!
источник
APL (Dyalog Unicode) ,
1412 байтПопробуйте онлайн!
-2 благодаря ngn , благодаря его умному использованию
↑⍳
.На основе 5-байтового решения Jelly от Dennis.
источник
∘.+⌿⍳¨⍵
->+/↑⍳⍵
⍳
сочетании с↑
.05AB1E , 23 байта
Попробуйте онлайн!
источник
Python 3 , 164 байта
Попробуйте онлайн!
Это определенно не самое короткое решение, но я подумал, что это было забавное решение.
источник
from numpy import*
и падение обоихn.
немного короче. Кроме того, вы можете оставить место на) for
. А переход на Python 2 позволяет вам перейтиreturn a
наprint a
(в Python 3 это будет тот же счетчик байтовprint(a)
).import*
. Я никогда не буду бить ответ Денниса, поэтому я буду придерживаться Python 3.Python 2 , 93 байта
Попробуйте онлайн!
Полужесткая версия:
источник
Japt ,
2524 байтаВряд ли элегантно, но выполняет свою работу. Работать с 2D-данными в Japt сложно.
Я добавил
-Q
флаг в TIO для облегчения визуализации результатов, это не влияет на решение.Откусил один байт благодаря Оливеру .
Попробуйте онлайн!
источник
×
, вы можете заменить*V
наN×
.JavaScript (Node.js) , 103 байта
Попробуйте онлайн!
источник
TI-Basic, 76 байт
Запрашивает ввод данных пользователем, возвращает матрицу
Ans
и печатает ее.TI-Basic - это токенизированный язык ; все токены, используемые здесь, являются одним байтом, отличным от
[A]
которого является 2 байта.Примечание: TI-Basic (по крайней мере, на TI-84 Plus CE) поддерживает только матрицы размером до 99x99, как и эта программа.
Объяснение:
источник
Perl 6 ,
6159 байтПопробуйте онлайн!
Еще один порт Денниса «Желе».
источник
Java (JDK 10) ,
142131 байтПопробуйте онлайн!
Объяснение:
Большое спасибо Кевину Круйссену, потому что я не знал, как запустить мой код на tio .
У него украден некоторый код, такой как верхний и нижний колонтитулы. -> Его ответ
источник
PHP, 115 байт
довольно ленивый подход; вероятно, не самое короткое из возможных.
анонимная функция, принимает ширину и высоту в качестве параметров, возвращает 2d матрицу
попробуйте это онлайн
источник
JavaScript (Node.js) ,
108105101100 байтПопробуйте онлайн!
источник
Атташе , 45 байт
Попробуйте онлайн!
Анонимная лямбда, где переключаются параматоры. Это можно исправить за +1 байт,
~
предварительно добавив в программу. Набор тестов уже делает это.объяснение
Этот подход аналогичен J ответ и ответ желе .
Первая идея заключается в создании таблицы значений:
Это создает таблицу сложения, используя диапазоны обоих входных параметров. Для ввода
[5, 3]
это дает:Затем мы сгладим это с помощью
Flat!
:Используя подход в ответе J, мы можем классифицировать массив (то есть возвращать индексы отсортированных значений) дважды, используя
Grade//2
:Затем нам нужно правильно подрезать значения, как в ответе Jelly. Мы можем вырезать все
_
элементы, чтобы сделать это:Затем нам просто нужно компенсировать 0-индексирование Attache с помощью
+1
:И, таким образом, у нас есть результат.
источник
Python 3 , 259 байт
Так что я сделал это странным образом. Я заметил, что в образе массива было два паттерна.
Первый , как шаблон верхних строк имеет разницу между каждым членом, увеличивающимся от 1 до> h, где h - высота, а l - длина. Поэтому я строю верхнюю строку на основе этого шаблона
Для матрицы дим (3,4), дающей
max RoC = 3
мы увидим верхний ряд видаПредположим вместо этого, что дим (3,9), дающий
max RoC = 3
мы вместо этого увидим верхний рядВторой шаблон - это то, как строки меняются друг от друга. Если мы рассмотрим матрицу:
и вычитая каждую строку из строки ниже (игнорируя дополнительную строку), мы получаем
Увидев эту матрицу, мы можем заметить, что эта матрица - это последовательность, в
2 3 4 5 5 4 3 2
которой каждой строкой является 5 членов этого шаблона, сдвинутых на 1 для каждой строки. Смотрите ниже для визуального.Таким образом, чтобы получить окончательную матрицу, мы берем нашу первую созданную строку и выводим эту строку с добавлением 5 необходимых терминов этого шаблона.
Эта картина всегда будет иметь характеристики начала
2-> max value
и окончания ,max value -> 2
гдеmax value = min(h+1, l)
и сколько раз , что максимальное значение будет отображаться вappearances of max = h + l -2*c -2
которомc = min(h+1, l) - 2
Так что в целом мой метод создания новых строк выглядит так
Соответствующий код ниже. Это не было коротким, но мне все еще нравится метод.
Попробуйте онлайн!
источник
Japt, 20 байт
Попытайся
источник