Soma de combinações com repetição


8

Escreva o código mais curto possível para resolver o seguinte problema:

Entrada:

Um número inteiro X com 2 <= XeX <= 100

Resultado:

Total de combinações de 2, 3 e 5 (a repetição é permitida, a ordem é importante) cuja soma é igual a X.

Exemplos:

Entrada: 8

Saída:, 6porque as combinações válidas são:

3+5
5+3
2+2+2+2
2+3+3
3+2+3
3+3+2

Entrada: 11

Saída:, 16porque as combinações válidas são

5+3+3
5+2+2+2
3+5+3
3+3+5
3+3+3+2
3+3+2+3
3+2+3+3
3+2+2+2+2
2+5+2+2
2+3+3+3
2+3+2+2+2
2+2+5+2
2+2+3+2+2
2+2+2+5
2+2+2+3+2
2+2+2+2+3

Entrada: 100

Saída:, 1127972743581281porque as combinações válidas são ... muitas

A entrada e a saída podem ter qualquer forma razoável. A contagem de bytes mais baixa em cada idioma vence. Aplicam-se as regras padrão de .


1
Bem-vindo ao PPCG! Infelizmente, aqui não respondemos a perguntas gerais de programação. No entanto, você poderá obter ajuda no estouro de pilha . Apenas verifique sua central de ajuda antes de perguntar. :)
Erik the Outgolfer

1
Alguém pode reformular isso em um desafio? Porque isso seria divertido.
Urna de polvo mágico

1
@Shaggy Ugghhh ... filtrando através dos desafios com a palavra sumem si não foi uma boa idéia para tentar resolver esse inquérito ...
Magia Octopus Urna

2
Reescrevi sua pergunta um pouco para torná-la melhor no codegolf. Também alterei o resultado da entrada 11de 12para 16. Claro que se sentir livre para corrigir isso, se eu não entendi a sua intenção
Ton Hospel

Respostas:



6

Oásis , 9 bytes

cd5e++VT1

Experimente online!

Explicação

        1    # a(0) = 1
       T     # a(1) = 0, a(2) = 1
      V      # a(3) = 1, a(4) = 1

             # a(n) = 
c    +       # a(n-2) +
 d  +        # a(n-3) +
  5e         # a(n-5)

3

Pitão , 9 bytes

/sM{y*P30

Experimente aqui!

Pitão , 16 bytes

l{s.pMfqT@P30T./

Experimente aqui

Quão?

  1. Gera os fatores primos de 30 , ou seja, [2, 3, 5] , obtém o conjunto de repetições N vezes, remove elementos duplicados, soma cada lista e conta as ocorrências de N nela .

  2. Para cada parição inteira p , verifica se p é igual a p ∩ primefac (30) . Ele mantém apenas aqueles que atendem a essa condição e, para cada partição remanescente k , obtém a lista de permutações de k , nivela a lista resultante em 1 nível, desduplica-a e recupera o comprimento.


3

Gelatina , 11 bytes

5ÆRẋHŒPQḅ1ċ

Experimente online!

Como funciona

5ÆRẋHŒPQḅ1ċ -> Programa completo. Argumento: N, um número inteiro.
5ÆR -> Empurra todos os números primos entre 2 e 5, inclusive.
   ẋH -> Repita esta lista N / 2 vezes.
     ŒP -> Gere o conjunto de potência.
       Q -> Remover entradas duplicadas.
        ḅ1 -> Converta cada um dos unários (ou seja, soma cada lista)
          Count -> Conte as ocorrências de N nesta lista.

Acelerá-lo, substituindo ³com H(em seguida, ele irá expirar em 12 em vez de 6)
Jonathan Allan

@JonathanAllan Feito, obrigado.
Sr. Xcoder

2

Perl, 38 bytes

Inclui +1parap

perl -pE '$_=1x$_;/^(...?|.{5})+$(?{$\++})\1/}{' <<< 11; echo

Interessante o suficiente para usar \1para forçar o retorno. Normalmente eu uso, ^mas o otimizador de expressões regulares parece muito inteligente para isso e dá resultados muito baixos. Provavelmente terei que começar a fornecer números de versão perl ao usar esse truque, pois o otimizador pode mudar a cada versão. Isso foi testado emperl 5.26.1

Isso 49é eficiente e pode realmente lidar X=100(mas estourar X=1991)

perl -pe '$\=$F[@F]=$F[-2]+$F[-3]+$F[-5]for($F[5]=1)..$_}{' <<< 100;echo




1

MATL , 15 bytes

:"5Zq@Z^!XsG=vs

Muito ineficiente: a memória necessária é exponencial.

Experimente online!

Como funciona

:"       % For each k in [1 2 ... n], where n is implicit input
  5Zq    %   Push primes up to 5, that is, [2 3 5]
  @      %   Push k
  Z^     %   Cartesian power. Gives a matrix where each row is a Cartesian k-tuple
  !Xs    %   Sum of each row
  G=     %   Compare with input, element-wise
  vs     %   Concatenate all stack contents vertically and sum
         % Implicit end. Implicit display





0

Pitão, 12 bytes

l{fqQsTy*P30

Isso é terrivelmente ineficiente e atinge o limite de memória para entradas acima de 5.

Experimente online

Explicação

l{fqQsTy*P30
         P30   Get the prime factors of 30 [2, 3, 5].
        *   Q  Repeat them (implicit) input times.
       y       Take the power set...
  fqQsT        ... and filter the ones whose sum is the input.
l{             Count unique lists.


0

Wolfram Language (Mathematica) , 43 bytes

Tr[Multinomial@@@{2,3,5}~FrobeniusSolve~#]&

Experimente online!

Explicação: FrobeniusSolvecalcula todas as soluções da soma não ordenada 2a + 3b + 5c = ne depois Multinomialdescobre quantas maneiras podemos ordenar essas somas.

Ou podemos simplesmente copiar a solução de todos os outros pela mesma contagem de bytes:

f@1=0;f[0|2|3|4]=1;f@n_:=Tr[f/@(n-{2,3,5})]

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.