Primos 'n' Digits


11

Isso não tem propósito prático, mas pode ser divertido jogar golfe.

Desafio

Dado um número n ,

  1. Conte a quantidade de cada dígito em n e adicione 1 a cada contagem
  2. Tome a fatoração primária de n
  3. Contar a quantidade de cada dígito na fatoração primária de n , sem incluir números primos duplicados
  4. Crie uma nova lista multiplicando os respectivos elementos das listas das etapas 1 e 3
  5. Retorna a soma dessa lista

Por exemplo, 121 tem dois se 1um 2, então você obteria a seguinte lista da etapa 1:

0 1 2 3 4 5 6 7 8 9
1 3 2 1 1 1 1 1 1 1

A fatoração primária de 121 é 11 2 , que fornece a seguinte lista para a etapa 3:

0 1 2 3 4 5 6 7 8 9
0 2 0 0 0 0 0 0 0 0

Observe como não contamos o expoente. Eles se multiplicam para obter:

0 1 2 3 4 5 6 7 8 9
0 6 0 0 0 0 0 0 0 0

E a soma desta lista é 6.

Casos de teste

1 -> 0
2 -> 2
3 -> 2
4 -> 1
5 -> 2
10 -> 2
13 -> 4
121 -> 6

Notas

  • As brechas padrão são proibidas.
  • A entrada e a saída podem estar em qualquer formato razoável.
  • Você deve deixar uns (ou zeros na etapa 3) na lista para dígitos que não apareceram no número.
  • Isso é , então a solução mais curta em bytes vence.

667 (= 23 * 29) representa dois 2s, um 3 e um 9 na etapa 3?
Jonathan Allan

@JonathanAllan Sim.
RamenChef

2
@ wizzwizz4 232792560-> [2,1,4,2,1,2,2,2,1,2](etapa 1); 2*2*2*2*3*3*5*7*14*17*19(passo 2); então [0,5,1,2,0,1,0,2,0,1](passo 3); então [0,5,4,4,0,2,0,4,0,2](Etapa 4); e, portanto, deve produzir 21.
Jonathan Allan

@ JonathanAllan Seria bom se eu pudesse contar. : - /
wizzwizz4

Respostas:


2

Gelatina , 16 bytes

ṾċЀØD
ÆfQÇ×Ç‘$S

Experimente online!

Desenvolvido independentemente e não exatamente o mesmo que a outra solução Jelly .

Explicação

Eu vou usar 242como exemplo de entrada.

ṾċЀØD     Helper link
Ṿ          Uneval. In this case, turns it's argument into a string. 
           242Ṿ → ['2','4','2']. [2,11] → ['2', ',', '1', '1']. The ',' won't end up doing anything.
    ØD     Digits: ['0','1',...,'9']
 ċЀ       Count the occurrence of €ach digit in the result of Ṿ

ÆfQÇ×Ç‘$S  Main link. Argument 242
Æf         Prime factors that multiply to 242 → [2,11,11]
  Q        Unique elements → [2,11]
   Ç       Apply helper link to this list → [0,2,1,0,0,0,0,0,0,0]
     Ç‘$   Apply helper link to 242 then add 1 to each element → [1,1,3,1,2,1,1,1,1,1]
    ×      Multiply the two lists element-wise → [0,2,3,0,0,0,0,0,0,0]
        S  Sum of the product → 5

4

Geléia ,  18  17 bytes

-1 byte graças a caird coinheringaahing e H.PWiz (evite emparelhar os dois vetores)

DF‘ċЀ⁵
ÆfQÇæ.Ç‘$

Um link monádico que pega um número inteiro positivo e retorna um número inteiro não negativo.

Experimente online!

Quão?

DF‘ċЀ⁵ - Link 1, digitalCount: number(s)    e.g. [13,17]
D       - to decimal list (vectorises)            [[1,3],[1,7]]
 F      - flatten                                 [1,3,1,7]
  ‘     - increment (vectorises)                  [2,4,2,8]
      ⁵ - literal ten                             10
    Ѐ  - map across              (implicit range [1,2,3,4,5,6,7,8,9,10])
   ċ    - count                                   [0,2,0,1,0,0,0,1,0,0]

ÆfQÇæ.Ç‘$ - Main link: positive integer, n   e.g. 11999
        $ - last two links as a monad:
      Ç   -   call the last link (1) as a monad   [0,2,0,0,0,0,0,0,0,3]
       ‘  -   increment (vectorises)              [1,3,1,1,1,1,1,1,1,4]
Æf        - prime factorisation                   [13,13,71]
  Q       - deduplicate                           [13,17]
   Ç      - call the last link (1) as a monad     [0,2,0,1,0,0,0,1,0,0]
    æ.    - dot product                           8


Ou use o produto com ponto
H.PWiz

2

APL (Dyalog) , 43 41 bytes

CY'dfns'
+/×/+/¨⎕D∘.=⍕¨(⎕D,r)(∪3pco r←⎕)

Experimente online!

Quão?

r←⎕ - entrada em r

3pco - fatores primos

- único

⎕D,r- ranexado com0-9

⍕¨ - formate os fatores e o intervalo precedido

⎕D∘.= - comparação cartesiana com todos os elementos da string 0123456789

+/¨ - soma cada linha das duas tabelas formadas

×/ - multiplique os dois vetores restantes

+/ - soma o último vetor formado



1

Python 2 , 136 127 bytes

lambda a:sum(''.join(u(a)).count(`i`)*-~`a`.count(`i`)for i in range(10))
u=lambda a:[`j`for j in range(2,a)if a%j<1>len(u(j))]

Experimente online!

Créditos



@ Mr.Xcoder Atualizado, obrigado por me mostrar o uso de que -~eu estava sempre um pouco confuso sobre isso. E eu preciso começar a lembrar da <1coisa. Obrigado pela ajuda.
Neil

Você pode dar uma olhada através desta para -~e coisas relacionadas.
Sr. Xcoder
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.