Primes 'n' Digits


11

Questo non ha uno scopo pratico ma potrebbe essere divertente giocare a golf.

Sfida

Dato un numero n ,

  1. Contare la quantità di ciascuna cifra in n e aggiungere 1 a ciascun conteggio
  2. Prendi la scomposizione in fattori primi di n
  3. Conta la quantità di ogni cifra nella fattorizzazione in primo piano di n , senza includere numeri primi duplicati
  4. Crea un nuovo elenco moltiplicando insieme i rispettivi elementi degli elenchi dai passaggi 1 e 3
  5. Restituisce la somma di tale elenco

Ad esempio, 121 ha due se 1una 2, quindi otterresti il ​​seguente elenco dal passaggio 1:

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

La scomposizione in fattori primi di 121 è 11 2 , che fornisce il seguente elenco per il passaggio 3:

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

Nota come non abbiamo contato l'esponente. Questi si moltiplicano insieme per ottenere:

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

E la somma di questo elenco è 6.

Casi test

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

Appunti

  • Sono vietate le scappatoie standard .
  • L'input e l'output possono essere in qualsiasi formato ragionevole.
  • Dovresti lasciare uno (o zero per il passaggio 3) nell'elenco per le cifre che non sono state visualizzate nel numero.
  • Questo è , quindi vince la soluzione più breve in byte.

667 (= 23 * 29) fa due 2, uno 3 e uno 9 nel passaggio 3?
Jonathan Allan il

@JonathanAllan Sì.
RamenChef il

2
@ wizzwizz4 232792560-> [2,1,4,2,1,2,2,2,1,2](passaggio 1); 2*2*2*2*3*3*5*7*14*17*19(passo 2); quindi [0,5,1,2,0,1,0,2,0,1](passaggio 3); quindi [0,5,4,4,0,2,0,4,0,2](passaggio 4); e quindi dovrebbe produrre 21.
Jonathan Allan il

@JonathanAllan Sarebbe bello se potessi contare. : - /
wizzwizz4,

Risposte:


2

Gelatina , 16 byte

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

Provalo online!

Sviluppato indipendentemente e non esattamente uguale all'altra soluzione Jelly .

Spiegazione

Sono gong da usare 242come input di esempio.

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

Gelatina ,  18  17 byte

-1 byte grazie a caird coinheringaahing e H.PWiz (evitare di accoppiare i due vettori)

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

Un collegamento monadico che prende un numero intero positivo e restituisce un numero intero non negativo.

Provalo online!

Come?

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


Oppure usa il prodotto punto
H.Piz,

2

APL (Dyalog) , 43 41 byte

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

Provalo online!

Come?

r←⎕ - input in r

3pco - fattori primari

- unico

⎕D,r- ranteposto a0-9

⍕¨ - formattare i fattori e l'intervallo anteposto

⎕D∘.= - confronto cartesiano con ogni elemento della stringa 0123456789

+/¨ - somma ogni riga delle due tabelle formate

×/ - moltiplica i due vettori rimasti

+/ - somma l'ultimo vettore formato



1

Python 2 , 136 127 byte

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

Provalo online!

Titoli di coda



@ Mr.Xcoder Aggiornato, grazie per avermi mostrato l'uso di -~me ne sono sempre stato un po 'confuso. E devo iniziare a ricordare la <1cosa. Grazie per l'aiuto.
Neil,

Si può prendere uno sguardo attraverso questo per -~ed altro materiale correlato.
Mr. Xcoder il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.