Hoje, na minha aula de estatística, descobri que alguns fatoriais podem ser simplificados quando multiplicados! Por exemplo:5! * 3! = 5! *3*2 = 5! *6 = 6!
Seu emprego:
Dada uma string contendo apenas números arábicos e pontos de exclamação, simplifique meu fatorial até a menor string possível, na menor quantidade de bytes para o seu idioma, codifique o estilo de golfe.
Entrada
Uma sequência contendo apenas números arábicos e pontos de exclamação. Os fatoriais para a entrada não serão maiores que 200 !. Os fatoriais não terão mais de um fator por número. A entrada pode ser tomada como uma lista de números inteiros.
Resultado
Uma cadeia possivelmente encurtada, que tem o valor equivalente na entrada. A ordem não é importante. A notação fatorial é uma obrigação, mas você não precisa usar mais de um símbolo fatorial por número.
Casos de teste
In: 3!2!2!
Out: 4!
In 2!3!2!0!
Out: 4!
In: 7!2!2!7!2!2!2!2!
Out: 8!8!
In: 23!3!2!2!
Out: 24!
Also: 4!!
In: 23!3!2!2!2!
Out: 24!2!
In: 127!2!2!2!2!2!2!2!
Out: 128!
In: 32!56!29!128!
Out: 29!32!56!128!
Boa sorte
1!1!
apenas uma string vazia?Respostas:
Geléia ,
1718 bytesUm link monádico obtendo e retornando uma lista dos números (fica na opção de um fatorial por número)
Experimente online!
Quão?
Uma versão para golfe (embora escrita de forma independente) da solução de Pietu1998.
fonte
Geléia , 19 bytes
Experimente online!
Rapido e sujo. Muito lento, até o
23!2!3!2!
caso de teste é exagerado. E / S como listas de números inteiros.Explicação
fonte
Limpo ,
397... 317 bytesExperimente online!
Isso leva a
[Int]
, determina os fatores primos do resultado e reduz sobre os fatores para encontrar a menor representação, usando o maior fator em qualquer estágio como um valor de linha de base para o próximo fator fatorial. Ele não conclui alguns casos de teste no TIO, mas é bastante rápido e pode executá-los em menos de 3 minutos em um laptop de médio porte.* para um
O((prod(N)!)^sum(N))
algoritmo de complexidadefonte
> <> , 66 bytes
Experimente online!
Não é eficiente, não encontra a menor string e o intérprete não lida muito bem com números extremamente grandes. Mas pelo menos eu tentei? Recebe a entrada como uma lista de números através do
-v
bandeira.Primeiro, calcula o valor da entrada fatorializando cada número e multiplicando-os juntos. Em seguida, encontra o maior fatorial que divide de maneira limpa o total e o produz. Repita até obter um prime (que sai) ou um 1 e sair do programa. Por isso, às vezes não encontra a representação mais curta do número, por exemplo, o caso de teste
7!2!2!7!2!2!2!2!
retorna em10!224
vez de8!8!
porque acha que o total é divisível por 10! primeiro.fonte
Ruby ,
240 237233 bytesIsso é incrivelmente ineficiente
Aceita uma matriz de entradas como entrada
Retorna uma string e escolhe a opção mais curta entre, digamos
'720!'
,'6!!'
e'3!!!'
Experimente online!
fonte