1, 2, 3, 14 ... atau 15?

32

Sebuah lagu terkenal oleh band rock Irlandia U2 dimulai dengan penyanyi Bono mengatakan "1, 2, 3, 14" dalam bahasa Spanyol (" uno, dos, tres, catorce ").

Ada berbagai teori tentang pentingnya angka-angka itu. Rupanya penjelasan resmi adalah " kami minum terlalu banyak malam itu ". Tetapi ada hipotesis yang lebih menarik: Bono mengacu pada beberapa urutan bilangan bulat dari OEIS, seperti

A107083 :

Bilangan bulat kseperti itu 10^k + 31adalah prima.
1, 2, 3, 14, 18, 44, 54, ...

Dalam sebuah wawancara, ketika ditanya pertanyaan yang tak terhindarkan "mengapa 14", Bono mengaku agak bosan dengan angka itu. Wartawan itu menyarankan "15" sebagai gantinya, dan dalam konser malam itu liriknya memang diubah menjadi "1, 2, 3, 15". (Ceritanya bisa dibaca di sini , dalam bahasa Spanyol). Sangat mungkin jurnalis mengambil inspirasi dari

A221860 :

Indeks ksehingga prime(k) - kmerupakan kekuatan 2, di mana prime(k)adalah kperdana -th.
1, 2, 3, 15, 39, 2119, 4189897, ...

Tantangan

Tulis dua program dalam bahasa yang sama. Yang pertama harus mengambil input ndan output njangka ke- 10 dari A107083 , atau npersyaratan pertama . Demikian pula, yang kedua harus menghasilkan njangka ke- A dari A221860 , atau nistilah pertama .

The skor adalah jumlah dari panjang dari dua program, dalam byte, ditambah persegi dari jarak Levenshtein antara representasi byte dari dua program.

Jika pengkodean karakter digunakan sedemikian rupa sehingga setiap karakter sesuai dengan satu byte, skrip ini dapat digunakan untuk mengukur jarak Levenshtein.

Misalnya, jika kedua program tersebut adalah abcdefghdan bcdEEfg, angkanya adalah 8 + 7 + 4^2 = 31.

Skor terendah menang.

Aturan tambahan

  • Outputnya bisa 1-berbasis atau 0-berbasis, secara independen untuk setiap urutan (sehingga diizinkan jika salah satu program 1-berbasis dan yang lain 0-berbasis).

  • Masing-masing program dapat, secara konsisten tetapi independen dari yang lain, baik menghasilkan nistilah -th atau istilah pertama n.

  • Program atau fungsi diizinkan, secara terpisah untuk setiap urutan.

  • Input dan output berarti dan formatnya fleksibel seperti biasa . Celah standar dilarang .

Luis Mendo
sumber

Jawaban:

20

Jelly , 16 + 16 + 1² = 33

A107083

⁵*+31ÆḍÆNB>/
1Ç#

Cobalah online!

A221860

⁵*+31ÆạÆNB>/
1Ç#

Cobalah online!

Bagaimana itu bekerja

1Ç#           Main link. Argument: n

1             Set the return value to 1.
 Ç#           Call the helper link with arguments k, k + 1, k + 2, ... until n of
              them return a truthy value. Return the array of n matches.


⁵*+31ÆḍÆNB>/  Helper link. Argument: k

⁵*            Yield 10**k.
  +31         Yield 10**k + 31.
     Æḍ       Count the proper divisors of 10**k + 31.
              This yields c = 1 if 10**k + 31 is prime, an integer c > 1 otherwise.
       ÆN     Yield the c-th prime.
              This yields q = 2 if 10**k + 31 is prime, a prime q > 2 otherwise.
         B    Binary; yield the array of q's digits in base 2.
          >/  Reduce by "greater than".
              This yields 1 if and only if the binary digits match the regex /10*/,
              i.e., iff q is a power of 2, i.e., iff 10**k + 31 is prime.


⁵*+31ÆạÆNB>/  Helper link. Argument: k

     Æ        Unrecognized token.
              The token, as well as all links to its left, are ignored.
       ÆN     Yield p, the k-th prime.
      ạ       Take the absolute difference of k and p, i.e., p - k.
         B    Binary; yield the array of (p - k)'s digits in base 2.
          >/  Reduce by "greater than".
              This yields 1 if and only if the binary digits match the regex /10*/,
              i.e., iff p - k is a power of 2.
Dennis
sumber
4

Jeli , 12 + 12 + 8² = 88 byte

1, 2, 3, 14

ÆN_µæḟ2=
1Ç#

Cobalah online!

1, 2, 3, 15

10*+31ÆP
1Ç#

Cobalah online!

Biarawati Bocor
sumber
1) Seharusnya menampilkan istilah ke-n, bukan yang pertama dan ke-2 2) Hei, salah satu cuplikan kami hampir sama! 3) Uhh ... 10rasanya sangat lama.
Erik the Outgolfer
1) Alih-alih menghasilkan istilah ke-n, setiap program dapat secara mandiri menampilkan istilah ke-n.
Leaky Nun
Hm, jadi itu akan membuat jawaban saya memiliki nilai yang lebih kecil.
Erik the Outgolfer
@EriktheOutgolfer Maaf tentang kebingungan, saya telah memasukkan itu ke dalam teks utama untuk kejelasan yang lebih besar (sebelumnya itu hanya di bawah "aturan tambahan")
Luis Mendo
3

MATL , 17 + 17 + 7² = 83

1, 2, 3, 14, ... (17 byte)

0G:"`Q11qy^31+Zp~

Cobalah online!

1, 2, 3, 15, ... (17 byte)

0G:"`QtYqy-Bzq~p~

Cobalah online!

Keduanya menggunakan skema serupa 0G:"`Quntuk memiliki penghitung berjalan dan kembali ketika suatu kondisi telah terpenuhi nkali. Program yang sebenarnya cukup mudah. The 15varian memiliki beberapa filler ( ~p~) untuk meminimalkan jarak Levenshtein, sedangkan 14program yang mempekerjakan11qy daripada t10wuntuk mencocokkan program lain yang lebih baik.

Bagian bersama:

0      % Push counter (initially zero)
 G:"   % Loop `n` times
    `  % Do .... while true
     Q % Increment counter

Program teratas:

11q         % Push 10
   y        % Duplicate counter
    ^       % Power
     31+    % Add 31
        Zp  % isprime
          ~ % If not, implicitly continue to next iteration. 
            % Else, implicit display of counter.

Program bawah:

tYq         % Nth prime based on counter
   y-       % Duplicate counter, subtract from nth prime.
     Bzq    % Number of ones in binary presentation, minus one (only zero for powers of two).
        ~p~ % Filler, effectively a NOP.
            % If not zero, implicitly continue to next iteration
            % Else, implicitl display of counter.
Sanchises
sumber
1

05AB1E (warisan) , 10 + 11 + 6 2 = 84 69 57 byte

1, 2, 3, 14, ... (A107083)

ε>а32<+p

Cobalah online.

1, 2, 3, 15, ... (A221860)

ε>Ð<ØαD<&_

Cobalah online.

Keduanya keluaran berbasis 1 nnilai th.

Menggunakan versi lawas 05AB1E, karena itu ½( meningkat counter_variablesebesar 1 jika bagian atas tumpukan benar ) secara implisit setelah setiap iterasi dari µ-Loop ( sementara counter_variabletidak sama denganSebuahbelum, lakukan ... ).

Penjelasan:

Î            # Push 0 and the input
 µ           # While the counter_variable is not equal to the input yet:
  >          #  Increase the top by 1
   Ð         #  Triplicate it (which is our `k`)
    °32<+    #  Take 10 to the power `k`, and add 31
         p   #  Check if this is a prime
             #  (implicit: if it is a prime, increase the counter_variable by 1)
             # (implicitly output the top of the stack after the while-loop)

Î            # Push 0 and the input
 µ           # While the counter_variable is not equal to the input yet:
  >          #  Increase the top by 1
   Ð         #  Triplicate it (which is out `k`)
           #  Get the 0-indexed k'th prime
      α      #  Get the absolute difference of this prime with the copied `k`
       D<&   #  Calculate `k` Bitwise-AND `k-1`
          _  #  And check if this is 0 (which means it's a power of 2)
             #  (implicit: if it is 0, increase the counter_variable by 1)
             # (implicitly output the top of the stack after the while-loop)
Kevin Cruijssen
sumber