Primes 'n' Digits


11

To nie ma praktycznego celu, ale golf może być świetną zabawą.

Wyzwanie

Biorąc pod uwagę liczbę n ,

  1. Policzyć ilość każdej cyfry w n i dodać 1 do każdej liczby
  2. Weźmy pierwszą faktoryzację n
  3. Policz liczbę każdej cyfry w rozkładzie na czynniki pierwsze n , bez uwzględnienia podwójnych liczb pierwszych
  4. Utwórz nową listę, mnożąc odpowiednie elementy list z kroków 1 i 3
  5. Zwraca sumę tej listy

Na przykład 121 ma dwa 1si a 2, więc w kroku 1 uzyskasz następującą listę:

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

Pierwotna faktoryzacja 121 wynosi 11 2 , co daje następującą listę dla kroku 3:

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

Zwróć uwagę, że nie policzyliśmy wykładnika. Mnożą się one razem, aby uzyskać:

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

A suma tej listy wynosi 6.

Przypadki testowe

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

Notatki

  • Standardowe luki są zabronione.
  • Dane wejściowe i wyjściowe mogą być w dowolnym rozsądnym formacie.
  • Powinieneś zostawić jedynki (lub zera dla kroku 3) na liście dla cyfr, które nie pojawiły się w numerze.
  • To jest , więc wygrywa najkrótsze rozwiązanie w bajtach.

Czy 667 (= 23 * 29) daje dwa 2, jeden 3 i jeden 9 w kroku 3?
Jonathan Allan

@JathanathanAllan Tak.
RamenChef

2
@ wizzwizz4 232792560-> [2,1,4,2,1,2,2,2,1,2](krok 1); 2*2*2*2*3*3*5*7*14*17*19(krok 2); tak [0,5,1,2,0,1,0,2,0,1](krok 3); następnie [0,5,4,4,0,2,0,4,0,2](krok 4); i dlatego powinien generować 21.
Jonathan Allan

@JonathanAllan Byłoby miło, gdybym mógł liczyć. : - /
wizzwizz4

Odpowiedzi:


2

Galaretka , 16 bajtów

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

Wypróbuj online!

Opracowany niezależnie od innego rozwiązania Jelly i nie do końca taki sam .

Wyjaśnienie

Mam zamiar użyć 242jako przykładowego wejścia.

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

Galaretka ,  18  17 bajtów

-1 bajt dzięki Cairnowi Coherheringaahing i H.PWiz (unikaj parowania dwóch wektorów)

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

Łącze monadyczne przyjmujące dodatnią liczbę całkowitą i zwracające nieujemną liczbę całkowitą.

Wypróbuj online!

W jaki sposób?

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


Lub użyj produktu kropkowego
H.PWiz,

2

APL (Dyalog) , 43 41 bajtów

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

Wypróbuj online!

W jaki sposób?

r←⎕ - wejście do r

3pco - czynniki pierwsze

- wyjątkowy

⎕D,r- rz dodatkiem0-9

⍕¨ - sformatuj współczynniki i zalecany zakres

⎕D∘.= - porównanie kartezjańskie z każdym elementem łańcucha 0123456789

+/¨ - zsumuj każdy wiersz dwóch utworzonych tabel

×/ - pomnożyć dwa pozostałe wektory

+/ - zsumuj ostatni utworzony wektor



1

Python 2 , 136 127 bajtów

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

Wypróbuj online!

Kredyty



@ Mr.Xcoder Zaktualizowano, dziękuję za pokazanie mi, że -~zawsze byłem trochę zdezorientowany. I muszę zacząć pamiętać o tym <1. Dzięki za pomoc.
Neil,

Można spojrzeć przez to na -~i związanej rzeczy.
Pan Xcoder,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.