В этом задании вы получите четыре разные, но несколько взаимосвязанные задачи, которые необходимо решить определенным образом. Сначала я объясню задачи, а затем объясню, как вы должны их решить.
Ваш код должен для всех четырех задач принимать два положительных целых числа в качестве входных данных:, n,m
где n<m
. Все задачи должны решаться на одном языке. Ориентация матриц является необязательной (n-by-m может интерпретироваться как «n строк, m столбцов» или «n столбцов, m строк»).
Задание 1:
Создание (и выход / печать) вектор / список , состоящий из элементов: n, n+1 ... m-1, m
. Так, n=4, m=9
вы должны вывести: 4,5,6,7,8,9
.
Задача 2:
Создайте (и выведите / распечатайте) матрицу / массив / список списков (или эквивалент), выглядящий следующим образом:
n, n+1, ... m-1, m
n+1, n+2, ... m-1, m+1
...
n+m, n+m+1, ... 2*m-1, 2*m
Для n=4, m=9
вас следует вывести:
4, 5, 6, 7, 8, 9
5, 6, 7, 8, 9, 10
...
13, 14, 15, 16, 17, 18
Задача 3:
Создать (и вывести / распечатать) таблицу умножения n-на-m (в любом подходящем формате). Пример для n=4, m=9
:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
5 10 15 20
6 12 18 24
7 14 21 28
8 16 24 32
9 18 27 36
Задача 4:
Вывести / распечатать вектор / список, состоящий из элементов в таблице умножения из задачи 3, отсортированных в порядке возрастания с сохранением повторяющихся значений. Для n=4, m=9
, вы должны вывод: 1, 2, 2, 3, 3, 4, 4, 4, 5, 6, 6, 6, 7, 8, 8, 8, 9, 9, 10, 12, 12, 12, 14, 15, 16, 16, 18, 18, 20, 21, 24, 24, 27, 28, 32, 36
.
Соревнование:
Теперь все вышеперечисленные задачи довольно тривиальны. Реальная проблема здесь заключается в том, что код для задачи 2 должен начинаться с кода для задачи 1, код для задачи 3 должен начинаться с кода для задачи 2, а код для задачи 4 должен начинаться с кода для задачи 3.
Чтобы было понятнее:
Предположим, что код для Задачи 1 (работает в Октаве):
@(n,m)(n:m)
Тогда ваш код для Задачи 2 может быть (работает в Octave):
@(n,m)(n:m)+(0:m)'
Код для задачи Task 3 должен быть (не работает в Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3"
И наконец, код для Задачи 4 должен быть (не работает в Octave):
@(n,m)(n:m)+(0:m)'"Code_for_task_3""Code_for_task_4"
Это код-гольф , поэтому выигрывает представление с кратчайшим кодом для задания 4 на каждом языке. Как всегда: объяснения приветствуются.
>2;
чтобы код предыдущей задачи по существу превратился в no-op?0<n<m
или0<=n<m
?Ответы:
Желе , 12 байт
Задание 1
Попробуйте онлайн!
Задача 2
Попробуйте онлайн!
Задача 3
Попробуйте онлайн!
Задача 4
Попробуйте онлайн!
Как это устроено
Задание 1
r
является атомом диадического диапазона и делает именно то, что просит задача.Задача 2
Диадическая цепь, которая начинается с трех диадических связей, является вилкой ; сначала оцениваются внешние ссылки, затем вызывается средняя ссылка с результатами для обеих сторон в качестве аргументов.
r
ведет себя как и прежде, уступая [n,…, m] .0r$}
это быстрая ссылка (или быстрая ссылка, если хотите).Быстрый
$
(цепочка monadich) потребляет звенья0
(выход 0 ) иr
(диадический диапазон) и превращает их в монадическую цепочку. При вызове с аргументом k это приведет к [0,…, k] .Быстрые
}
(правый аргумент) принимает QuickLink созданного$
и превращает его в двоично - ссылку, звонки0r$
с0r$}
правом аргумента «s.0r$}
будет вызван с левым аргументом n и правым аргументом m , поэтому0r$
он связан с аргументом m и возвращает [0,…, m] .+þ
еще одна быстрая ссылка.þ
(таблица) вызовет+
(сложение) для каждого элемента в своем левом аргументе и любого элемента в своем правом аргументе, сгруппировав результаты для каждого правого аргумента в одну строку.+þ
будет вызываться с левым аргументом [n,…, m] и правым аргументом [0,…, m] , давая нужную таблицу.Задача 3
Каждая строка в программе Jelly определяет отдельную ссылку. Последняя является основной ссылкой и, подобно
main
функции C , является единственной ссылкой, которая выполняется по умолчанию. Остальные ссылки можно вызвать по главной ссылке, но мы не будем этого делать здесь.Как и прежде,
þ
(таблица) будет вызывать×
(сложение) для каждого элемента в своем левом аргументе и любого элемента в своем правом аргументе, группируя результаты для каждого правого аргумента в одну строку.Поскольку оба аргумента to
×þ
являются целыми числами,þ
они преобразуются в диапазоны, преобразуя аргументы n и m в [1,…, n] и [1,…, m] .Задача 4
×þ
работает как раньше. Следующие ссылки являются монадическими, что делает их верхними , то есть они применяются поверх предыдущих.После выполнения
×þ
,F
сглаживается в результате 2D массив иṢ
сортирует результирующий массив 1D.источник
05AB1E ,
1817 байтЗадание 1
Попробуйте онлайн
Задача 2
Попробуйте онлайн
Задача 3
Попробуйте онлайн
Задача 4
Попробуйте онлайн
Пояснения
Задание 1
Задача 2
Задача 3
Задача 4
источник
MATL ,
1817 байтЗадание 1
Попробуйте онлайн!
Задача 2
Попробуйте онлайн!
Задача 3
Попробуйте онлайн!
Задача 4
Попробуйте онлайн!
объяснение
Задание 1
Задача 2
Задача 3
Задача 4
источник
Mathematica,
8477 байтИзменить: Спасибо Мартин Эндер за сохранение 7 байтов.
Задание 1:
Чисто
Function
с аргументамиn
иm
какими выходамиn~Range~m
, инфиксная формаRange[n,m]
.Задача 2:
n~Range~m~Table~(m+1)
создает двумерный массив соm+1
строками, где каждая строка является выводом предыдущей задачи. Тогда//0~Range~m+#&
это постфикс применение функции ,0~Range~m+#&
которая эффективно добавляет0
к первому ряду,1
ко второму ряду, и так далее доm
дляm+1
-й строки.Задача 3:
Это просто применяет постоянную функцию
1##&~Array~{n,m}&
к выводу предыдущей задачи.Задача 4:
Flatten
s иSort
s таблица умножения.источник
Python, 183 байта
Задача 1, 29 байт
Попробуйте онлайн!
Задача 2, 84 байта
Попробуйте онлайн!
Задача 3, 137 байт
Попробуйте онлайн!
Задача 4,
183167 байтПопробуйте онлайн!
Объяснение:
Задание 1:
Достаточно просто, он генерирует
n
вm
список с помощью Python встроенных вrange
функции.Задача 2:
Для каждого числа
0
кm+1
, он добавляет , что число для каждого элемента списка отn
доm
.Задача 3:
Для каждого числа от
1
доm
он умножает это число на каждое число в списке от1
доn
.Задача 4:
При этом используется встроенная
sorted
функция Python, которая сортирует список от наименьшего к наибольшему. Понимание списка в функции используется для выравнивания списка. Он создает список каждого элемента в каждом элементе списка, заданного ему задачей 3.Благодаря @math_junkie сохранено очень много байтов.
источник
def s(n,m):return [[w+i for w in r(n,m)] for i in a(0,m+1)]
- полная функция, когда код для задачи 1 определен.a=lambda n,m:...
для каждого из ваших определений функций. В Python анонимная функция всегда корочеPHP 7, 200 байт
Использует выходной буфер для очистки предыдущего вывода.
Задание 1
Сохраняет код,
$s
чтобы использовать его позже.$v
Переменной для последней задачи.Задача 2
Печатает оставшиеся строки.
Задача 3
Очищает выходной буфер и печатает таблицу умножения, сохраняя числа в
$v
.Задача 4
Очищает выходной буфер снова и печатает
$v
.источник
PowerShell , 126 байт
Задание 1
Попробуйте онлайн!
Использует
..
встроенный оператор диапазона. Поведение по умолчанию для подразумеваемыхWrite-Output
вставляет новую строку между элементами, поэтому выходные данные отображаются как разделенные новой строкой.Задача 2
Попробуйте онлайн!
Сбрасывает первую задачу в STDERR
>2;
, затем выполняет циклическое переключение из в0
в$m
каждый вспомогательный параметр настройки итерации$i
перед повторным циклом из$n
в$m
и с увеличением каждого числа на$i
. Они-join
пишутся вместе с запятыми, иначе это будет неоднозначный гигантский длинный вывод по одному элементу на строку.Задача 3
Попробуйте онлайн!
То же самое,
>2;
чтобы сбросить предыдущее в STDERR. Затем мы просто выполняем двойную петлю от1
к$m
тому1
к$n
, устанавливая помощник$i
по пути, умножая значения, и-join
с пробелом, чтобы сделать его табличным. Обратите внимание на инкапсулирующие парены - они вступят в игру при следующей задаче - но здесь они просто гарантируют, что вывод выводится в конвейер (что уже будет, поэтому они избыточны).Задача 4
Попробуйте онлайн!
Ага! Наконец, некоторая избыточность. Поскольку в предыдущей задаче есть
-split
символы скобок, мы можем без беспокойства использовать пустое пространство, приводить каждое к целому числу|%{+$_}
и затем|sort
. Выход снова разделен новой строкой.Я думаю, что есть несколько способов лучше использовать избыточность между задачами - все еще игра в гольф.
источник
ES2016-иш,
401384 символовВот первая попытка. Я уверен, что это может быть немного сжато, но оно довольно короткое. Функции стрелок FTW! (Любите эти неявные операторы return.) Новое и улучшенное с помощью шаблонных строк!
Задание 1
Позвоните
z(n,m)
для вывода журнала. (Я пишу псевдоним console.log для последующего игры в гольф.)Задача 2
Второй стих ... расширяется на первый.
Теперь звони
y(n,m)
. Довольно, нет?Задача 3
Приходится обходить большую часть существующего функционала
<sadface />
.Теперь имя метода есть
v
. Назовите это так же.Задача 4
И теперь мы можем снова использовать.
Пришлось пропустить
u
мой метод, так оно и естьt
. Обидно, что мне пришлось поместить в эту функцию сортировки, потому чтоString.match
возвращает значения в виде ... строк.источник
Рубин,
121103 байтаВсе в Ruby является правдивым, кроме
nil
иfalse
, что означает, что задачи могут быть настроены так, чтобы игнорировать предыдущий ввод с ничем, но с хорошим положениемand
/&&
.Задание 1
Попробуйте онлайн!
Задача 2
Попробуйте онлайн!
Задача 3
Попробуйте онлайн!
Задача 4
Попробуйте онлайн!
источник