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 доданків.
Лина монашка

Гм, так що це могло б зробити мою відповідь меншою кількістю балів.
Ерік Аутгольфер

@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.

1

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

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

ε>а32<+p

Спробуйте в Інтернеті.

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

ε>Ð<ØαD<&_

Спробуйте в Інтернеті.

Обидва виходять на основі 1 нй значення.

Використовується застаріла версія 05AB1E, оскільки вона ½( збільшиться counter_variableна 1, якщо верхня частина стека є правдою ) неявно після кожної ітерації µ-loops ( при цьому counter_variableне дорівнюєавсе-таки зробіть ... ).

Пояснення:

Î            # 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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.