СПЕЦИФИКАЦИЯ
Задавая m
переменные, создавайте каждую комбинацию по порядку n
. Например,
Результат отображения двух переменных ( a
и b
) в порядке 1
будет:
- a
- б
- аб
Результат отображения двух переменных ( a
и b
) в порядке 2
будет:
- a
- 2
- б
- б 2
- аб
- а 2 б
- ab 2
- а 2 б 2
Результат отображения двух переменных ( a
и b
) в порядке 3
будет:
- a
- 2
- 3
- б
- б 2
- б 3
- аб
- а 2 б
- а 3 б
- а 3 б 2
- ab 2
- ab 3
- а 2 б 3
- а 2 б 2
- а 3 б 3
Вывод отображения трех переменных ( a
, b
и c
) на заказ 1
будет:
- a
- б
- с
- аб
- до н.э
- переменный ток
- азбука
Вывод m
переменных отображения в порядок n
будет:
- и т.п.
КРИТЕРИИ ПОБЕДЫ
Выведите каждую возможную комбинацию, как описано выше. Заказ не имеет значения. Где в вашем коде вы печатаете на экран, не имеет значения. Все, что имеет значение, это то, что то, что отображается в вашем выводе, является правильным.
^
?m
больше 26? мы должны поддерживать такие высокие ценности?given m variables
данными будут несколько переменных, но текст подразумевает, что будет дан список переменных. Если задано только количество переменных и 0,1,2,3..27,28,29, доведенные до степеней ^ 0, ^ 1, ^ 2 и т. Д., Являются приемлемым выводом (как я понимаю из вашего последнего комментария), он делает все проще.Ответы:
Брахилог , 6 байт
Принимает ввод как пара, содержащая список переменных и порядок. Вывод представляет собой список списков переменных, в которых полномочия представлены повторяющимися переменными. (например, «a²b» - это [«a», «a», «b»])
Попробуйте онлайн!
j₎
соединяет первый вход с самим собой столько раз, сколько указано вторым.o
упорядочивает полученный список, а затем⊇ᵘ
находит все уникальные подмножества этого упорядоченного списка. Наконец, мы удаляем первый элемент сb
, так как это всегда будет пустой ответ, который не рассматривается вызовом.источник
L A T E X, 354 байта
Когда я увидел это, я понял, что это должно быть сделано в латексе. Уравнения в латексе выглядят очень четкими и чистыми, и я не могу использовать их
^
для власти.объяснение
Здесь действуют три основные силы,
\typein
которые позволяют нам получать данные из командной строки,intcalc
пакет, который позволяет нам производить вычисления с нашими переменными, иequation
среда Latex .После того, как мы взяли ввод, мы начинаем цикл, который повторяем
\intcalcPow{\b+1}{\a}
время цикла , по одному разу для каждого результата, который мы хотим напечатать. В каждом цикле мы начинаемequation
окружение и перебираем алфавит, отслеживая\y
текущую букву и\i
текущее количество прогонов. Если\i
значение больше или равно,\a
мы ничего не печатаем (в соответствии со спецификациями это не является строго необходимым, однако, если значения не превышаются, Latex будет переполнен для значений больше 1). Затем мы печатаем\y
наше уравнение и поднимаем его до степениВесь этот бардак просто означает взять в базу
\i
цифру . Это гарантирует, что полномочия декодируются правильно.\x
\b+1
Пример вывода:
Вот выход за 3, 2
источник
Mathematica,
5150 байтПредполагается, «заданные
m
переменные» означает, что первый вход представляет собой список переменных.Если первый вход является целым числом, 69 байтов
Переменные в форме
$<integer>
(например$5
)источник
PowerRange
это вещь! Я согласен с интерпретацией вашего первого представления между прочимHaskell,
71585453 байтаВозвращает список строк и использует выходной формат
"aabbb"
для"a^2 b^3"
.Пример использования:
3 # "ab"
->["b","bb","bbb","a","ab","abb","abbb","aa","aab","aabb","aabbb","aaa","aaab","aaabb","aaabbb"]
. Попробуйте онлайн! ,Многие байты расходуются на форматирование вывода. Более гибкий вывод, например, пары (переменная, мощность) ->
[('a',2),('b',3),('c',1)]
для"a^2 b^3 c^1"
сэкономит много.Как это работает
С максимальной гибкостью, т. Е. Форматом вывода в виде пар (переменная, мощность) и включая все нулевые мощности (
"a^0 b^0 c^0"
), он сводится кHaskell, 25 байт:
Пример использования
f 2 "ab"
::Бросив все нулевой силы стоит 5 байт в общей сложности 30:
f n=tail.mapM((<$>[0..n]).(,))
.источник
[('a',0),('b',0)]
не должно быть в выводе ...a^0 b^0
стоит 5 байт. Я добавлю еще одну заметку.Желе ,
2017 байтДвоичная ссылка (функция), которая принимает список имен переменных * и максимальный порядок (целое число) и возвращает список, где каждая запись является полностью расширенным представлением умножения (например, foo 0 bar 3 bof 2 будет
['bar', 'bar', 'bar', 'bof', 'bof']
.* имена переменных могут быть строкой уникальных символов (строки становятся списками символов).
Попробуйте онлайн! - нижний колонтитул вызывает ссылку как диаду, а затем разделяет результирующий список списков по переводам строк и каждой записи по пробелам для удобства чтения.
Примечание: включает в 0 заказ (пустой продукт) а Dequeue,
Ḋ
могут быть вставлены здесь ,...ŒPḊç...
чтобы избежать этого.Как?
13-байтовая версия, которая будет работать только для одной строки уникальных символов (или списка уникальных символов):
попробуй это
источник
JavaScript (предложение ES), 142 байта
Требуется браузер с поддержкой
**
иpadStart
поддержкой, поэтому попробуйте Firefox 52 или Chrome 57.источник
Mathematica 100 байт
Конечно, есть более эффективный способ сделать это!
Две переменные на порядок 4:
источник
Баш + Сед, 60
Другой, более короткий подход к моему предыдущему ответу.
Ввод в качестве параметров командной строки -
m
задается в виде списка имен переменных, разделенных запятыми, иn
в виде целого числа:Попробуйте онлайн .
Предыдущий ответ:
Bash + coreutils, 91
Добро пожаловать в ад eval-escape-brace. Иногда shell-скрипт действительно дает правильный инструмент для работы. Это не тот случай, но это работает.
Ввод в качестве параметров командной строки -
m
задается в виде списка имен переменных, разделенных запятыми, иn
в виде целого числа. Вывод записывается от руки - например,a^2
на самом деле написаноaa
. Это приемлемо согласно этому комментарию .Там могут быть более короткие способы сделать это.
Попробуйте онлайн .
объяснение
printf -vc {%$[$2-1]s}
присваивает переменнуюc
такой строке{ }
, где количество пробелов - это порядокn
- 1, поэтому, еслиn
= 1, результат будет{}
, еслиn
= 2, результат будет{ }
и т. д.${a[$1]}
используетm
в качестве индекса для массиваa
, поэтому, еслиm
равен 3, то результатc
\{{a..${a[$1]}}${c// /,}\\,}
это расширение из нескольких частей:\{
- буквальный{
{$1}
является расширением спискаm
, например,{a,b,c}
илиa b c
${c// /,}
заменяет пробелы в$c
запятых, например,{,,}
дляn
= 3, который также является расширением скобки, которое эффективно повторяет каждый элемент{a..c}
n
раз\\\,}
- буквальный,}
m
= "a, b" иn
= 2 это расширяется до{a,} {a,} {b,} {b,}
printf
удаляет пробелы, чтобы дать{a,}{a,}{b,}{b,}
, который сам является расширением скобкиaabb aab aab aa abb ab ab a abb ab ab a bb b b
printf
помещает каждый из этих элементов на отдельной линииsort -u
удаляет дубликатыtr -d {}
есть, чтобы обрабатывать случай, когдаn
= 1. В этом случаеc
будет переменная ,{}
которая не является расширением скобки, но вместо этого вставляются литеральные символы.tr
Удаляет их.eval
s и\
побеги расположены очень осторожно, чтобы все расширения происходили в нужном порядке.источник
Рёда ,
494846 байтПопробуйте онлайн!
Я думаю, что это правильно. Он не использует разделитель между переменной и ее порядком. Использовалась предыдущая версия
!
, но я понял, что она не обязательна.Разъяснение:
источник
Python, 112 байт
Применение:
Вывод:
Более хороший формат в 115 байтов :
Выход (такое же использование):
Еще лучше в 125 байтах :
Вывод:
Последние 4 байта (
[1:]
) для удаления пустого продукта.Они работают в Python 2 и 3.
источник
C ++ 14,
146140 байт-6 байт для более простого формата вывода.
Безымянная лямбда, при условии ввода
s
какstd::string
иo
какstd::ostream
:Использование и объяснение:
Вывод:
источник