Angka Primer 'n'


11

Ini tidak memiliki tujuan praktis tetapi bisa menyenangkan untuk bermain golf.

Tantangan

Diberi nomor n ,

  1. Hitung jumlah setiap digit dalam n dan tambahkan 1 untuk setiap hitungan
  2. Ambil faktorisasi utama n
  3. Hitung jumlah setiap digit dalam faktorisasi utama n , tanpa termasuk bilangan prima duplikat
  4. Buat daftar baru dengan mengalikan bersama masing-masing elemen daftar dari langkah 1 dan 3
  5. Kembalikan jumlah daftar itu

Misalnya, 121 memiliki dua 1s dan a 2, sehingga Anda akan mendapatkan daftar berikut dari langkah 1:

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

Faktorisasi utama 121 adalah 11 2 , yang memberikan daftar berikut untuk langkah 3:

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

Perhatikan bagaimana kita tidak menghitung eksponen. Ini berlipat ganda bersama untuk mendapatkan:

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

Dan jumlah daftar ini adalah 6.

Uji kasus

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

Catatan

  • Celah standar dilarang.
  • Input dan output dapat dalam format apa pun yang masuk akal.
  • Anda harus meninggalkan yang (atau nol untuk langkah 3) dalam daftar untuk digit yang tidak muncul dalam angka.
  • Ini adalah , jadi solusi terpendek dalam byte menang.

Apakah 667 (= 23 * 29) menghasilkan dua 2, satu 3, dan satu 9 dalam langkah 3?
Jonathan Allan

@ JonathanAllan Ya.
RamenChef

2
@ wizzwizz4 232792560-> [2,1,4,2,1,2,2,2,1,2](langkah 1); 2*2*2*2*3*3*5*7*14*17*19(Langkah 2); jadi [0,5,1,2,0,1,0,2,0,1](langkah 3); lalu [0,5,4,4,0,2,0,4,0,2](Langkah 4); dan karenanya harus keluar 21.
Jonathan Allan

@ JonathanAllan Akan menyenangkan jika saya bisa menghitung. : - /
wizzwizz4

Jawaban:


2

Jelly , 16 byte

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

Cobalah online!

Dikembangkan secara independen dari dan tidak persis sama dengan solusi Jelly lainnya .

Penjelasan

Saya gong untuk digunakan 242sebagai input contoh.

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

Jelly ,  18  17 byte

-1 byte berkat caird coinheringaahing & H.PWiz (hindari memasangkan kedua vektor)

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

Tautan monadik mengambil bilangan bulat positif dan mengembalikan bilangan bulat non-negatif.

Cobalah online!

Bagaimana?

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


Atau gunakan produk titik
H.PWiz

2

APL (Dyalog) , 43 41 byte

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

Cobalah online!

Bagaimana?

r←⎕ - masukan ke r

3pco - faktor utama

- unik

⎕D,r- rDilengkapi dengan0-9

⍕¨ - memformat faktor dan rentang yang diawali

⎕D∘.= - perbandingan kartesius dengan setiap elemen string 0123456789

+/¨ - jumlah setiap baris dari dua tabel yang terbentuk

×/ - kalikan dua vektor ke kiri

+/ - jumlah vektor terakhir yang terbentuk



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

Cobalah online!

Kredit

  • Dikurangi dari 136 byte menjadi 127 oleh Mr. Xcoder


@ Mr.Xcoder Diperbarui, terima kasih telah menunjukkan kepada saya penggunaan -~saya selalu sedikit bingung tentang itu. Dan saya harus mulai mengingat <1hal itu. Terima kasih untuk bantuannya.
Neil

Anda dapat melihat melalui ini untuk -~dan hal-hal terkait.
Tn. Xcoder
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.