1, 2, 3, 14… ou est-ce 15?


32

Une chanson bien connue du groupe de rock irlandais U2 commence avec le chanteur Bono disant "1, 2, 3, 14" en espagnol (" uno, dos, tres, catorce ").

Il existe différentes théories quant à la signification de ces chiffres. Apparemment, l' explication officielle est " nous avons trop bu cette nuit-là ". Mais il y a une hypothèse plus intéressante: Bono fait référence à une séquence entière d'OEIS, telle que

A107083 :

Entiers ktels que 10^k + 31c'est premier.
1, 2, 3, 14, 18, 44, 54, ...

Dans une interview, lorsqu'on lui a posé la question inévitable "pourquoi 14", Bono a admis qu'il était un peu fatigué de ce nombre. Le journaliste a suggéré "15" à la place, et dans le concert de cette nuit, les paroles ont été effectivement changées en "1, 2, 3, 15". (L'histoire peut être lue ici , en espagnol). Il est fort probable que le journaliste s'est inspiré de

A221860 :

Des indices ktels que prime(k) - kc'est une puissance de 2, où prime(k)est le k-ième nombre premier.
1, 2, 3, 15, 39, 2119, 4189897, ...

Le défi

Écrivez deux programmes dans la même langue. Le premier doit prendre une entrée net une sortie du n-ème terme de A107083 , ou des premiers ntermes. De même, le second devrait afficher le n-ème terme de A221860 , ou les premiers ntermes.

Le score est la somme des longueurs des deux programmes, en octets, plus le carré de la distance Levenshtein entre les représentations d'octets des deux programmes.

Si un codage de caractères est utilisé de telle sorte que chaque caractère correspond à un octet, ce script peut être utilisé pour mesurer la distance Levenshtein.

Par exemple, si les deux programmes sont abcdefghet bcdEEfg, le score est 8 + 7 + 4^2 = 31.

Le score le plus bas l'emporte.

Règles supplémentaires

  • La sortie peut être 1basée sur ou 0basée sur, indépendamment pour chaque séquence (il est donc autorisé si l'un des programmes est 1basé et l'autre est 0basé).

  • Chaque programme peut, de manière cohérente mais indépendamment de l'autre, produire le n-ème terme ou les premiers ntermes.

  • Les programmes ou fonctions sont autorisés, indépendamment pour chaque séquence.

  • Les moyens et le format d'entrée et de sortie sont flexibles comme d'habitude . Les échappatoires standard sont interdites .

Réponses:


20

Gelée , 16 + 16 + 1² = 33

A107083

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

Essayez-le en ligne!

A221860

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

Essayez-le en ligne!

Comment ça marche

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.


4

Gelée , 12 + 12 + 8² = 88 octets

1, 2, 3, 14

ÆN_µæḟ2=
1Ç#

Essayez-le en ligne!

1, 2, 3, 15

10*+31ÆP
1Ç#

Essayez-le en ligne!


1) Il devrait afficher le nième terme, pas les n premiers termes 2) Hé, un de nos extraits est presque le même! 3) Euh ... ça 10fait très longtemps.
Erik the Outgolfer

1) Au lieu de sortir le nième terme, chaque programme peut sortir indépendamment les n premiers termes.
Leaky Nun

Hm, donc cela donnerait à ma réponse une sorte de score plus petit.
Erik the Outgolfer

@EriktheOutgolfer Désolé de la confusion, j'ai incorporé cela dans le texte principal pour plus de clarté (auparavant c'était seulement sous "règles supplémentaires")
Luis Mendo


3

MATL , 17 + 17 + 7² = 83

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

0G:"`Q11qy^31+Zp~

Essayez-le en ligne!

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

0G:"`QtYqy-Bzq~p~

Essayez-le en ligne!

Les deux utilisent le schéma similaire d' 0G:"`Qavoir un compteur en cours d'exécution et de retour lorsqu'une condition a été remplie nfois. Le programme réel est alors assez simple. La 15variante a un certain remplissage ( ~p~) pour minimiser la distance Levenshtein, tandis que le 14programme utilise un 11qyplutôt que t10wpour mieux correspondre à l'autre programme.

Partie partagée:

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

Meilleur programme:

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

Programme inférieur:

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.

1

05AB1E (hérité) , 10 + 11 + 6 2 = 84 69 57 octets

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

ε>а32<+p

Essayez-le en ligne.

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

ε>Ð<ØαD<&_

Essayez-le en ligne.

n

½counter_variableµcounter_variableune

Explication:

Î            # 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)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.