Ulepsz swój kod


37

Wkład

brak danych wejściowych do tego wyzwania

Wyzwanie

Napisz kod wyjściowy:
Pierwsze 10 liczb pierwszych, których suma ich cyfr jest równa liczbie bajtów twojego kodu

Przykłady

Powiedzmy, że twój kod jest tym, Co&%423@k"oo"który 13 bytes
kod musi wypisać [67, 139, 157, 193, 229, 283, 337, 373, 409, 463]
, to pierwsze 10 liczb pierwszych, których suma ... ok, rozumiesz!

Jeśli masz kod 8 bytes, musisz wygenerować dane wyjściowe[17, 53, 71, 107, 233, 251, 431, 503, 521, 701]

Zasady

Musisz używać tylko pierwszych 10 ^ 8 liczb pierwszych,
co oznacza, że ​​wszystkie twoje liczby muszą być <2038074743 = 10 ^ 8-ta liczba pierwsza

Jeśli nie możesz znaleźć 10 liczb pierwszych w tym zakresie, które pasują do twoich bajtów, będziesz musiał dostosować swój kod (być może nawet będziesz musiał dodać kilka bajtów!), Aby znaleźć „ działającą liczbę bajtów

Po prostu wypisz 10 liczb pierwszych w dowolny sposób

To jest , więc wygrywa najkrótszy kod w bajtach!


1
Nie mogę edytować komentarza, więc po prostu usuwam i publikuję ponownie: Oto lista zawierająca liczby pierwsze, które musisz podać dla podanej liczby bajtów, a także ich indeksy: link Ponieważ zrobiłem to naiwnie, sprawdziłem tylko podsumowania do pierwszych 10 ^ 7 liczb pierwszych. Jak wspomniano w niektórych odpowiedziach, brakuje wartości, które prawdopodobnie korelują z nieosiągalnymi sumami cyfrowymi, chociaż w przypadku większych kwot może się tak nie zdarzyć (pamiętaj, że sprawdziłem tylko pierwsze 10 ^ 7 liczb pierwszych).
cole

„w dowolny sposób” : czy liczby pierwsze należy zamówić?
Arnauld

@Arnauld Nie, ale muszą być o 10 mniejsze w dowolnej kolejności

1
@KevinCruijssen Chociaż twoja odpowiedź jest nieprawidłowa, możesz ją opublikować w celu przeprowadzenia dyskusji z innymi członkami, aby pomóc ci znaleźć lepszą.

1
@TessellatingHeckler Myślę również, że granica 10 ^ 8 jest raczej arbitralna. Aby sprawdzić, czy wszystkie dziesięć podanych liczb ma sumę cyfr 350 i wszystkie są liczbami pierwszymi, powinno być szybkie. Jednak sprawdzenie, czy te dziesięć jest w rzeczywistości najmniejszymi możliwymi, może być trudniejsze.
Jeppe Stig Nielsen

Odpowiedzi:


15

Neim , 10 8 7 bajtów

-1 bajt dzięki tylko ASCII.

πᛦ𝐋Λ𝐬7𝔼

Wypróbuj online!

Wyjścia:

[7 43 61 151 223 241 313 331 421 601]

To (cóż, przynajmniej podejście) jest niestosowne.

Wyjaśnienie

πᛦ𝐋Λ𝐬7𝔼

π        push 13 (yes, very unintuitive :P)
 ᛦ       square (13² = 169)
  𝐋      push the first 169 primes
   Λ     filter those that when the following are executed, evaluate to 1
    𝐬    sum its digits and...
     7𝔼  check for equality against 7

2
najlepiej jak dotąd .. !!!

νᛦ𝐋Λ𝐬7𝔼dla 7 ... edytuj: π-> ν: p
Jonathan Allan

@JonathanAllan Wygląda na to, że zostałeś ninja tylko przez ASCII. ;)
całkowicie ludzki,

Wow, naprawdę jest instrukcja wypychania pierwszych n liczb pierwszych? Schludny!
isaac9A

9

Galaretka , 14 bajtów

‘ÆNDS=14ø⁵#‘ÆN

Wypróbuj online!

To drukuje:

[59, 149, 167, 239, 257, 293, 347, 383, 419, 491]

Jak to działa

‘ÆNDS=14ø⁵#‘ÆN
          #     Count the first 
         ⁵        10
                Non-negative integers which meet:
‘ÆN               the (z+1)-th prime  (1-indexed :*()
   D              digits
    S             sum
     =            equals
      14          14
           ‘ÆN  Get those primes

8
zdobądź te liczby pierwsze!
undergroundmonorail

6

Pyth , 14 bajtów

.f&qsjZT14P_ZT

Wypróbuj tutaj.

To 14 bajtów i wydruków:

[59, 149, 167, 239, 257, 293, 347, 383, 419, 491]

Pyth , 16 bajtów

.f&qssM`Z16P_ZTZ

Wypróbuj tutaj!

Zauważ, że może to być 15 bajtów: .f&qssM`Z16P_ZTZale nie ma liczb pierwszych, które mają 15 jako sumę ich cyfr, ponieważ 15jest on podzielny przez 3, co oznaczałoby, że liczba byłaby podzielna przez 3, a zatem nie byłaby liczbą pierwszą.

Ma długość 16 bajtów i drukuje:

[79, 97, 277, 349, 367, 439, 457, 547, 619, 673]

W jaki sposób?

Wyjaśnienie 1

.f&qsjZT16P_ZT - Full program.

.f&           T  - First 10 numbers that satisfy the following:

           P_Z     - Are prime and
    sjZT           - And their sum of digits
   q     14        - Equals 14.

Wyjaśnienie 2

.f&qssM`Z16P_ZTZ - Full program.

.f&           T  - First 10 numbers that satisfy the following:

           P_Z     - Are prime and
    ssM`Z          - And their sum of digits
   q     16        - Equals 16.

1
Dobra robota! i szybko!

„Bardzo nieliczne liczby całkowite, które mają 15 jako sumę swoich cyfr” - w rzeczywistości, ponieważ suma cyfr podzielna przez 3 oznacza podzielność przez 3 :)
Lynn

@ Lynn Oh pewnie> _> - Jestem głupi, przepraszam. Naprawiono
Mr. Xcoder

6

Łuska , 13 bajtów

↑10fȯ=13ΣdfṗN

Wypróbuj online!

Wyjaśnienie

            N    Take the (infinite) list of all natural numbers.
          fṗ     Select only the primes.
   fȯ            Filter again by the result of composing the following three functions:
         d         Get the decimal digits.
        Σ          Sum them.
     =13           Check whether the sum equals 13.
↑10              Take the first 10 primes in the result.

Prawie grał w golfa do 10 bajtów, ale jeden z wyników jest nieprawidłowy :( tio.run/##yygtzv7//1HbREODtPxDyywftU04sqHg/38A
Leo

@Leo Heh, byłoby bardzo fajnie, gdyby to zadziałało :)
Martin Ender

6

Haskell , 77 71 bajtów

x=take 10[i|i<-[1..],sum(read.pure<$>show i)==71,all((>0).rem i)[2..i-1]]

Wypróbuj online!

Zaoszczędzono 6 bajtów dzięki Laikoni

Dla 71 bajtów:

[89999999,99899999,99998999,99999989,189989999,189998999,189999989,197999999,199898999,199979999]

wszystkie twoje liczby muszą być <2038074743

1999999999 jest liczbą z maksymalną sumą cyfr w dozwolonym zakresie, a suma ta wynosi 82. Każdy program, który ma więcej niż 82 bajty, nie spełni warunku. Mam nadzieję, że 77 bajtów jest w porządku, ale nie wiem (nadal działa na moim komputerze).

EDYCJA: nieco zoptymalizowana wersja dała dla 77 bajtów:

[699899999,779999999,788999999,789999989,797999999,798899999,799898999,799899899,799999799,879999899]

6

Galaretka ,  14  13 bajtów

DS⁼13
.ȷÆRÇÐf

Wypróbuj online!

W jaki sposób?

DS⁼13 - Link 1, test digit sum equals thirteen: number, n
D     - get a list of the decimal digits of n
 S    - sum them
  ⁼13 - equals thirteen?

.ȷÆRÇÐf - Main link: no arguments
.ȷ      - literal 500
  ÆR    - prime range (all primes less than or equal to 500)
     Ðf - filter keep if:
    Ç   -   call last link (1) as a monad


5

05AB1E , 10 bajtów

83LØʒSOTQ}

Wypróbuj online!

}Stosuje się jako wypełniacz, od 9 jest nieważny liczba bajtów.

Wydajność: [19, 37, 73, 109, 127, 163, 181, 271, 307, 433]

Wyjaśnienie

83L        Push array [1, ..., 83], since 433 is the 83rd prime
   Ø       Map each to the nth prime
    ʒ      Get elements that return 1
     SO     When the sum of the digits
        Q   Equals
       T    10

Prawie 8 bajtów

Byłoby to ważne, gdyby można było odegrać jeszcze jeden bajt.

žyLØʒSO8Q

Wypróbuj online!

Wydajność: [17, 53, 71, 107, 233, 251, 431, 503, 521, 701]

Wyjaśnienie

žy          Push number 128, since 701 is the 125th prime
  L         Push array [1, ..., 128]
   ØʒSO8Q   Map to nth primes and filter to those with a digit sum of 8 (see above)

3

Mathematica, 52 bajty

Select[Prime@Range[10^6],Tr@IntegerDigits@#==52&,10]

{799999,998989,999979,1789999,1798999,1979899,1989979,1997899,1999969,2599999}

dzięki za @ Nie drzewo na -6 bajtów


1
Możesz powiedzieć, Selectile rzeczy chcesz zwrócić:Select[Prime@Range[10^6],Tr@IntegerDigits@#==52&,10]
Nie drzewo

1
Select[Prime@Range[77705],Tr@IntegerDigits@#==50&]
Lynn,

2

J, 29 bajtów

(#~(29=[:+/"."0@":)"0)p:i.872

Wypróbuj online!

Zdecydowanie działa na REPL, prawdopodobnie działa również zwykły program (nie jestem pewien, jak J wypisuje, aby programy były szczere).

Pierwsze przejście, niezbyt idealne, ale nie mogę wymyślić bardziej sprytnych podejść. Zamierzam zbadać twarde kodowanie mniejszej sekwencji.

Wyjaśnienie

(#~(29=[:+/"."0@":)"0)p:i.872
                      p:i.872  First 872 primes
 #~                            Filter by
   (29=[:+/"."0@":)"0            Digital sum = 29
                   "0              For each
                ":                 Convert to string
           "."0                    Convert each character to a number
         +/                        Sum results
    29=                            Equate to 29

872 gwarantuje, że zostanie wykorzystanych tylko pierwszych 10 liczb pierwszych, których suma cyfrowa wynosi 29.


2

V , 73 71 bajtów

i8aa9
998a99
a98a
aa89
18998a9
18a8a
18a9989
197aa
199898a
1a7a9Ía/999

Wypróbuj online!

Prosta kompresja zamiany podciągu - sprawdziłem wszystkie możliwe wyniki odpowiedzi, a następnie wykonałem test „który z nich ma prostą zamianę ciągów znaków, która zapisuje większość znaków”. np. generowanie tej tabeli . [edytuj: Spojrzałem ponownie na tabelę i zobaczyłem, że zamiast tego mogę zrobić 71-bajtową wersję].

Wyższe liczby pierwsze mają więcej długich serii 9, a najlepsze, jakie znalazłem, to to, że cyfry sumują się do 73, wzór 89999 -> 1 znak obniża tekst z 99 bajtów do 63 bajtów. Znalezienie sposobu na cofnięcie „a” -> „89999” w pozostałych 10 bajtach doprowadziło mnie do V.


1

Japt , 19 bajtów

L²õ f_j ©Zìx ¥19ïA

Sprawdź to


Wyjaśnienie

L²õ

Wygeneruj tablicę liczb całkowitych ( õ) od 1 do 100 ( L) podniesionych do kwadratu.

f_          Ã

Filtruj ( f) przepuszczając każdą przez funkcję, gdzie Zjest bieżący element.

j

Sprawdź, czy Zjest liczbą pierwszą.

©

Logiczne AND ( &&).

Zìx

Podziel Zna tablicę cyfr ( ì) i zmniejsz przez dodanie ( x).

¥19

Sprawdź równość z 19.

¯A

Wyciąć ( ¯) na 10. element i niejawnie wyprowadzić wynikową tablicę.


1

Japt , 19 bajtów

AÆ_j ©19¥Zì x «X´}a

Wypróbuj online! z -Qflagą, aby sformatować tablicę.

Generuje pierwsze 10 liczb pierwszych, których cyfry dodają do 19:

[199, 379, 397, 487, 577, 739, 757, 829, 883, 919]

Zauważ, że może to być golf do 18 bajtów ( ì xìx), ale nie ma liczb pierwszych z cyfrą 18.

Wyjaśnienie

Odwzoruj tablicę [0, ..., 9]za pomocą następującej funkcji, gdzie Xjest bieżąca wartość.

  _              }a

Zwraca pierwszą liczbę całkowitą, która zwraca wartość true z następującej funkcji, gdzie Zjest bieżąca wartość

   j ©

Sprawdź, czy ten numer jest liczbą pierwszą i ...

      19¥Zì x

Suma ( x) cyfr ( ì) w Zequals ( ¥) 19,

              «X´

I Xjest fałszem ( «to „i nie” lub &&!). To także zmniejsza X( ´).

Wynikowa tablica jest niejawnie wyprowadzana.


Och, miło; związaliśmy się z różnymi podejściami.
Kudłaty

1

PARI / GP, 40 bajtów

select(x->sumdigits(x)==40,primes(8600))

Niewiele golfa na ten temat (wybierz te xz sumą 40 cyfr wśród pierwszych 8600 liczb pierwszych). Dane wyjściowe to:

[49999, 68899, 69997, 77899, 78889, 78979, 79699, 79987, 85999, 88789]


1

Ruby 2.4.1, 74 bajty

Nigdy nie zamierzałem pokonać jednego z języków zoptymalizowanych dla Codegolfa, ale wciąż fajnie było to robić w Ruby. Frustrujące, że Prime nie jest w Core, ale w standardowej bibliotece. Jestem także sfrustrowany, że nie mogę pokonać Haskella.

2.4.1 :014 > require'prime';2.step.lazy.select{|n|n.digits.sum==74&&n.prime?}.first(10)
=> [389999999, 398999999, 498989999, 498998999, 499898999, 499899989, 499979999, 499989989, 579989999, 588999899]

0

Paradoc (v0.2.7 +), 10 bajtów (CP-1252)

5h¶fφTBŠT=

Wypróbuj online!

5h         .. 5 hundred
  ¶        .. Check if a number is prime...
   f       .. ...filter by the preceding block; converts 500
           .. to the range [0, 1, ..., 499]
    φ      .. Filter by the following block:
     T     .. Ten
      B    .. Base; convert to base-10 digits
       Š   .. Sum, resulting in the digit sum
        T  .. Ten
         = .. Check if (the digit sum and ten are) equal

Nieco wątpliwe, ponieważ wypisuje wszystkie liczby bez separatora między nimi. 11-bajtowy program, który drukuje każdą liczbę w osobnym wierszu:

nIè¶fφTBŠE=

Jedyną rzeczą, o której warto wspomnieć, jest nieco trudniejsza do zbudowania górna granica: 18² = 324.


0

Bubblegum , 37 bajtów

00000000: 0dc6 3901 4031 0c80 5043 9dfe 9180 7f63  ..9.@1..PC.....c
00000010: 6579 f028 9ed7 352d e7a3 4f48 37ff 9164  ey.(..5-..OH7..d
00000020: 4c96 04f7 02                             L....

Wypróbuj online!

Dane wyjściowe to 29989,39799,39979,48799,48889,49789,56989,58699,58789,58897

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.