Asal Sayılar ve Basamaklar


11

Bunun pratik bir amacı yok ama golf oynamak eğlenceli olabilir.

Meydan okuma

N sayısı verildiğinde ,

  1. N cinsinden her basamağın miktarını sayın ve her sayıya 1 ekleyin
  2. N'nin birincil çarpanlarına ayırma
  3. N'nin birincil çarpanlarına ayırmasında her bir basamağın miktarını, çift ​​primer içermeden sayın
  4. Adım 1 ve 3'teki listelerin ilgili öğelerini çarparak yeni bir liste oluşturun
  5. Bu listenin toplamını döndür

Örneğin, 121'in iki 1s ve a değeri vardır 2, bu nedenle 1. adımdan aşağıdaki listeyi alırsınız:

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

121'in birincil çarpanlarına ayırma işlemi, adım 3 için aşağıdaki listeyi veren 11 2'dir :

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

Üs değerini nasıl saymadığımızı not edin. Bunlar birlikte elde etmek için çoğalır:

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

Ve bu listenin toplamı 6.

Test senaryoları

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

notlar

  • Standart boşluklar yasaktır.
  • Giriş ve çıkış herhangi bir makul formatta olabilir.
  • Numarada görünmeyen rakamlar için bunları (3. adım için sıfırlar) listede bırakmalısınız.
  • Bu , bu nedenle bayttaki en kısa çözüm kazanır.

667 (= 23 * 29), 3. adımda bir 3 ve bir 9 olmak üzere iki 2s yapar mı?
Jonathan Allan

@JonathanAllan Evet.
RamenChef

2
@ wizzwizz4 232792560-> [2,1,4,2,1,2,2,2,1,2](adım 1); 2*2*2*2*3*3*5*7*14*17*19(Adım 2); böylece [0,5,1,2,0,1,0,2,0,1](aşama 3); sonra [0,5,4,4,0,2,0,4,0,2](Adım 4); ve dolayısıyla çıktı almalıdır 21.
Jonathan Allan

@JonathanAllan Ben sayabilseydim iyi olur. : - /
wizzwizz4

Yanıtlar:


2

Jöle , 16 bayt

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

Çevrimiçi deneyin!

Diğer Jelly çözeltisinden bağımsız olarak geliştirilmiştir ve tam olarak aynı değildir .

açıklama

242Örnek bir girdi olarak kullanacağım gong .

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

Jöle ,  18  17 bayt

Caird Coinheringaahing sayesinde -1 bayt ve H.PWiz (iki vektörü eşleştirmekten kaçının)

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

Pozitif bir tamsayı alan ve negatif olmayan bir tamsayı döndüren monadik bir bağlantı.

Çevrimiçi deneyin!

Nasıl?

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


Veya nokta ürünü kullanın
H.PWiz

2

APL (Dyalog) , 43 41 bayt

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

Çevrimiçi deneyin!

Nasıl?

r←⎕ - giriş r

3pco - ana faktörler

- benzersiz

⎕D,r- ile reklenmiş0-9

⍕¨ - faktörleri ve önerilen aralığı biçimlendirin

⎕D∘.= - ipin her elemanı ile kartezyen karşılaştırma 0123456789

+/¨ - oluşturulan iki tablonun her satırını topla

×/ - kalan iki vektörü çarpma

+/ - oluşturulan son vektörü topla



1

Python 2 , 136127 bayt

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

Çevrimiçi deneyin!

Kredi



@ Mr.Xcoder Güncellenmiş, bana kullanımını gösterdiğiniz için teşekkürler -~her zaman biraz kafam karıştı. Ve <1şeyi hatırlamaya başlamam gerekiyor . Yardım için teşekkürler.
Neil

Bir aracılığıyla göz atabilirsiniz bu için -~ve ilgili malzeme.
Bay Xcoder
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.