Напишите функцию f (n, k), которая отображает k-мерный отсчет от n.
1-мерный отсчет от 5 выглядит как
54321
2-мерный отсчет от 5 выглядит как
54321
4321
321
21
1
Наконец, 3-мерный отсчет от 5 выглядит как
54321
4321
321
21
1
4321
321
21
1
321
21
1
21
1
1
Формальное определение
1-мерный обратный отсчет от любого n представляет собой одну строку с объединенными цифрами n, n-1, ..., 1 (за которыми следует новая строка).
Для любого k k-мерный отсчет от 1 - это одна строка
1
Для n> 1 и k> 1 k-мерный обратный отсчет от n является (k-1) -мерным обратным отсчетом от n, за которым следует k-мерный обратный отсчет от n-1.
вход
Два натуральных числа k и n <= 9 в любом формате, который вы выберете.
Выход
K-мерный отсчет от n, с новой строкой после каждого 1-мерного отсчета. Дополнительные символы новой строки разрешены в выходных данных.
счет
Стандартные оценки в гольф.
Бонус пример
Вот пример с k> n, четырехмерным обратным отсчетом от 3 (с дополнительными комментариями, которые не должны быть включены в реальные решения):
-- 3-dimensional countdown from 3
321
21
1
21
1
1
-- 4-dimensional countdown from 2:
---- 3-dimensional countdown from 2:
21
1
1
---- 4-dimensional countdown from 1:
1
Разъяснения:
Цифры в строке не обязательно должны быть соседними, но они должны быть равномерно распределены.
Вы можете написать полную программу вместо просто функции, если хотите.
Ответы:
Python, 60 байт
Проверьте это на Ideone .
Как это устроено
К - мерный отсчет от п может быть определен с помощью одного базового случая:
Используя рекурсивное определение из вопроса,
f(n,k)
возвращает,f(n,k-1)+f(n-1,k)
если n> 1 и k> 1 ; в противном случае он возвращает последние n + 1 символов из'987654321\n'
.источник
Желе , 8 байт
Это полная программа, которая ожидает n и k в качестве аргументов командной строки.
Попробуйте онлайн!
Как это устроено
источник
Y
работает вместоp⁷
?5, 1
, это отображает[54321]
.Javascript,
403837 байтСохранено 1 байт благодаря @ edc65:
Предыдущие ответы
38 байтов благодаря @Neil:
40 байтов:
источник
||
вместо?n:
. Сохраните другой байт, используя буквальный символ новой строки внутри`
s вместо'\n'
.f=(n,k)=>n?(k?f(n,k-1):n)+f(n-1,k):k?``:`\n`
*
вместо этого&&
.Python,
7675 байт-1 байт благодаря @ Sp3000
Выполняет процедуру, описанную в OP: объединяет убывающие
n
результаты дляk-1
на новых строках с базой рекурсии'n...1'
строки, когдаk
есть1
(k
не больше,1
так как нам гарантирован положительныйk
ввод).Тестовые случаи на ideone
источник
Python,
868180 байтd
это число измерений,n
это номер обратного отсчета.Скоро выложу объяснение.
РЕДАКТИРОВАТЬ # 1: изменил его на лямбда.
РЕДАКТИРОВАТЬ # 2: Сохранено 1 байт благодаря @DestructibleWatermelon.
источник
Haskell, 57 байт
Пример использования:
5 # 3
->"\n54321\n4321\n321\n21\n1\n4321\n321\n21\n1\n321\n21\n1\n21\n1\n1"
.Прямая реализация определения.
источник
Ракетка 215 байт
Тестирование:
источник
54321
появляется дважды?λ
) всегда меньше байтов, чем использованиеdefine
. Кроме того, вход дляn
был указан как число, для которого вы строите(range 1 n)
. Смотрите также о замене вашегоcond
наif
, так как вы сохраняете байты наelse
.J,
383732 байтаЭто функция, которая принимает k на LHS и n на RHS.
Сохранено 5 байтов с идеями от @ Adám.
использование
объяснение
источник
Дьялог АПЛ , 18 байт
Запрашивает для n , затем для k .
~∘'0'⍤1
удалить (~
)∘
нули ('0'
) из строк (⍤1
) (заполнение пробелами по мере необходимости)⍕
символьное представление(⌽⍳)⍤0⍣⎕
обратный (⌽
) отсчет до (⍳
) каждого скалярного (⍤0
), повторного (⍣
) ввода (⎕
) раз⊢
на⎕
числовой вводПопробуй APL онлайн!
источник
C 93 байта
Итеративная реализация.
С
6765615652 байтРекурсивная реализация
источник
m
внутриputs()
вызова на"987654321"
.Пакет, 117 байт
Порт Денис ♦ Python ответ.
источник
Рубин, 56 байт
использование
Когда вы отображаете какие-либо решения, вы должны использовать «Kernel # put».
Пример:
источник