1, 2, 3, 14 ... или это 15?

32

Хорошо известная песня ирландской рок-группы U2 начинается с того, что певец Боно говорит «1, 2, 3, 14» на испанском языке (« uno, dos, tres, catorce »).

Существуют различные теории относительно значения этих чисел. По-видимому, официальное объяснение таково : « Мы выпили слишком много той ночью ». Но есть более интересная гипотеза: Боно ссылается на некоторую целочисленную последовательность из OEIS, такую ​​как

A107083 :

Целые числа kтакие, что 10^k + 31простые.
1, 2, 3, 14, 18, 44, 54, ...

В интервью, когда ему задали неизбежный вопрос «почему 14», Боно признался, что немного устал от этого числа. Журналист предложил вместо этого «15», и на концерте той ночи текст действительно был изменен на «1, 2, 3, 15». (Историю можно прочитать здесь , на испанском). Вполне вероятно, что журналист черпал вдохновение из

A221860 :

Индексы kтакие, что prime(k) - kесть степень 2, где prime(k)находится k-ое простое число.
1, 2, 3, 15, 39, 2119, 4189897, ...

Соревнование

Написать две программы на одном языке. Первый должен принимать nи выводить n-й член A107083 или первые nчлены. Аналогично, второй должен выводить n-й член A221860 или первый nчлен.

Оценка представляет собой сумму из длин двух программ, в байтах, плюс квадрат от расстояния Левенштейн между байтовыми представлениями двух программ.

Если используется кодировка символов, так что каждый символ соответствует одному байту, этот сценарий можно использовать для измерения расстояния Левенштейна.

Например, если две программы abcdefghи bcdEEfg, оценка 8 + 7 + 4^2 = 31.

Самый низкий балл побеждает.

Дополнительные правила

  • Выходные данные могут быть на 1основе или на 0основе, независимо для каждой последовательности (так что это разрешено, если одна из программ основана на 1основе, а другая - на 0основе).

  • Каждая программа может последовательно, но независимо от других, либо выводить n-ый термин, либо первый nтермин.

  • Программы или функции разрешены независимо для каждой последовательности.

  • Средства ввода и вывода и формат, как обычно, гибкие . Стандартные лазейки запрещены .

Луис Мендо
источник

Ответы:

20

Желе , 16 + 16 + 1² = 33

A107083

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

Попробуйте онлайн!

A221860

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

Попробуйте онлайн!

Как это работает

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

Желе , 12 + 12 + 8² = 88 байт

1, 2, 3, 14

ÆN_µæḟ2=
1Ç#

Попробуйте онлайн!

1, 2, 3, 15

10*+31ÆP
1Ç#

Попробуйте онлайн!

Дрянная Монахиня
источник
1) Должен быть выведен n-й термин, а не первые n терминов. 2) Эй, один из наших фрагментов почти одинаков! 3) Э-э ... это 10очень долго.
Эрик Аутгольфер
1) Вместо вывода n-го члена каждая программа может независимо выводить первые n слагаемых.
Утренняя монахиня
Хм, так что мой ответ получит меньшую оценку.
Эрик Outgolfer
@EriktheOutgolfer Извините за путаницу, я включил это в основной текст для большей ясности (ранее это было только в рамках «дополнительных правил»)
Луис Мендо
3

MATL , 17 + 17 + 7² = 83

1, 2, 3, 14, ... (17 байт)

0G:"`Q11qy^31+Zp~

Попробуйте онлайн!

1, 2, 3, 15, ... (17 байт)

0G:"`QtYqy-Bzq~p~

Попробуйте онлайн!

Оба используют одинаковую схему, 0G:"`Qчтобы счетчик работал и возвращался, когда условие было выполнено nраз. Реальная программа тогда довольно проста. 15Вариант имеет некоторый наполнитель ( ~p~) , чтобы минимизировать расстояние Левенштейна, в то время как 14программа работает , 11qyа неt10w в соответствии с другой программой лучше.

Общая часть:

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

Лучшая программа:

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

Нижняя программа:

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
источник
1

05AB1E (наследие) , 10 + 11 + 6 2 = 84 69 57 байт

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

ε>а32<+p

Попробуйте онлайн.

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

ε>Ð<ØαD<&_

Попробуйте онлайн.

Оба выводят 1 на основе Nth значение

Использует унаследованную версию 05AB1E, поскольку она неявно увеличивается½ ( увеличивается counter_variableна 1, если вершина стека верна ) после каждой итерации µ-loops ( хотя counter_variableона не равнаaвсе же делай ... ).

Объяснение:

Î            # 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)
Кевин Круйссен
источник