1, 2, 3, 14… czy jest to 15?

32

Dobrze znana piosenka irlandzkiego zespołu U2 zaczyna się od piosenkarza Bono mówiącego po hiszpańsku „1, 2, 3, 14” („ uno, dos, tres, catorce ”).

Istnieją różne teorie dotyczące znaczenia tych liczb. Najwyraźniej oficjalne wyjaśnienie brzmi: „ piłem za dużo tej nocy ”. Ale istnieje ciekawsza hipoteza: Bono odnosi się do jakiejś liczby całkowitej z OEIS, na przykład

A107083 :

Liczby całkowite ktakie, które 10^k + 31są liczbą pierwszą.
1, 2, 3, 14, 18, 44, 54, ...

W wywiadzie, gdy zadano mu nieuniknione pytanie „dlaczego 14”, Bono przyznał, że był trochę zmęczony tą liczbą. Dziennikarz zasugerował zamiast tego „15”, a podczas tego wieczoru koncertowego teksty rzeczywiście zostały zmienione na „1, 2, 3, 15”. (Historię można przeczytać tutaj , w języku hiszpańskim). Całkiem prawdopodobne, że dziennikarz czerpał inspirację

A221860 :

Wskaźniki ktakie, które prime(k) - ksą potęgą 2, gdzie prime(k)jest k-ta liczba pierwsza.
1, 2, 3, 15, 39, 2119, 4189897, ...

Wyzwanie

Napisz dwa programy w tym samym języku. Pierwszy powinien przyjmować dane wejściowe ni wyjściowe jako n-ty termin A107083 lub pierwsze nterminy. Podobnie, drugi powinien wypisaćn -ty termin z A221860 lub pierwsze nwarunki.

Wynik to suma o długości dwóch programów w bajtach, plus kwadrat z odległości Levenshteina między reprezentacjami bajt dwóch programów.

Jeśli stosowane jest kodowanie znaków, tak aby każdy znak odpowiadał jednemu bajtowi, ten skrypt może być użyty do pomiaru odległości Levenshteina.

Na przykład, jeśli dwa programy są abcdefghi bcdEEfg, wynikiem jest 8 + 7 + 4^2 = 31.

Najniższy wynik wygrywa.

Zasady dodatkowe

  • Wyjście może być 1oparte na podstawie lub na podstawie 0niezależnie dla każdej sekwencji (więc jest dozwolone, jeśli jeden z programów jest 1oparty na podstawie, a drugi na podstawie 0).

  • Każdy program może, konsekwentnie, ale niezależnie od siebie, albo nwypisać -ty lub pierwszy ntermin.

  • Programy lub funkcje są dozwolone, niezależnie dla każdej sekwencji.

  • Środki i format wejściowy i wyjściowy są jak zwykle elastyczne . Standardowe luki są zabronione .

Luis Mendo
źródło

Odpowiedzi:

20

Galaretka , 16 + 16 + 1² = 33

A107083

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

Wypróbuj online!

A221860

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

Wypróbuj online!

Jak to działa

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
źródło
4

Galaretka , 12 + 12 + 8² = 88 bajtów

1, 2, 3, 14

ÆN_µæḟ2=
1Ç#

Wypróbuj online!

1, 2, 3, 15

10*+31ÆP
1Ç#

Wypróbuj online!

Leaky Nun
źródło
1) Powinien wygenerować n-ty termin, a nie pierwsze n-terminów 2) Hej, jeden z naszych fragmentów jest prawie taki sam! 3) Uch ... to 10wydaje się bardzo długie.
Erik the Outgolfer
1) Zamiast wypisywać n-ty termin, każdy program może niezależnie wypisywać pierwsze n terminów.
Leaky Nun
Hm, więc moja odpowiedź miałaby mniejszy wynik.
Erik the Outgolfer
@EriktheOutgolfer Przepraszam za zamieszanie, włączyłem to do głównego tekstu dla większej przejrzystości (wcześniej było to tylko na „dodatkowych zasadach”)
Luis Mendo
3

MATL , 17 + 17 + 7² = 83

1, 2, 3, 14, ... (17 bajtów)

0G:"`Q11qy^31+Zp~

Wypróbuj online!

1, 2, 3, 15, ... (17 bajtów)

0G:"`QtYqy-Bzq~p~

Wypróbuj online!

Oba stosują podobny schemat polegający 0G:"`Qna tym, że licznik uruchamia się i wraca, gdy warunek zostanie spełniony nrazy. Rzeczywisty program jest więc dość prosty. 15Wariant ma jakiś wypełniacz ( ~p~), aby zminimalizować dystans Levenshteina, natomiast 14Program wykorzystuje 11qyzamiast t10wdopasować inny program lepiej.

Część wspólna:

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

Najlepszy program:

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

Dolny program:

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
źródło
1

05AB1E (starsza wersja) , 10 + 11 + 6 2 = 84 69 57 bajtów

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

ε>а32<+p

Wypróbuj online.

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

ε>Ð<ØαD<&_

Wypróbuj online.

n

½counter_variableµcounter_variableza

Wyjaśnienie:

Î            # 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
źródło