1, 2, 3, 14 ... oder ist es 15?

32

Ein bekanntes Lied der irischen Rockband U2 beginnt mit dem Sänger Bono, der auf Spanisch "1, 2, 3, 14" sagt (" uno, dos, tres, catorce ").

Es gibt verschiedene Theorien zur Bedeutung dieser Zahlen. Anscheinend lautet die offizielle Erklärung " Wir haben in dieser Nacht zu viel getrunken ". Aber es gibt eine interessantere Hypothese: Bono bezieht sich auf eine ganzzahlige Sequenz von OEIS, wie z

A107083 :

Ganzzahlen kwie das 10^k + 31ist prime.
1, 2, 3, 14, 18, 44, 54, ...

Als Bono in einem Interview die unvermeidliche Frage "Warum 14" stellte, gab er zu, dass er diese Nummer etwas satt hatte. Der Journalist schlug stattdessen "15" vor, und in diesem Konzert wurden die Texte tatsächlich in "1, 2, 3, 15" geändert. (Die Geschichte kann hier auf Spanisch gelesen werden ). Sehr wahrscheinlich ließ sich der Journalist inspirieren

A221860 :

Indizes k, prime(k) - kdie eine Potenz von sind 2, wo prime(k)die k-te Primzahl ist.
1, 2, 3, 15, 39, 2119, 4189897, ...

Die Herausforderung

Schreiben Sie zwei Programme in derselben Sprache. Der erste sollte eine Eingabe nehmen nund den n-ten Ausdruck von A107083 oder die ersten nAusdrücke ausgeben . In ähnlicher Weise sollte der zweite nAusdruck den -ten Ausdruck von A221860 oder den ersten Ausdruck ausgebenn .

Die Punktzahl ist die Summe der Längen der beiden Programme in Bytes plus dem Quadrat der Levenshtein-Distanz zwischen den Bytedarstellungen der beiden Programme.

Wenn eine Zeichenkodierung verwendet wird, bei der jedes Zeichen einem Byte entspricht, kann dieses Skript zum Messen des Levenshtein-Abstands verwendet werden.

Wenn zum Beispiel die beiden Programme abcdefghund sind bcdEEfg, lautet die Punktzahl 8 + 7 + 4^2 = 31.

Die niedrigste Punktzahl gewinnt.

Zusätzliche Regeln

  • Die Ausgabe kann für jede Sequenz unabhängig 1-basiert oder 0-basiert sein (es ist also zulässig, wenn eines der Programme 1-basiert und das andere 0-basiert ist).

  • Jedes Programm kann konsistent, aber unabhängig vom anderen, entweder den n-ten oder den ersten Ausdruck ausgeben n.

  • Programme oder Funktionen sind für jede Sequenz unabhängig zulässig.

  • Ein- und Ausgabemittel und -format sind wie gewohnt flexibel . Standardlücken sind verboten .

Luis Mendo
quelle

Antworten:

20

Gelee , 16 + 16 + 1² = 33

A107083

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

Probieren Sie es online!

A221860

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

Probieren Sie es online!

Wie es funktioniert

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
quelle
4

Jelly , 12 + 12 + 8² = 88 Bytes

1, 2, 3, 14

ÆN_µæḟ2=
1Ç#

Probieren Sie es online!

1, 2, 3, 15

10*+31ÆP
1Ç#

Probieren Sie es online!

Undichte Nonne
quelle
1) Es sollte den n-ten Ausdruck ausgeben, nicht die ersten n Ausdrücke. 2) Hey, einer unserer Ausschnitte ist fast derselbe! 3) Ähh ... das 10fühlt sich sehr lang an.
Erik der Outgolfer
1) Anstatt den n-ten Term auszugeben, kann jedes Programm die ersten n Terms unabhängig ausgeben.
Undichte Nonne
Hm, damit hätte meine Antwort eine kleinere Punktzahl.
Erik der Outgolfer
@EriktheOutgolfer Entschuldigung für die Verwirrung, ich habe das aus Gründen der Klarheit in den Haupttext aufgenommen (vorher war es nur unter "zusätzlichen Regeln")
Luis Mendo
3

MATL , 17 + 17 + 7² = 83

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

0G:"`Q11qy^31+Zp~

Probieren Sie es online!

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

0G:"`QtYqy-Bzq~p~

Probieren Sie es online!

Beide verwenden das ähnliche Schema, bei 0G:"`Qdem ein Zähler ausgeführt wird und zurückkehrt, wenn eine Bedingung erfüllt nwurde. Das eigentliche Programm ist dann ziemlich unkompliziert. Die 15Variante hat ein Füllzeichen ( ~p~), um den Levenshtein-Abstand zu minimieren, während das 14Programm ein verwendet, um 11qybesser t10wmit dem anderen Programm übereinzustimmen.

Geteilter Teil:

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

Spitzenprogramm:

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

Unteres Programm:

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
quelle
1

05AB1E (Legacy) , 10 + 11 + 6 2 = 84 69 57 Byte

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

ε>а32<+p

Probieren Sie es online aus.

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

ε>Ð<ØαD<&_

Probieren Sie es online aus.

n

½counter_variableµcounter_variablea

Erläuterung:

Î            # 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
quelle