Primes 'n' Digits


11

Esto no tiene un propósito práctico, pero podría ser divertido jugar al golf.

Desafío

Dado un número n ,

  1. Cuente la cantidad de cada dígito en ny agregue 1 a cada recuento
  2. Tome la factorización prima de n
  3. Cuente la cantidad de cada dígito en la factorización prima de n , sin incluir primos duplicados
  4. Cree una nueva lista multiplicando los elementos respectivos de las listas de los pasos 1 y 3
  5. Devuelve la suma de esa lista

Por ejemplo, 121 tiene dos 1sy a 2, por lo que obtendría la siguiente lista del paso 1:

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

La factorización prima de 121 es 11 2 , que proporciona la siguiente lista para el paso 3:

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

Note como no contamos el exponente. Estos se multiplican para obtener:

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

Y la suma de esta lista es 6.

Casos de prueba

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

Notas

  • Las lagunas estándar están prohibidas.
  • La entrada y salida pueden estar en cualquier formato razonable.
  • Debe dejar unos (o ceros para el paso 3) en la lista de dígitos que no aparecen en el número.
  • Este es el , por lo que gana la solución más corta en bytes.

¿667 (= 23 * 29) hace dos 2, uno 3 y un 9 en el paso 3?
Jonathan Allan

@JonathanAllan Sí.
RamenChef

2
@ wizzwizz4 232792560-> [2,1,4,2,1,2,2,2,1,2](paso 1); 2*2*2*2*3*3*5*7*14*17*19(paso 2); entonces [0,5,1,2,0,1,0,2,0,1](paso 3); entonces [0,5,4,4,0,2,0,4,0,2](Paso 4); y por lo tanto debería salir 21.
Jonathan Allan

@ JonathanAllan Sería bueno si pudiera contar. : - /
wizzwizz4

Respuestas:


2

Jalea , 16 bytes

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

Pruébalo en línea!

Desarrollado independientemente y no exactamente igual que la otra solución Jelly .

Explicación

Voy a usarlo 242como entrada de ejemplo.

ṾċЀØ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

Jalea ,  18  17 bytes

-1 byte gracias a caird coinheringaahing y H.PWiz (evite emparejar los dos vectores)

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

Un enlace monádico que toma un número entero positivo y devuelve un número entero no negativo.

Pruébalo en línea!

¿Cómo?

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


O use el producto de punto
H.PWiz el

2

APL (Dyalog) , 43 41 bytes

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

Pruébalo en línea!

¿Cómo?

r←⎕ - Entrada en r

3pco - factores primos

- único

⎕D,r- rantepuesto con0-9

⍕¨ - formatear los factores y el rango antepuesto

⎕D∘.= - comparación cartesiana con cada elemento de la cadena 0123456789

+/¨ - suma cada fila de las dos tablas formadas

×/ - multiplica los dos vectores restantes

+/ - suma el último vector formado



1

Python 2 , 136127 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))]

Pruébalo en línea!

Créditos



@ Mr.Xcoder Actualizado, gracias por mostrarme el uso de -~Siempre estaba un poco confundido con eso. Y necesito comenzar a recordar la <1cosa. Gracias por la ayuda.
Neil

Puede echar un vistazo a través de este para -~y cosas relacionadas.
Sr. Xcoder
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.