ESPECIFICAÇÃO
Dadas as m
variáveis, crie todas as combinações conforme a ordem n
. Por exemplo,
A saída do mapeamento de duas variáveis ( a
e b
) para ordenar 1
seria:
- uma
- b
- ab
A saída do mapeamento de duas variáveis ( a
e b
) para ordenar 2
seria:
- uma
- a 2
- b
- b 2
- ab
- a 2 b
- ab 2
- a 2 b 2
A saída do mapeamento de duas variáveis ( a
e b
) para ordenar 3
seria:
- uma
- a 2
- a 3
- b
- b 2
- b 3
- ab
- a 2 b
- a 3 b
- a 3 b 2
- ab 2
- ab 3
- a 2 b 3
- a 2 b 2
- a 3 b 3
A saída de mapeamento três variáveis ( a
, b
, e c
) a fim 1
seria:
- uma
- b
- c
- ab
- bc
- ac
- abc
A saída das m
variáveis de mapeamento para ordenar n
seria:
- etc.
CRITÉRIOS GANHADORES
Saída de todas as combinações possíveis, conforme descrito acima. Ordem não importa. Onde no seu código você imprime na tela não importa. Tudo o que importa é que o que aparece na sua saída esteja correto.
code-golf
arithmetic
code-golf
code-golf
string
chemistry
code-golf
code-golf
code-golf
string
code-golf
string
parsing
code-golf
counting
user1873073
fonte
fonte
^
?m
for maior que 26? temos que apoiar valores tão altos?given m variables
implica que uma lista de variáveis será fornecida. Se apenas o número de variáveis é dado e 0,1,2,3..27,28,29 aumentado para potências ^ 0, ^ 1, ^ 2 etc, é uma saída aceitável (como deduzo em seu último comentário) coisas mais fáceis.Respostas:
Braquilog , 6 bytes
Recebe entrada como um casal, contendo a lista de variáveis e a ordem. Saída é uma lista de listas de variáveis, em que os poderes são representados por variáveis repetidas. (por exemplo, "a²b" é ["a", "a", "b"])
Experimente online!
j₎
une a primeira entrada consigo mesma quantas vezes for declarado pela segunda entrada.o
ordena a lista obtida e⊇ᵘ
localiza todos os subconjuntos exclusivos dessa lista ordenada. Por fim, removemos o primeiro elemento comb
, pois essa sempre será a resposta vazia, que não é contemplada pelo desafio.fonte
L A T E X, 354 bytes
Quando vi isso, sabia que tinha que ser feito em látex. As equações parecem tão nítidas e limpas no látex e não suporto usar o
^
poder.Explicação
Existem três forças principais em ação aqui,
\typein
que é o que nos permite obter informações da linha de comando, ointcalc
pacote que é o que nos permite fazer cálculos com nossas variáveis e oequation
ambiente Latex .Depois de recebermos a entrada, iniciamos um loop, repetimos os
\intcalcPow{\b+1}{\a}
tempos, uma vez para cada resultado que queremos imprimir. A cada loop, iniciamos umequation
ambiente e percorremos o alfabeto, acompanhando\y
a letra atual e\i
o número atual de execuções. Se\i
for maior que ou igual a\a
, não imprimimos nada (de acordo com as especificações, isso não é estritamente necessário; no entanto, o látex excederá valores maiores que 1 se não fizermos isso). Em seguida, imprimimos\y
em nossa equação e aumentamos para o poder deEssa bagunça toda significa simplesmente pegar o
\i
décimo dígito da\x
base\b+1
. Isso garante que os poderes sejam decodificados corretamente.Exemplo de saída:
Aqui está a saída para 3, 2
fonte
Mathematica,
5150 bytesAssume que "determinadas
m
variáveis" significam que a primeira entrada é uma lista de variáveis.Se a primeira entrada for um número inteiro, 69 bytes
As variáveis estão no formato
$<integer>
(por exemplo$5
)fonte
PowerRange
é uma coisa! Concordo com a interpretação da sua primeira submissão btwHaskell,
71585453 bytesRetorna uma lista de strings e usa o formato de saída
"aabbb"
para"a^2 b^3"
.Exemplo de uso:
3 # "ab"
->["b","bb","bbb","a","ab","abb","abbb","aa","aab","aabb","aabbb","aaa","aaab","aaabb","aaabbb"]
. Experimente online! .Muitos bytes são gastos para formatação de saída. Uma saída mais flexível, por exemplo, pares de (variável, potência) ->
[('a',2),('b',3),('c',1)]
para"a^2 b^3 c^1"
economizaria muito.Como funciona
Com flexibilidade máxima, ou seja, o formato de saída como pares (variável, potência) e incluindo potências com zero (
"a^0 b^0 c^0"
), tudo se resume aHaskell, 25 bytes:
Exemplo de uso
f 2 "ab"
::Descartando todas de zero poderes custa 5 bytes para um total de 30:
f n=tail.mapM((<$>[0..n]).(,))
.fonte
[('a',0),('b',0)]
não deve ser na saída ...a^0 b^0
custa 5 bytes. Vou adicionar outra nota.Geléia ,
2017 bytesUm link diádico (função) que aceita uma lista de nomes de variáveis * e a ordem máxima (um número inteiro) e retorna uma lista em que cada entrada é uma representação totalmente expandida da multiplicação (por exemplo, foo 0 bar 3 bof 2 seria
['bar', 'bar', 'bar', 'bof', 'bof']
.* os nomes das variáveis podem ser uma sequência de caracteres únicos (as sequências tornam-se listas de caracteres).
Experimente online! - o rodapé chama o link como díade e depois separa a lista resultante de listas por feeds de linha e cada entrada por espaços para facilitar a leitura.
Nota: inclui o pedido 0 (produto vazio) e uma desenfileiramento
Ḋ
, pode ser inserida aqui...ŒPḊç...
para evitar isso.Como?
Versão de 13 bytes que funcionará apenas para uma única sequência de caracteres únicos (ou uma lista de caracteres únicos):
tente
fonte
JavaScript (proposta de ES), 142 bytes
Requer um navegador com suporte
**
e ambospadStart
, então tente o Firefox 52 ou Chrome 57.fonte
Mathematica 100 bytes
Certamente, existe uma maneira mais eficiente de conseguir isso!
Duas variáveis para pedir 4:
fonte
Bash + sed, 60
Uma abordagem diferente e mais curta da minha resposta anterior.
Entrada como parâmetros da linha de comando -
m
é fornecida como uma lista separada por vírgula de nomes de variáveis en
como um número inteiro:Experimente online .
Resposta anterior:
Bash + coreutils, 91
Bem-vindo ao inferno da eval-escape-brace. Às vezes, o shell-script realmente oferece a ferramenta certa para o trabalho. Este não é o caso aqui, mas funciona.
Entrada como parâmetros da linha de comando -
m
é fornecida como uma lista separada por vírgula de nomes de variáveis en
como um número inteiro. A saída é gravada à mão - por exemplo,a^2
é realmente gravadaaa
. Isso é aceitável conforme este comentário .Pode haver maneiras mais curtas de fazer isso.
Experimente online .
Explicação
printf -vc {%$[$2-1]s}
atribui a variávelc
a uma string como{ }
, onde o número de espaços é a ordemn
- 1, então sen
= 1, o resultado é{}
, sen
= 2, o resultado é{ }
etc.${a[$1]}
usam
como um índice para a matriza
, então, sem
for 3, o resultado serác
\{{a..${a[$1]}}${c// /,}\\,}
é uma expansão de braçadeira de várias partes:\{
- um literal{
{$1}
é a é a expansão entre chaves da listam
, por exemplo,{a,b,c}
oua b c
${c// /,}
substitui os espaços$c
por vírgulas, por exemplo,{,,}
paran
= 3, que também é uma expansão de chaves que repete efetivamente cada elemento de{a..c}
n
vezes\\\,}
- um literal,}
m
= "a, b" en
= 2, isso se expande para{a,} {a,} {b,} {b,}
printf
remove os espaços para dar{a,}{a,}{b,}{b,}
, o que em si é uma expansão de cintaaabb aab aab aa abb ab ab a abb ab ab a bb b b
printf
coloca cada um desses elementos em sua própria linhasort -u
remove as duplicatastr -d {}
está lá para tratar o caso quandon
= 1. No presente caso, a variávelc
será{}
que não é uma expansão cinta, mas em vez disso são inseridos os caracteres literais. Ostr
remove.eval
se\
escapes são colocados com muito cuidado para garantir que todas as expansões ocorram na ordem necessária.fonte
Röda ,
494846 bytesExperimente online!
Eu acho que está correto. Ele não usa nenhum separador entre uma variável e sua ordem. A versão anterior foi usada
!
, mas percebi que não é estritamente necessária.Explicado:
fonte
Python, 112 bytes
Uso:
Resultado:
Melhor formato em 115 bytes :
Saída (mesmo uso):
Ainda melhor em 125 bytes :
Resultado:
Os últimos 4 bytes (
[1:]
) ao todo são para remover o produto vazio.Eles funcionam no Python 2 e 3.
fonte
C ++ 14,
146140 bytes-6 bytes para um formato de saída mais simples.
Lambda sem nome, assumindo entradas
s
comostd::string
eo
comostd::ostream
:Uso e explicação:
Resultado:
fonte