S'amorce avec une touche

13

Remarque: ceci est fortement inspiré par cette question .

Tâche:

Votre tâche consiste à générer le ne premier, lorsque chaque caractère de votre programme est répété plusieurs nfois en place.

Disons que votre programme est:

Derp

Chaque caractère est répété une fois, il devrait donc sortir 2.

Lorsque chaque personnage est dupliqué sur place, comme ceci:

DDeerrpp

Cela devrait générer le 2ème prime, qui est 3.

Spécifications:

  • Votre programme ne doit accepter aucune entrée et produire le nombre premier respectif.
  • Votre programme doit fonctionner pour tous les nombres premiers, avec suffisamment de temps et de mémoire.
  • Les sauts de ligne en tête et en queue vont bien.
  • La sortie doit être dans la base par défaut de la langue - s'il n'y a pas de valeur par défaut, n'importe quelle base est correcte.

C'est le , donc le code le plus court en octets l'emporte.

clismique
la source
6
Est -ce que votre programme doit travailler pour tous les nombres premiers, assez de temps et de la mémoire. signifie que je ne peux pas utiliser, par exemple, int en C?
Dennis

Réponses:

21

Gelée , 13 octets

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

Essayez-le en ligne! ou exécutez les dix premiers programmes .

Contexte

Jelly a plusieurs types de littéraux de chaîne; tous commencent par un . Si le littéral en contient plusieurs , un tableau de chaînes est renvoyé et sépare les chaînes les unes des autres.

Par exemple, les “abc“def”rendements ['abc', 'def'].

Selon le dernier caractère du littéral (n'importe ”«»‘’lequel, où «n'est actuellement pas implémenté), on peut choisir entre les différents types de littéraux. Pour , nous obtenons les points de code dans la page de codes de Jelly au lieu des caractères Unicode correspondants.

Par exemple, les “abc“def‘rendements [[97, 98, 99], [100, 101, 102]].

Les littéraux des trois premiers programmes correspondent aux tableaux de points de code suivants.

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

Comment ça marche ( 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
la source
1
Cela a certainement besoin d'une explication ... et selon la façon dont cela est présenté, ce pourrait être le seul langage qui puisse le faire?
Value Ink
6
Quoi comment? C'est tout simplement trop rapide.
clismique
@ValueInk J'ai modifié ma réponse.
Dennis
21

GS2 ( commit 67fea47 ), 6 3 octets

dnR

Comment ça fonctionne

Comme la plupart des commandes, les GS2 dsont surchargées. Initialement, il y a une liste vide (l'entrée ou son absence) sur la pile, donc dcalcule sa somme. Après la première itération, il y a un 0 sur la pile et dcalcule sa parité (également 0 ). Ainsi, quel que soit le nombre de répétitions d, le résultat sera toujours un 0 unique .

La partie suivante est simple. La commande fait napparaître le haut de la pile et pousse le nombre premier suivant. Ainsi, répéter n k fois calcule le k premier.

Enfin, la commande applique simplement str en haut de la pile, ce qui convertit un nombre en sa représentation sous forme de chaîne et n'affecte pas les chaînes. Ainsi, peu importe combien de fois nous répétonsR , le résultat sera la représentation sous forme de chaîne du k premier.

Dennis
la source
2
que diable!?
downrep_nation
3
Ne pas réanimer
Digital Trauma