Primos com um toque

13

Nota: isso é fortemente inspirado por esta pergunta .

Tarefa:

Sua tarefa é gerar o nth prime, quando cada caractere do seu programa é repetido várias nvezes.

Digamos que seu programa seja:

Derp

Cada caractere é repetido uma vez, portanto deve ser exibido 2.

Quando cada caractere é duplicado no local, da seguinte maneira:

DDeerrpp

Isso deve gerar o segundo primo, que é 3.

Especificações:

  • Seu programa não deve aceitar nenhuma entrada e gerar o respectivo prime.
  • Seu programa deve funcionar para todos os números primos, com tempo e memória suficientes.
  • As novas linhas iniciais e finais são boas.
  • A saída deve estar na base padrão do idioma - se não houver padrão, qualquer base estará correta.

Isso é , então o código mais curto em bytes vence.

clismique
fonte
6
Será que seu programa deve funcionar para todos os números primos, dado tempo e memória suficiente. significa que não posso usar, por exemplo, int em C?
Dennis

Respostas:

21

Gelatina , 13 bytes

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

Experimente online! ou execute os dez primeiros programas .

fundo

A geléia tem vários tipos diferentes de literais de string; todos eles começam com a . Se o literal contiver mais de um , uma matriz de strings será retornada e separará as strings umas das outras.

Por exemplo, “abc“def”produz ['abc', 'def'].

Dependendo do último caractere do literal (qualquer um dos ”«»‘’, onde «atualmente não está implementado), é possível escolher entre os diferentes tipos de literais. Pois , obtemos os pontos de código na página de código do Jelly em vez dos caracteres Unicode correspondentes.

Por exemplo, “abc“def‘produz [[97, 98, 99], [100, 101, 102]].

Os literais nos três primeiros programas correspondem às seguintes matrizes de pontos de código.

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

Como funciona ( 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.
Dennis
fonte
1
Definitivamente, isso precisa de uma explicação ... e, dependendo de como é apresentado, pode ser o único idioma que pode fazer isso?
Value Ink
6
O quão? Isso é simplesmente rápido demais.
Clismique #
@ValueInk Eu editei minha resposta.
Dennis
21

GS2 ( confirmação 67fea47 ), 6 3 bytes

dnR

Como funciona

Como a maioria dos comandos, os GS2 destão sobrecarregados. Inicialmente, há uma lista vazia (a entrada ou a falta dela) na pilha, então dcalcula sua soma. Após a primeira iteração, há um 0 na pilha e dcalcula sua paridade (também 0 ). Assim, não importa quantas vezes repetimos d, o resultado sempre será um único 0 .

A próxima parte é simples. O comando nabre o topo da pilha e pressiona o próximo número primo. Assim, repetir n k vezes calcula k prime.

Finalmente, o comando simplesmente aplica str ao topo da pilha, que converte um número em sua representação de string e não afeta as strings. Portanto, não importa quantas vezes repetamos R, o resultado será a representação em cadeia de k prime.

Dennis
fonte
2
o que na Terra!?
downrep_nation
3
Não ressuscite
Digital Trauma