Primes 'n' Digits


11

Cela n'a aucun but pratique, mais cela pourrait être amusant de jouer au golf.

Défi

Étant donné un nombre n ,

  1. Comptez le nombre de chaque chiffre dans n et ajoutez 1 à chaque comptage
  2. Prenez la factorisation de n
  3. Compter la quantité de chaque chiffre dans la factorisation en nombres premiers de n , sans inclure les nombres premiers en double
  4. Créez une nouvelle liste en multipliant les éléments respectifs des listes des étapes 1 et 3
  5. Renvoie la somme de cette liste

Par exemple, 121 a deux 1s et un 2, vous obtiendrez donc la liste suivante à l'étape 1:

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

La décomposition en facteurs premiers de 121 est 11 2 , ce qui donne la liste suivante pour l'étape 3:

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

Notez comment nous n'avons pas compté l'exposant. Ceux-ci se multiplient pour obtenir:

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

Et la somme de cette liste est 6.

Cas de test

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

Remarques

  • Les failles standard sont interdites.
  • L'entrée et la sortie peuvent être dans n'importe quel format raisonnable.
  • Vous devez laisser des uns (ou des zéros pour l'étape 3) dans la liste des chiffres qui n'apparaissent pas dans le numéro.
  • Il s'agit de , donc la solution la plus courte en octets l'emporte.

667 (= 23 * 29) fait-il deux 2, un 3 et un 9 à l'étape 3?
Jonathan Allan

@JonathanAllan Oui.
RamenChef

2
@ wizzwizz4 232792560-> [2,1,4,2,1,2,2,2,1,2](étape 1); 2*2*2*2*3*3*5*7*14*17*19(étape 2); donc [0,5,1,2,0,1,0,2,0,1](étape 3); puis [0,5,4,4,0,2,0,4,0,2](étape 4); et devrait donc sortir 21.
Jonathan Allan

@JonathanAllan Ce serait bien si je pouvais compter. : - /
wizzwizz4

Réponses:


2

Gelée , 16 octets

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

Essayez-le en ligne!

Développé indépendamment de et pas exactement le même que l'autre solution Jelly .

Explication

Je vais utiliser 242comme exemple d'entrée.

ṾċЀØ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ée ,  18  17 octets

-1 octet grâce à caird coinheringaahing & H.PWiz (éviter d' appairer les deux vecteurs)

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

Un lien monadique prenant un entier positif et retournant un entier non négatif.

Essayez-le en ligne!

Comment?

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 utilisez le produit
scalaire

2

APL (Dyalog) , 43 41 octets

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

Essayez-le en ligne!

Comment?

r←⎕ - entrée dans r

3pco - facteurs premiers

- unique

⎕D,r- rajouté avec0-9

⍕¨ - formater les facteurs et la plage pré-ajoutée

⎕D∘.= - comparaison cartésienne avec chaque élément de la chaîne 0123456789

+/¨ - additionner chaque ligne des deux tables formées

×/ - multiplier les deux vecteurs restants

+/ - additionner le dernier vecteur formé



1

Python 2 , 136 127 octets

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))]

Essayez-le en ligne!

Crédits



@ Mr.Xcoder Mis à jour, merci de m'avoir montré l'utilisation de -~j'étais toujours un peu confus là-dessus. Et je dois commencer à me souvenir de la <1chose. Merci pour l'aide.
Neil

Vous pouvez jeter un oeil à travers ce pour -~et d'autres choses connexes.
M. Xcoder
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.