Простые числа с изюминкой


13

Примечание: это в значительной степени вдохновлено этим вопросом .

Задача:

Ваша задача - сгенерировать nпростое число, когда каждый символ вашей программы повторяется nна месте.

Допустим, ваша программа:

Derp

Каждый символ там повторяется один раз, поэтому он должен выводиться 2.

Когда каждый символ дублируется на месте, вот так:

DDeerrpp

Это должно генерировать 2-е простое число, которое является 3.

Технические характеристики:

  • Ваша программа не должна принимать входные данные и выводить соответствующее простое число.
  • Ваша программа должна работать для всех простых чисел, учитывая достаточно времени и памяти.
  • Лидирующие и конечные переводы строки в порядке.
  • Вывод должен быть в базовой базе языка по умолчанию - если по умолчанию нет, любая база в порядке.

Это , поэтому выигрывает самый короткий код в байтах.


6
Имеет ли Ваша программа должна работать для всех простых чисел, учитывая достаточное количество времени и памяти. значит я не могу использовать, например, int в C?
Деннис

Ответы:


21

Желе , 13 байт

“Ŀo‘’FQỌµḟ;¹V

Попробуйте онлайн! или запустите первые десять программ .

Фон

У желе есть несколько различных типов строковых литералов; все они начинаются с . Если литерал содержит более одного , возвращается строковый массив, который отделяет строки друг от друга.

Например, “abc“def”урожайность ['abc', 'def'].

В зависимости от последнего символа литерала (любой из ”«»‘’ которых, «в настоящее время не реализован), можно выбирать между различными типами литералов. Для , мы получаем кодовые точки в кодовой странице Jelly вместо соответствующих символов Unicode.

Например, “abc“def‘урожайность [[97, 98, 99], [100, 101, 102]].

Литералы в первых трех программах соответствуют следующим массивам кодов.

“Ŀo‘           -> [199, 111]
““ĿĿoo‘        -> [[], [199, 199, 111, 111]]
“““ĿĿĿooo‘     -> [[], [], [199, 199, 199, 111, 111, 111]]

Как это работает ( n = 3 )

“““ĿĿĿooo‘‘‘’’’FFFQQQỌỌỌµµµḟḟḟ;;;¹¹¹VVV  Main link. Implicit argument: 0

“““ĿĿĿooo‘                               Yield the 2D array
                                         [[], [], [199, 199, 199, 111, 111, 111]].
          ‘‘                             Increment twice, yielding
                                         [[], [], [201, 201, 201, 113, 113, 113]].
            ’’’                          Decrement thrice, yielding
                                         [[], [], [198, 198, 198, 110, 110, 110]].
               F                         Flatten, yielding
                                         [198, 198, 198, 110, 110, 110].
                FF                       Twice more. Does nothing.
                  Q                      Unique; yield [198, 110].
                   QQ                    Twice more. Does nothing.
                     Ọ                   Unordinal; convert the Unicode code points
                                         198 and 110 to 'Æ' and 'n'.
                      ỌỌ                 Twice more. Does nothing.
                        µµµ              Begin three monadic chains, all with
                                         argument s := "Æn".
                           ḟ             Filter-false; remove the characters of s
                                         from s, yielding "".
                            ḟḟ           Twice more. Does nothing.
                              ;;;¹       Concatenate with s three times, yielding
                                         "ÆnÆnÆn".
                                  ¹¹     Identity function. Does nothing.
                                    V    Eval the resulting Jelly code, i.e.,
                                         call the next-prime atom thrice, with
                                         initial implicit argument 0.
                                     VV  Eval two more times. This is a no-op
                                         on integers.

1
Это определенно нуждается в объяснении ... и в зависимости от того, как оно изложено, это может быть единственный язык, который может это сделать?
Value Ink

6
Что, как? Это просто слишком быстро.
clismique

@ValueInk Я отредактировал свой ответ.
Деннис

21

GS2 ( commit 67fea47 ), 6 3 байта

dnR

Как это устроено

Как и большинство команд, GS2 d перегружен. Первоначально в стеке есть пустой список (входные данные или их отсутствие), поэтому dвычисляется его сумма. После первой итерации в стеке находится 0 и dвычисляется его четность (также 0 ). Таким образом, независимо от того, сколько раз мы повторяем d, результатом всегда будет один 0 .

Следующая часть проста. Команда nвыскакивает из верхней части стека и вставляет следующее простое число. Таким образом, повторение n k раз вычисляет k премьер.

Наконец, команда просто применяет str к вершине стека, который преобразует число в его строковое представление и не влияет на строки. Таким образом, независимо от того, сколько раз мы повторяемR , результатом будет строковое представление k премьер.


2
что на земле !?
downrep_nation

3
Не реанимируйте
Цифровая травма
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.